Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 6. 9. 2016 20:00:31

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 711

otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Ahoj, nedávno to tady někdo zmiňoval jako problém. Právě jsem na to narazil a též nevím co s tím, víte někdo? Pokouším se otevřít txt takovým makrem:

adresa = convertToURL("http://pchs.cz/nette-blog/www/2016-08-16_objednavky.txt")
dim arg1(1) as new com.sun.star.beans.PropertyValue
arg1(0).Name = "FilterName"
arg1(0).Value = "Text – txt – csv (StarCalc)" 'název filtru
arg1(1).Name = "FilterOptions"
arg1(1).Value = "59,,76,1" '59=středník, nic pro oddelovac textu, 76=UTF-8,1=první řádek
tempDoc = starDeskTop.LoadComponentFromURL(adresa," ",0,arg1())

a potvora se otvírá ve writeru, což nechci protože potřebuji jednotlivé řádky souboru dostat do jednotlivých buněk.

Víte někdo jak na to? Samozřejmě nabízí se řešení že soubor bude csv, ale zatím by t měl být z webu generovaný txt, tak bych to chtěl pokud to jde zachovat.

Editoval ludviktrnka (7. 9. 2016 09:20:20)


LibreOffice 5.4.

Offline

#2 6. 9. 2016 20:34:48

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Normálně otevřít z Calcu FilePickerem, zvolit filter kde se dají nastavit separátory.
Další možnost je načíst to schránkou a vložit jinak - neformátovaný text.
Další možnost je načíst to jako zavřený sešit :

Sub TextDoCalcu_BezFiltru
    Dim FileNo As Integer
    Dim CurrentLine As String
    Dim File As String
    Dim Msg as String
    Dim I as Long
    ' Nastaví buňku v aktuálním listu.
    currentSheet=ThisComponent.CurrentController.ActiveSheet
    fileName =  currentSheet.getCellRangeByName("A1").getString
    ' Vytvoří nový file handler a otevře cestu
    FileNo = FreeFile
    Open fileName For Input As #FileNo
    I = 0
    ' číst soubor, dokud není dosaženo konce (EOF)
    Do While not eof(FileNo)
      ' Čte řádek 
      Line Input #FileNo, CurrentLine   
      ' definuje rozsah, aby údaje šly do A2 : A9999 '
      curentCell = currentSheet.getCellRangeByName("A2:A9999").getCellByPosition(0,I)
      ' Vybere I-tou buňku v definovaném rozmezí, a dá tam řádek souboru
      curentCell.String = CurrentLine
      'Inkrementuje I o jednu
      I = I + 1
    Loop
    Close #FileNo
End Sub 

Nebo tohle - kdysi jsem to testoval, ale už dlouho ne.

Sub ImportCSVIntoTableUTF '(oDoc as object, tableName as String, fileName as String)
Rem http://www.oooforum.org/forum/viewtopic.phtml?p=365860
	Dim oDoc as object
	Dim oSheet as Object 
	Dim oPlan as Object 
	Dim fileName as string
	Doc = ThisComponent
	oSheet = Doc.Sheets(1)
	fileName = "D:\Office\Adresáře\Podklady těžby XML\VstupyNeupravené\adresy8.txt"
   oPlan = Doc.Sheets(1) '.getByIndex(1) 
      sURL = ConvertToURL ( fileName ) 
      sOrigin = "" 
      sFilter = "Text - txt - csv (StarCalc)"
      sOpc = "44,34,76,1,1/2/2/1/3/2" 
'	following use "|" as delimiter - ("|" = 124) 
'      sOpc = "124,,0,1,1/2/2/1/3/2" 
      nModo = com.sun.star.sheet.SheetLinkMode.NORMAL 
      ' link file 
      oPlan.link(sURL, sOrigin, sFilter, sOpc, nModo) 
      ' reset link 
      oPlan.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE) 
End Sub 

Častěji používám tohle

Sub NactiTxtDoCalcu 'Chodí supr
oCell = thisComponent.Sheets.getByIndex(0).getCellByPosition(0,0)
iNumber = freefile()
open "/tmp/dummy.txt" for input as iNumber
While not eof(iNumber)
Line Input #iNumber, sLine
If sLine <>"" then
   sMsg = sMsg & sLine & chr(10)
