Povolení přepsání souboru
Pokud makrem ukládáte soubor, musíte programu předat adresu, kde a pod jakým názvem má dokument uložit. Pokud ale již existuje soubor se stejným názvem, dojde k jeho přepsání, a to bez dotazu, na který jste zvyklí při standardním ukládání. Pokud toto považujete za nežádoucí chování, lze se mu vyhnout.
Pro ošetření kódu musíte přidat následující příkaz do podmínek ukládání souboru.
adresa = convertToUrl("/home/dan/test.ods") dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "Overwrite" args1(0).Value = false doc.storeAsUrl(adresa, args1())
Tato úprava zajistí nepřepsání stejně pojmenovaného souboru a program skončí chybou. Chybu musíte ošetřit (viz díl Přerušení cyklů a maker) a zadat nové jméno souboru. Osobně si do názvu přidávám například aktuální datum, abych tomuto chování předešel, ale lze to řešit případně i funkcí inputbox a zadáním nového názvu souboru.
Protože pro nový název potřebujete změnit pouze poslední část adresy, je nutné její rozlišení. Možností, jak to udělat, je rozdělit adresu již přímo při jejím zadávání. Například takto:
cesta = ("/home/dan/") nazev_dokumentu = ("test") adresa = convertToUrl(cesta & nazev_dokumentu & ".ods")
Při ošetření chyby pak vložíte pouze nový název dokumentu. Následující kód poskytuje jednu z možností, jak toto udělat:
sub uloz_dokument dim nazev_dokumentu as string on error goto osetreni_chyby doc = thisComponent cesta = ("/home/22295/") nazev_dokumentu = ("test") dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "Overwrite" args1(0).Value = false adresa = convertToURL(cesta & nazev_dokumentu & ".ods") doc.storeAsURL (adresa,args1()) exit sub osetreni_chyby: dotaz = msgbox("Soubor již existuje – PŘEPSAT?",4,"CHYBA PŘI UKLÁDÁNÍ") if dotaz = 6 then args1(0).Value = true doc.storeAsURL(adresa,args1()) else msgbox "Uložte soubor ručně",0,"CHYBA PŘI UKLÁDÁNÍ" exit sub endif end sub
Filtry při načítání a ukládání souborů
Načítání a ukládání CSV dokumentů se řídí stejnými metodami jako standardní formáty OpenOffice.org. Následující část se věnuje tzv. filtrům, které program používá pro konverzi z a do jiných formátů. V tabulce naleznete názvy několika filtrů – výpis všech filtrů pro Calc naleznete zde – FILTER OPTIONS.
Název filtru |
Popis |
Import |
Export |
---|---|---|---|
StarOffice XML (Calc) |
Standard XML filter |
● |
● |
HTML (StarCalc) |
HTML filter |
● |
● |
MS Excel 97 |
Microsoft Excel 97/2000/XP |
● |
● |
MS Excel 95 |
Microsoft Excel 5.0/95 |
● |
● |
MS Excel 5.0/95 |
Different name for the same filter |
● |
● |
Lotus |
Lotus 1-2-3 |
● |
|
Text – txt – csv (StarCalc) |
Comma separated values |
● |
● |
Rich Text Format (StarCalc) |
● |
● |
Většina z filtrů nepotřebuje další nastavení. Výjimkou je filtr pro CSV a PDF. Exportu do PDF bude
věnován celý příští díl.
TIP: Makro rozlišuje u názvu filtrů velká a malá písmena. Tak je to vždy, pokud zadáváte vlastnost nebo
příkaz jako text.
Použití filtru v kódu makra
Použití v makru je věcí přidání jedné vlastnosti při ukládání nebo otevírání dokumentu.
Sub test_filtru_dokumentu rem adresu dokumentu si změňte podle vlastní potřeby adresa = convertToURL("/home/dan/Dokumenty/test_import_filtru.csv" 'otevřeme dokument test_import_filtru.csv dim arg(1) as new com.sun.star.beans.PropertyValue arg(0).Name = "FilterName" arg(0).Value = "Text – txt – csv (StarCalc)" 'název filtru arg(1).Name = "FilterOptions" arg(1).Value = "44,34,13,1" ' určení podmínek filtru starDeskTop.LoadComponentFromURL(adresa,"_blank",0,arg()) end sub
Podmínky filtru pro csv filter
CSV Filter akceptuje celkem pět podmínek, které oddělujete čárkou. Následující tabulka popisuje jednotlivé podmínky, které jsou dále rozepsány.
Oddělovač pole (1) |
Oddělovač textu (2) |
Znaková sada (3) |
Číslo prvního řádku (4) |
Kódy pro formát sloupců (5) |
|
---|---|---|---|---|---|
Číslo sloupce |
Formát buňky |
||||
, |
" |
ISO-8859-2 (Východní Evropa) |
Řádek číslo |
1 |
1 |
44 |
34 |
13 |
1 |
1/1 |
-
Oddělovač pole – zadáte hodnotu znaku v ASCII.
-
Při vícenásobném výběru oddělujete čísla znakem lomítka (/) . Pokud potřebujete oddělit pole například čárkou a středníkem, zadáte 44/59.
-
Pro ošetření potřeby vícenásobných hodnot je takto možné zadat až čtyři znaky. Ale v případě zafixování šířky sloupce lze zadat pouze tři znaky. Například 44/59/9/FIX.
-
Hodnotu ASCII zjistíte například ve volbě Vložit | Speciální symbol (údaj vpravo dole v závorce) , nebo příkazem print asc(";") v editoru Basic.
-
-
Oddělovač textu je ASCII hodnota znaků (dvojitých a jednoduchých uvozovek) .
-
(") má hodnotu 34
-
(') má hodnotu 39
Jiné hodnoty nejsou povoleny.
-
-
Hodnota znakové sady – lze zadat jako číslo, nebo jako text (uzavřený v uvozovkách) . V následující tabulce je malá ukázka znakových sad. Celkový přehled získáte zde – FILTER OPTIONS.
Znaková sada |
Index |
---|---|
ASCII/US (Western) |
11 |
ISO-8859-1 (Western) |
12 |
ISO-8859-10 (Central European) |
77 |
ISO-8859-13 (Central European) |
78 |
ISO-8859-14 (Western) |
21 |
ISO-8859-15/EURO (Western) |
22 |
ISO-8859-2 (Central European) |
13 |
ISO-8859-3 (Latin 3) |
14 |
Výchozí nastavení systému |
9 |
Unicode (Java's modified UTF-8) |
90 |
Unicode (UTF-7) |
75 |
Unicode (UTF-8) |
76 |
Neznámý |
0 |
TIP: Hodnoty nemusíte zadávat pouze číslem. Lze také zadat ASCII hodnoty přímo místo čísla. Například 44 a asc(",") jsou dva různé způsoby, jak hodnotu zadat. U znakové sady lze zadat název přímo (například "Unicode (UTF-8) ")
4. Číslo prvního řádku – číslo řádku, kde začne převod. Číslování začíná 1.
-
Kód formátu
Vysvětlení formátu
1
Standard
2
Text
3
Datum – MM/DD/YY
4
Datum – DD/MM/YY
5
Datum – YY/MM/DD
9
Ignorovat pole
10
US-English
Typ 10 indikuje, že obsah buňky je v americké angličtině. Pokud pole obsahuje čísla, bude převod úspěšný pouze v případě, že jsou formátovány podle amerického systému (používá tečku jako desetinnou čárku a čárku jako oddělovač tisíců). Použití tohoto typu zajistí správný převod čísel v poli, přestože je výchozí nastavení systému jiné.