Pokročilé volby ukládání a načítání souborů, export a import csv pomocí maker

programovani.png V tomto díle si ukážeme další možnosti, které poskytuje program při ukládání a načítání souborů, a jak je můžeme ovlivnit pomocí maker.  

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

  1. Oddělovač pole – zadáte hodnotu znaku v ASCII.

    1. 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.

    2. 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.

    3. 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.

  2. Oddělovač textu je ASCII hodnota znaků (dvojitých a jednoduchých uvozovek) .

    1. (") má hodnotu 34

    2. (') má hodnotu 39

      Jiné hodnoty nejsou povoleny.

  3. 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.

5. Formát buněk – zadáváte ve tvaru číslo sloupce / formát (tedy 1/1/2/5 – první sloupec jako standard, druhý sloupec jako datum)

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é.

(Jako ve škole) Průměr: 2,00 | Hodnotilo: 4
 

Komentáře

user avatar Ludvík
Odpovědět
Pokročilé volby ukládání a načítání souborů, export a import csv pomocí maker
27. 02. 2014, 21:37:37
Mám trochu problém. Místo funkce starDeskTop.LoadComponentFromURL která má zřejmě za úkol otevřít nový dokument, požívám thisComponent.storeToURL a tam ty některé podmínky filtru nefungují. Zejména tedy čtvrtá hodnota udávající číslo řádku od něhož se má filtrovat. Můžete mi poradit jak uložit nový soubor.csv kde se vyfiltruje jen část listu od řádku x?

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Daniel Sedláček

Daniel Sedláček

Amatérsky se věnuji programování maker od podzimu 2010.
Aktivní jsem na fóru od ledna 2011.
Od července 2011 spolupracuji i jako moderátor fóra.

Využívám pouze OpenOffice.org (LibreOffice nemám nainstalován).

 
 
 
woo jaw demo hz