Sub HoplaZasoby
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "Zasoby.$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
End Sub
Musíte toto makro přiřadit k události POHLED VYTVOŘEN (asi 9. položka z nabídky UDÁLOSTI). Testoval jsem to na LO Verze: 6.1.2.1 (x64).
]]>cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")............
viz předešlé příspěvky se vloži prozatím 1list s názvem Zasoby aktivním listem však zůstává list Vysledek jenže já potřebuji aby se stal aktivním list Zasoby ma kterém se provedou další změny... jenže kód
dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = "Zasoby"
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())
se sice provede, ale aktivím (vybraným) listem zůstává stále Vysledek.
Pravě jsem zkusil nahrat makro a následně tedy použit kod s číslem a ejhle ono to jde ale to nechápu proč to nejde tím jménem. Proto jsem ty jmena chtěl abych mohl jednoznačně ty listy identifikovat.
Ale za kody díky to zjištění čísla z názvu lisu se může hodit.
Zatím díky max
]]>sub SkokNaSesit
dim Document As Object
dim Sheets As Object
dim Sheet As Object
Document = ThisComponent
Sheets = Document.Sheets
'Sheet = Sheets.getByName("Sheet2") 'Tohle je skok na sešit se jménem ve Vašem případě
Sheet = Sheets.getByName("Zasoby")
Controller =Document.getcurrentController
Controller.setActiveSheet(Sheet)
End sub
'_____________________________________________________
B - Makro pro basic
Sub Skok2
ThisComponent.CurrentController.ActiveSheet = ThisComponent.Sheets.getByName("Zásoby")
end sub
Při nahrávání skoku záznamníkem (řešení pomocí UNO) je postup takto :
1. Postavíte se někam do sešitu "Zasoby" (předpokládaný cíl) třeba do B2. Jistě víte kde potřebujete ve výsledku stát abyste například byl hned na buňce kterou budete číst. Postavte se ale někam blízko - ale vedle. To je příprava kterou využijete až nakonci nahrávání.
2. Nyní běžte na libovolně jiný list.
3. Zapnout záznamník - nahrávání makra.
4. Skočte do cílového listu (předpokládám Zásoby).
5. Přesuňte se na cílovou buňku a udělejte ENTER, Popřípadě SHIFT, a nebo také F2+Enter a podobně. Končíte vždy entrem.
6. Zastavíte nahrávání a správně uložíte pod vhodným jménem a na správné místo ve vlastním sešitě (ne aby Vás napadlo to ukládat do nadřazených maker "MojeMakraStandard").
7. Otevřete knihovnu. Musíte použít převod názvu listu na jeho číslo pořadí.
Original nahrávka vypadá nějak takto :
sub Skok
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1 'respektive jakékoliv číslo pořadí listu (malér možné záměny) to musíme
'nejprve zjistit jiným makrem.
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
end sub
Například takto zjistíme číslo ze jména a spojíme obě makra :
Sub SheetNameToNumber
Dim oSheets, i
oSheets = ThisComponent.Sheets()
For i = 0 to oSheets.Count-1
IF oSheets(i).Name = "Zasoby" Then
iVar = i
'Pokud je hodně listů tak Exit For
End If
Next i
Skok(iVar)
End sub
sub Skok(ByVal iVar as integer)
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = iVar
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
end sub
Dělám to bez testů ale mělo by vše chodit. Snad je to to co opravdu potřebujete.
]]>Sub Dialog2Show
Dim dlg As Object
Dim Cesta As Object
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
DialogLibraries.LoadLibrary("Standard")
dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2 )
dlg.Execute()
x = dlg.model.Cesta.text
Rem dlg.dispose() - toto jsem zkusil přidat, ale to nepomohlo
cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")
Rem přepnití se na list zásoby
dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = "Zasoby"
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())
..
..
End Sub
Sub ImportCSVPrepisList(ByVal cUrl as string, ByVal sList as string)
Dim oDoc
oDoc = ThisComponent
cFO = "59,,0,1,,1033,false,true"
'cFO = "59,[1. posice separátor] nyní středník (59), ale nejčastěji 44 (obyčejná čárka)
'cFO = "59,,[2. pozice oddělovač textu] nyní prázdný, ale často uvozovky jednoduché (39), nebo dvojité (147)
'Viz odkaz dole. Když to nebude fungovat musíte laborovat, ale myslím že to bude chodit bez úprav
cFN = "Text - txt - csv (StarCalc)"
Mysh = ThisComponent.getSheets()
if not Mysh.hasByName(sList) then Mysh.InsertNewByName(sList, 0)
sh = Mysh.getByName(sList)
sh.link(cUrl, sList, cFN, cFO, com.sun.star.sheet.SheetLinkMode.VALUE)
End Sub
Ale nevloží se aktivní čož jsem sice myslel že není potřeby vždyť ho mohu kdykoli vybrat jenže to nejde v calcu s ním normálně mohu pracovat list tam skutečně je ale makro ho prostě nevybere a to ani když vyskočím uplne z formuláře a použiji jiné makro.
Zkusil jsem použít i
oList = thisComponent.sheets.getByName("Zasoby")
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, oList())
ale to hodilo chybu BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IllegalArgumentException
Message: cannot coerce argument type during corereflection call:
arg no.: 4 expected: "[]com.sun.star.beans.PropertyValue" actual: "void"
Někde sem musel udělat chybu, ale netuším kde.
Předem díky za pomoc.
Max
Max
]]>Ty nespecifikované podmínky co mě postupně napadli jsou jen díky tomu, že puvodní postupné vkládání se vždy zeptalo a mě by nenapadlo že by to šlo taaak jednoduše takže pak postupně přidávám vždy to tvořím za běhu a dodělávám postupně nové a nové věci
Formulář je vytvořen tak že jakmile zaškrtunu Dobrovský tak se zobrazí volba jestli chci importovat soubor nebo to chci vložit ze schránky bohužel tento dodavatel neustále mění výslený soubor buď si ho musím zkopírovat či si ho tvořím na 2x a to pak z toho vznikne soubor. Bohužel na začlenění jak se to kurna jmenuje feedu který dokáže komunikovat s inshopem a tím aktualizovat online sklady nemáme navíc to samé zboží odebíráme od vícero dodavatelů a každý dodavatel vychrlí jiný soubor s eaný které nemá ty se porovnají s tím co jsme vyexportovali z pohody a výsledek je ty které již nemají odbyt to je jedninný (tedy alespoň jediný co nás napad) způsob jak jednoduše aktualizovat naše sklady.
https://uloz.to/!lpC5ICGn9DcK/formular-png
Díky Max
]]>... Sic neumím udělat podmínku že když neexistuje tak ho nevkládej a hodnotu celkem_pocet_dodavatelu poniž o jeden, ale jsem to schopen nacpat do makra až po vložení listu těžkopádné ale jistě to půjde
Toto je jeden celkem malý detail který lze řešit celkem snadno. Jsou to ale odkazy které umí sice vytvořit list, ale pokud neexistuje zdroj, tak list neumí smazat. Je to dáno tím, že původní zadání bylo takto dáno - 4 soubory CSV = 4 listy.
Ta druhá část upřesnění také není velký problém, ale už to není tak jednoznačné explicitní zadání. Běžně umím makrem otevřít zadaný adresář a postupně otevřít všechny soubory s definovanou příponou - tedy ve Vašem případě ".csv".
Otevření znamená v tomto případě buď načtení odkazu (a nezobrazování původního čteného zdroje), nebo otevření do fokusu (přímé otevření dokumentu), a nebo jen skryté otevření a načtení celého, nebo části obsahu do některého typu dialogu. Tím je myšleno například snadné načtené části, celého obsahu, nebo jen názvu pokud podle názvu rozpoznáte oč jde. Pod pojmem dialog si musíme představit například okno MsgBoxu (který může mít 2, nebo 3 tlačítka kterými se rozhodne zda vložit či nikoliv), nebo InputBoxu (kterým by se ihned zadalo jméno listu - to by se muselo udělat u MsgBoxu jiným stylem, nebo InputBoxem). Ovšem obvyklejší je klasickým dialogem který může obsahovat například zaškrtávací tlačítka, nebo jiné ovládací prvky. Totéž lze udělat bez dialogu přímo do prvního listu, s tím že se tam vygenerují existující soubory podle názvu, nebo i s úryvkem, popřípadě s výsledkem hledání (například všechny soubory obsahující určitou položku ap.). Vedle mohou být zaškrtávací tlačítka, ale stačí tam jen například něco napsat, a nebo se jen postavit na příslušný řádek a stisknout klávesovou zkratku, a podobně.
Zde je zakopaný pověstný pes. Musel bych se vyptávat na detaily typu "poznáte podle názvu zda chcete soubor načíst (nakopírovat)"?, "nebo potřebujete vidět náhled"?, "chcete nabídku postupně po jednom, nebo raději hned celý soupis existujících zdrojů"?, "Víte jak pojmenovat list v sešitě pro každý různý zdroj", "mají se původní listy zdrojů smazat a začít na zelené louce"?, není na místě místo otevírání mnoha zdrojů udělat předem těžbu podle seznamu - a zdroje bez nalezených obsahů smazat (nebo opak - profylaxe chtěných zdrojů do sešitu => každý den nový sešit)"?
a poté chci vytvořit (mimochodem myslel jsem si, že v LibreOffice jde vytvořit okno formuláře takové jako se v Excelu dělá ve VBA, ale nenašel jsem to) formulář zatím je jen v sešitě, kde mu zatržítkama vyberu které dodavatele chci vložit. Tuto podmínku jsme tuším schopen vložit. Byť jistě mnohem krkolomněji než profík
Takže návrhům se nebráním.
Okno podle Vašich představ nejspíš vytvořit lze, ale já nemám představu co tím myslíte. Excel nemám a neznám - pro mne je to téměř sprosté slovo :-) Takže když postnete ukázku jako obrázek pochopím co se dá použít. Já celkem nemám problém vyřešit naznačenou potřebu mnoha různými způsoby, ale u Vás si nedovolím nic doporučovat pokud to není explicitně definované.
Mám dokonce i několik hotových systémů pro eshopy, které jsem ale nedotáhl - tazatelé rezignovali na úplný systém. Spokojili se většinou jen s tím čemu rozuměli a zájem opadl hned jak dostali to čemu rozuměli přestože to byla vývojová verze. Jen pro představu : Nyní pracuji na projektu který vyhledává odborné termíny v řádově 150-ti uložených zdrojích .docx, .odt a internetové zdroje. Systém vrací většinou celou větu, nebo odstavec do dialogu aby lektor dovedl rozhodnout zda zdroj citovat a extrahovat pasáž (nebo je v dialogu klikačka na zdroj www). To je ale mnohdy útrpná dřina. Heslo se musí vytěžit zcela (nelze přerušit a navázat na rozdělanou rešerši). Je to pro edukativní účely a já těm odborným výrazům nerozumím. Nemohu to zjednodušit a když udělám report do výstupu Writeru tak to má někdy mnoho stran – tento postup je kontraproduktivní. Nejlepší je rychlá prohlížečka která umožňuje pokud možno co nejsnadnější informaci podle které se lektor rozhodne a například rešerši ihned ukončí.
Proč to píšu - jakmile se dělá rešerše z různých zdrojů tak bývá nutné nejprve zdroje vyselektovat a z nich následně těžit. Tedy dvojstupňové vybírání. To už jsou skutečně profesionální a často komerční postupy kde už lze jen těžko hovořit o tom, že by se uživatel chtěl naučit programovat. Jde spíš jen o výsledek, ale nikoliv o cestu jak se k tomu dopracovat.
Tím narážím na příspěvek pana Trnky který správně usoudil, že vše potřebné se dá najít v seriálu Dana Sedláčka - i když zřejmě jen v jediné variantě která nemusí tak úplně vyhovovat, ale seriál i když dle mne není dokončený je dost komplexní na to, aby si člověk poradil v mnoha různých případech. Doplním jen, že nejde jen o seriál Dana Sedláčka.
Takže abych to nějak uzavřel. Já to vidím jako potřebu šablony která by se jako nový soubor uložila do složky zdroje, automaticky načetla všechny existující soubory „.csv". Následně by podle seznamu výrazů v prvním listu buď načetla celý list pokud některý výraz obsahuje, nebo by citoval zdroj a vedle udělal výpis položky (řádku CSV).
Nic mi do toho není ale chápu, že jde nejspíš o výpisy z eshopů, nebo o odpovědi z poptávek (v rámci rozpočtování), a nebo podobně výpisy z pokladního systému (více pokladen, nebo prodejen). V těchto nebo podobných případech bývá potřeba archivovat vývoj v čase, nebo porovnávat výhodnost kde nakoupit aj. Například se dá zpětně snadno dohledat jak se pohybovaly ceny, nebo zda dochází zboží na skladu a podobně. Takže systém práce odpovídá postupu > Vytvořit složku s názvem dne, nebo akce > do ní nakopírovat zdroje > uložit do této složky šablonu (ta se pojmenuje automaticky nejlépe podle složky + uloží také tam). Šablona se může jediným kliknutím spustit, vyhodnotit a poslat report například do Calcu který sleduje centrálně určitý okruh. Může to být propojení na Base pomocí registrovaného sešitu a podobně.
Šablona celkem nic moc nepotřebuje protože si sama načte URL. Pouze se zadají vyhledávané výrazy. Je ale nutné zadat jak se mají zdroje vyhodnotit a jak seřadit po zpracování. To se obstará makrem které je možné upravovat na rozdíl od konstantních procesů načtení a spuštění které budou uzamčené.
Tak změna plánu otestujte tohle :
Něco se pokazilo v plánu takže jsem při čekání testoval ale nejspíš se plán jen posouvá tak raději posílám první pokus. U mne to funguje. Udělal jsem jen volací makro a bez úprav mi to chodí.Ještě detail. Jsou to odkazy. Podívejte se na volbu ÚPRAVY > ODKAZY NA EXTERNÍ SOUBORY. Takže odkazy lze rozpojit, ale když tam budou nové soubory se stejným jménem tak je vše v pohodě. Můžete také opakovat propojení.
Mnohokráte děkuji, problém je vyřešen. Koukal jsem již dřív a zkoušel a funguje to bez chyby jen sem minule nějak přehlédl ty odkazy a tak jsem dnes pátral a nevypátral v úpravách calcu jsou pouze šedivě odkazy a v makrech nic podobného a sic sem projel narychlo i ostatní nabídky nic jsem nenašel. Mimochodem se mi líbí že makro nehodí chybu když ten sešit nenajde prostě vloží list s textem bla bla něco... Sic neumím udělat podmínku že když neexistuje tak ho nevkládej a hodnotu celkem_pocet_dodavatelu poniž o jeden, ale jsem to schopen nacpat do makra až po vložení listu těžkopádné ale jistě to půjde a poté chci vytvořit (mimochodem myslel jsem si, že v libreoffice jde vytvořit okno formuláře takové jako se v Ecelu dělá ve VBA, ale nenašel jsem to) formulář zatím je jen v sešitě, kde mu zatržítkama vyberu které dodavatele chci vložit. Tuto podmínku jsme tuším schopen vložit. Byť jistě mnohem krkolomněji než profík
Takže návrhům se nebráním.
Prozatím všem děkuji za odpovědi.
Max
]]>oblast_zdroj = list1.getCellRangeByName("A1:C5").getDataArray ' načteme data
list2.getCellRangeByName("A10:C15").setDataArray(oblast_zdroj) ' vložíme data
(opět odkaz na Sedláčka: https://www.openoffice.cz/doplnky/kopirovani-dat
Sub Ctu_4_Sesity
Dim cUrl1, cUrl2, cUrl3, cUrl4 as string
cUrl1 = "C:\Users\neutr\Desktop\UJEP\Podklady\DLP20180927\dlp_cesty.csv"
cUrl2 = "C:\Users\neutr\Desktop\UJEP\Podklady\DLP20180927\dlp_doping.csv"
cUrl3 = "C:\Users\neutr\Desktop\UJEP\Podklady\DLP20180927\dlp_indikacniskupiny.csv"
cUrl4 = "C:\Users\neutr\Desktop\UJEP\Podklady\DLP20180927\dlp_jednotky.csv"
'URL nejlépe zjistíte z Hyperlinku odkud vyberete soubor a zkopírujete ho do makra
For i = 1 To 4
Select Case i
Case 1
ImportCSVPrepisList(cUrl1 , "List1")
Case 2
ImportCSVPrepisList(cUrl2 , "List2")
Case 3
ImportCSVPrepisList(cUrl3 , "List3")
Case 4
ImportCSVPrepisList(cUrl4 , "List4")
End Select
next i
End sub
Sub ImportCSVPrepisList(ByVal cUrl as string, ByVal sList as string)
Dim oDoc
oDoc = ThisComponent
cFO = "59,,0,1,,1033,false,true"
'cFO = "59,[1. posice separátor] nyní středník (59), ale nejčastěji 44 (obyčejná čárka)
'cFO = "59,,[2. pozice oddělovač textu] nyní prázdný, ale často uvozovky jednoduché (39), nebo dvojité (147)
'Viz odkaz dole. Když to nebude fungovat musíte laborovat, ale myslím že to bude chodit bez úprav
cFN = "Text - txt - csv (StarCalc)"
Mysh = ThisComponent.getSheets()
if not Mysh.hasByName(sList) then Mysh.InsertNewByName(sList, 0)
sh = Mysh.getByName(sList)
sh.link(cUrl, sList, cFN, cFO, com.sun.star.sheet.SheetLinkMode.VALUE)
'___________________________________________________________________
' - Filtry Exp/Imp https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
'___________________________________________________________________
' Některé filtry
'Unknown (systém) č. znakové sady = 0
'System default č. znakové sady = 9
'ISO-8859-2 (Central European) č. znakové sady = 13
'DOS/OS2-852 (Central European) č. znakové sady = 25
'Windows-1250/WinLatin 2 (Central European) č. znakové sady = 33
'Windows-1252/WinLatin 1 (Western) č. znakové sady = 1
'Unicode (UTF-7) č. znakové sady = 75
'Unicode (UTF-8) č. znakové sady = 76
'ISO-8859-10 (Central European) č. znakové sady = 77
'ISO-8859-13 (Central European) č. znakové sady = 78
'Unicode (Java's Modified UTF-8) č. znakové sady = 90
'___________________________________________________________________
' popis filtru z výše uvedeného zdroje
'1 – Separátor (číslo Char) př. 44 ap
'2 – Oddělovač textu (číslo Char) př. 34
'3 – Znaková sada (systém) = 0
'4 – první „line" - počet(pozice?) číslo ..1
'5 – pozice – formát (4sloupce) př. 1/5/2/1/3/1/4/1
' - 1 -datum YY/MM/DD = 5 (1/5)
' - 2 -Standard 1 (2/1)
' - 3 -Standard 1 (3/1)
' - 4 -Standard 1 (4/1)
'Příklad Filtru "44,34,0,1,1/5/2/1/3/1/4/1"
End Sub
Něco se pokazilo v plánu takže jsem při čekání testoval ale nejspíš se plán jen posouvá tak raději posílám první pokus. U mne to funguje. Udělal jsem jen volací makro a bez úprav mi to chodí.
Ještě detail. Jsou to odkazy. Podívejte se na volbu ÚPRAVY > ODKAZY NA EXTERNÍ SOUBORY. Takže odkazy lze rozpojit, ale když tam budou nové soubory se stejným jménem tak je vše v pohodě. Můžete také opakovat propojení.
]]>máte pravdu zbytečné otázky nemám moc rád, nicméně beru dotaz jako opodstatněný. Jedná se o sešit Zasoby.odt který vždy při spuštění makra tedy ve výchozím stavu bude obsahovat jeden list s názvem vysledek a kde po dokončení makra bude po dohromady 6 listu. Makru je úplně jedno jestli se vložený list vloží před nebo za. Taktéž je mu jedno jaký bude mít název následně po vložení list přejmenuje (pokud by to však šlo parametrem odpadlo by alespoň pár řádků kódu). Nejprve vloží jeden list přejmenuje na Zasoby a poté s ním provede pár úprav a sešit uloží jako csv (samozřejmě po otevření právě uloženého csv bude mít už jen jeden list původně aktivní, ale vzhledem k tomu že sešit nezavírám má v současné chvíli 2 listy) dále provede další úpravy a uloží opět jako jiné csv. Tyto 2 soubory proženu externími aplikacemi a ty mi vychrlí prozatím 4 sešity csv. Ty já opět jeden po druhém importují do stále otevřeného sešitu s původním názvem Zasoby.odt. Tim musím provést nejmenně 16 kliknutí aby operace byla zdárně dokončena. Pokaždé právě vložený list přejmenuje na požadovaný název.
Poté všechny právě vložené listy porovná a zapíše do prvotně importovaného listu Zasoby pomocí příkazu Countif kde každý ze 4 listu má vlastní sloupeček výsledek je buď 1(nelze objednat) nebo 0(lze objednat) tyto hodnoty se pak po řádcích sečtou seřadí vyberou se pouze ty hodnoty co mají výsledek 4 opět countif a překopírují do listu vysledek přidají ještě nějaké doplňující informace a tento aktivní list se uloží jako dbf.
Ty 4 sešity budou vždy na stejném místě se stejným názvem starý bude vždy přepsán.
Pokud jde nějak skrytě otevřít všechny 4 sešity a poté jednotlivě rozkopírovat to mi nevadí prostě aby to vyžadovalo co nejméně uživatelského přístupu. Soubor vlastně porovnává zboží, které lze ještě objednat či nikoli u jednoho ze 4 dodavatelů tedy výsledek 4 znamená, že nejde objednat ani u jednoho a tedy zboží již nemá odbyt.
Řekněme, že sešity od dodavatelů mají názvy dodavatel1, dodavatel 2,.... a listy po přejmenování v1, v2,... .
Jinak jsem právě zkoušel to udělat to formou těch parametrů nicméně vlastně to byla jen kosmetická náhražka neboť stejně sem soubor musel vybrat a stejně sem mu musel zvolit kódování dohromady opět 4 kliknutí . Všechny mají kódování windows 1250 latin 2.
]]>sub NactiExterni 'Otevře vše stejně jako volba VLOŽIT LIST ZE SOUBORU
'Pozor při otevření CSV na určení správného filtru (nejčastější chyba)
'Po výběru souboru se dialog zeptá kam vložit nový list - před nebo za aktuální list
'při tom může nastat problém - list se stejným jménem nesmí existovat. Proto
'bývá nutné buď původní sešit smazat, nebo přejmenovat.
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:InsertSheetFromFile", "", 0, Array())
end sub
Je to samozřejmě totéž co uvádíte, jen je to úplný zápis makra.
Bylo by to možné udělat lépe - vše na jedno kliknutí ale pak bych musel vědět jestli už podobný sešit neexistuje, nebo kopírovat například pro přidávání zápisů. Nyní jde o načtení celého nového listu, ale dialogem který je shodný s manuální volbou - (možná o 1 kliknutí méně).
Problém úplného řešení makrem je právě v tom že se musí vědět zda bude nový list přepisovat existující list. Samozřejmě konstantní adresy jsou v tomto dialogu problém, ale dialog si pamatuje poslední otevíranou složku, takže pokud v ní máte všechny soubory k aktualizaci je to v pohodě - vybíráte jen název. Dialog lze rozebrat tak aby najel hned, nebo použít importní filtr - umí to jiný typ makra.
Nerad bych se dostal do situace kdy dostanu vynadáno, že se stále vyptávám na nesmyslné detaily, proto uvedu že technicky správnou cestou je deklarování proměnných místo :
dispatcher.executeDispatch(document, ".uno:InsertSheetFromFile", "", 0, Array())
například array s názvem Args(číslo - počet argumentů)
dim args(2) as new com.sun.star.beans.PropertyValue
args(0).Name = "URL"
args(0).Value = "file:///C:/.......csv"
args(1).Name = "FilterName"
args(1).Value = "Text - txt - csv (StarCalc)"
args(2).Name = "FilterOptions"
args(2).Value = "44,34,33,1,,0,false,true,true,false" 'číslo 44 reprezentuje základní separátor jako CHAR(44) .. nastavení se musí doladit podle reálných potřeb.
dispatcher.executeDispatch(document, ".uno:InsertSheetFromFile", "", 0, args())
Tohle ale není odladěné - argumenty patří k příkazu "SaveAs". Zde by byly na místě asi ještě další nejméně 1 argument - vložit před, za a podobně. Ale doporučuji spíš zadat do Google hledání .uno:InsertSheetFromFile a vyskočí hodně řešení i když v anglině a ne vše je přesně to správné ořechové.
Osobně bych asi při častém opakování takové práce přepisoval data ze skrytých souborů - otevřených skrytě pod výše uvedeným filtrem jen by tam bylo Open a ještě parametry Hidden. Pak už jen rychlé načtení obsahu a vložení do listu - ten se už nemusí mazat - stačí přepisovat obsah a hlavně by to bylo pod cyklem který by iteroval adresář aktualizací.
]]>prosím o radu mám sešit do něhož chci vložit list csv ze souboru.
prozatím k tomu používám tento příkaz
dispatcher.executeDispatch(document, ".uno:InsertSheetFromFile", "", 0, Array())
nicméně musím soubor vybrat a několikrát potvrdit.
Tento kód vzešel ze záznamu makra a víc v záznamu nebylo.
Protože takto vkládám postupně více listů je to dosti otravné.
Potřeboval bych jestli tento příkaz má nějaké parametry, kterými bych případně obešel neustále dotazovaní který soubor chci otevřít a jaké kodování má použít bla bla bla.....
Pokaždé to budou ty samé soubory na stejném místě taktéž stejně kódované.
Existuje nějaký způsob jak vkládat soubor do listu sešitu bezobslužně?
Předem děkuji za reakce
Max
]]>