end if
wend
Close #iNumber
oCell.setString(sMsg)
End Sub 

     Pak ještě existují makra pro Writer. Dá se načíst obsah podle dílů (odstavce, věty ap.). Při tom ale musíte znát předem strukturu. Ta se dá zjistit i makrem, ale stejně nepoznáte nic pokud nevíte, že je to jen nějak modifikovaný známý text.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 6. 9. 2016 20:48:05

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 711

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Tož tomu řikám rychlost ... Supr. Zkoušel jsem první a poslední, první chodí přesně jak jsem chtěl (skoro :-), poslední to hodí do jedné buňky, což jsem nechtěl (stejnou službu udělá webservice). Ale paráda. Akorát nechápu kde se úplně na začátku prvního řádku bere sekvence znaků 
Nevíte? (je to tam v obou případech, ale v originále určitě ne)
a funkce webservice to také nevrací myslím tu sekvenci znaků 


No fakt to nechápu je to tam jak při cestě z webu tak z počítače, stále stejně (zde výstup, zobrazený obsah souboru)
http://pchs.cz/nette-blog/www/2016-08-16_50-Nekdo_jiny.csv
http://pchs.cz/nette-blog/www/2016-08-1 … izkova.csv
http://pchs.cz/nette-blog/www/2016-08-16_33-Brumbal.csv
http://pchs.cz/nette-blog/www/2016-08-16_55-Trnka.csv

Editoval ludviktrnka (6. 9. 2016 21:01:10)


LibreOffice 5.4.

Offline

#4 7. 9. 2016 08:11:59

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Pane Trnka já tam nic nevidím. Stáhl jsem si Někdo jiný, Ostřížková, ale ani PsPadu, ani v Calcu jsem nic takového neviděl. Ty další dva odkazy jsou na stránky zájmové skupiny. Nevím jestli to mám nějak vypreparovat, nebo jinak stáhnout.


To co uvádíte vypadá jako nějaká selekce, nebo substituce českých diakritických znaků , ale na tom co jste poslal nic takového nevidím. Je otázka jestli tam nemáte ještě nějaký filtr, nebo jestli tam nemáte nějak navázanou proměnnou která by tohle uměla. Já prostě nevím.


Ta makra mám v knihovně za sebou protože jsem někdy potřeboval různé mutace podobných činností. Už si také ani většinou nepamatuji k čemu jsem to používal. Takže jsem sejmul to co by se Vám mohlo hodit. Problém bývá ještě v tom, že čas od času se něco změní a ověřené makro přestane makat. Takže náhrady mám blízko abych nestrávil zbytek života googlováním :-)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 7. 9. 2016 08:45:20

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 711

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Já vám každopádně velice děkuji, šlape to perfektně a tu sekvenci znaků v podstatě bez problémů odstraním. Spíše mě to zaráží, jak je něco takového možné, taková neobvyklá sekvence. Zdroj textu je tento: http://pchs.cz/nette-blog/www/2016-08-16_objednavky.txt
To co jsem napsal výše je jeho obsahem.


LibreOffice 5.4.

Offline

#6 7. 9. 2016 09:08:14

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 711

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

Je to sranda, ale po přidání řádku

CurrentLine = Replace(CurrentLine, "","")

to funguje perfektně :-)


LibreOffice 5.4.

Offline

#7 7. 9. 2016 09:57:53

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 844

Re: otevřít makrem txt v calcu KRÁSNĚ VYŘEŠENO

ludviktrnka napsal(a)

...Akorát nechápu kde se úplně na začátku prvního řádku bere sekvence znaků 
Nevíte? (je to tam v obou případech, ale v originále určitě ne)
a funkce webservice to také nevrací myslím tu sekvenci znaků 

Je to informace o kódování UTF v souboru - BOM

https://cs.wikipedia.org/wiki/Byte_order_mark

Normální prohlížeče to znají, podle sekvence dékódují text a (pochopitelně) to nezobrazují.

Jinak idiotské otevírání txt, html, .. jen ve writeru mne také vytáčí.

Varianty (naslepo) -
1. přejmenovat txt na csv,
2. otevřít sešit a do sešitu vložit -> list ze souboru (importovací filtr není nic moc, za to je poměrně snadná aktualizace dat)

Editoval lp. (7. 9. 2016 10:02:08)

Offline

Zápatí