A : Použít filtr který to zformátuje správně.
B : Použít místo ocellP21.value ocellP21.string
Předpoklad je že v sešitě bude tečka a nikoliv čárka - to se dá upravit makrem při vlastním zápisu. Jde to i manuálně po jedné buňce to je ale zcestné.
C : Výsledný soubor na konci nebo jednotlivý řádek před zápisem projet cyklem a změnit čárku na tečku.
Správně by to měla být metoda A, nebo B. Pro Calc je totiž číslo s tečkou skutečně stringem který by měl být také ve formátu sešitu - ale nemusíme to v sešitě extra formátovat.
Je však pravděpodobné že vycházíte z výpočtu který nutně (poznámka) potřebuje čárku. Lze to celé naráz naformátovat pomocí formátu buňky > čísla > text (@). Následně udělat záměnu čárky za tečku.
(POZNÁNKA : - Lze navolit pro všechny sešity Calc americké formátování - tedy tečka se čte jako u nás čárka. To je ale většinou nepraktické a nehodí se to vždy.)
Z těchto důvodů (nepoužíváte konverzi na UTF-8, nepoužíváte USA formátování čísel a úprava na string je zbytečně pracná) je potřebné použít metodu C. Ovšem metoda přepisu vyžaduje jinak koncipovat makro. Například cyklem nejprve extrahovat sloupec stringů a dodatečně ho projet cyklem přepisu, nebo přepis čárky udělat cyklem před načtením řádku.
ocellP21 = sheet.getCellByPosition( 1 , 7 ) 'koncova X
print #n ocellP21.value
když je v buňce desetinné místo, tak mi to exportuje s desetinnou čárkou. Potřeboval bych tečku. Ikdyž změním formát buněk, tak to nepomůže.
Je nějaký příkaz, který změní desetinný oddělovač při exportu makrem?
Děkuji
Je celkem nejsnadnější vytvořit obsahy tagů v sešitě pro celý obrobek a jednoduchým cyklem načíst do text souboru s tagy. To pak uložit pod libovolnou koncovku buď s konverzí na znakovou sadu, nebo bez.
Já jsem se úzce držel xml ale mohlo by to být také html. Předpokládám, že vzorové makra chcete vytvořit pro jednotlivé operace a ty pak manuálně spojit do celku který popíše celý postup na obrobku. Právě tohle se dá zautomatizovat nejlépe přípravou v sešitě (nejen zadáním jednotlivých parametrů). Sešit má 1,048 milionů řádků které lze použít tak aby každý tag měl svůj řádek a nakonec makram spojit do podoby značkového jazyka (xml, html, uml).
Dokonce si myslím, že by to šlo udělat podle dříve použitých textových souborů. Je mi jasné, že zřejmě původní "programování" obsahovalo pouze instrukce pro PLC s malou sadů následných úkonů. To co se děje nyní je napojení modemu řídícího systému a obsluha už jen upíná obrobky a spouští celkový proces z terminálu.
Samozřejmě je to Vaše snaha a Vy si musíte promyslet co a jak udělat. Takže jen upozorním, že v tom mém makru je několik chybiček které jsem pustil dík časové tísni a není to vůbec odladěné. Správně by se nová makra měla buď ukládat, nebo mazat, měla by obsahovat odpovídající názvy modulů a maker respektive namespace pro xml a podobně.
Já osobně být zřejmě na Vašem místě bych se snažil o konverzi programu z autocadu, nebo v čem ji máte tak aby se načítal do komunikačního protokolu, nebo bych se pokusil pomocí OCR načíst scanovaný plán (často PDF), a vše převádět jako celek všech instrukcí. Jednotlivé operace by se mohly testovat buď samostatně na popisný soubor, nebo na grafický soubor který by šel porovnat s originálem. Tohle umožňuje programování v Draw. Ovšem už to chce nějaký čas a zřejmě specialistu.
trochu jsem studoval literaturu, delal par pokusu a narazil na problem (trochu off topic k tomuto tematu):
Sub EXPORT
Dim soubor as string
Dim fileno as integer
Dim radek1 as object
Doc = ThisComponent
Sheet = Doc. Sheets ( 1 )
radek1 = sheet.getCellByPosition( 2 , 1 ) 'radek 2
soubor = "D:\pokus.txt"
fileno = freefile
Open soubor for output As #fileno
write #fileno radek1.string()
close #fileno
End Sub
vystupem je zapsani obsahu bunky do souboru, akorat mi to porad pise do uvozovek. Kdyz je v bunce napsano AHOJ, v souboru mam "AHOJ" ... daji se nejak uvozovky odstranit? Potreboval bych cisty text.
Dekuji
Ukládá "cnx" do stejného adresáře jako je sešit. Musíte vykoumat kam připsat potřebné řádky. Vše se píše do makra Generuj_Makro_XML. Dalších kódů si nevšímejte - jeden načítá adresu a druhý pole ze sešitu.
Bohu žel pochybuji že je to správně koncipováno. Podívejte se na výstup CNX a uvidíte že by to mělo být jinak. Já bych se k tomu dostal až nejdříve v pátek večer, nebo sobotu ráno.
PS: Zapoměl jsem připsat, že to makro generuje jiné makro do nového modulu "Generovaný", ale hned ho také spustí. Z toho vyplývá že pokud to uložíte, zůstane tam ten modul Generovaný a podruhé by měla vyskočit chyba. Cestou je smazat ten modul.
Když to neuložíte můžete vgenerovat vždy znovu a nic mazat nemusíte. Takže přepište parametry do sešitu, uložte sešit, následně spusťte makro a hned potom sešit zavřete - bez uložení! Samozřejmě soubor "cnx" zůstane.
malá ukázka vzoru:
- <block isConverted="true" isValid="true">
<key number="40" isActive="true" />
- <gList>
- <cncFunction number="">
<cncParameter name="axisX" value="0.000" />
<cncParameter name="axisY" value="0.000" />
</cncFunction>
</gList>
</block>
- <block isConverted="true" isValid="true">
<key number="50" isActive="true" />
- <mList>
- <cncFunction number="45">
<cncParameter name="tankHeight" value="230.000" />
</cncFunction>
</mList>
.....
....
...
- <gList>
- <cncFunction number="1">
<cncParameter name="axisX" value="286.000" />
<cncParameter name="axisY" value="89.000" />
<cncParameter name="axisZ" value="128.000" />
<cncParameter name="axisC" value="30.000" />
</cncFunction>
</gList>
....
....
....
Mám tedy tabulku, kde jsou parametry procesu. např. výška hladiny - formát: číslo.
v řádku:
<cncParameter name="tankHeight" value="230.000" />
bych tedy vše bral jako text, pouze hodnotu 230 bych bral z buňky...
dále v tabulce jsou souřadnice X-Y-Z-C.
- <cncFunction number="1">
<cncParameter name="axisX" value="286.000" />
<cncParameter name="axisY" value="89.000" />
<cncParameter name="axisZ" value="128.000" />
<cncParameter name="axisC" value="30.000" />
tady bych to vyplňoval smyčkou (to už jsem si stihl najít, takže syntax bych snad dal dohromady)
jestli se vyjádřím správně, tak by se jednotlivé řádky daly brát jako string prefix, real value (moje hodnota buňky), string suffix
a abych odpověděl: vždy se tedy jedná o pevně danou buňku resp. oblast buněk s číselným obsahem
string bych mohl například definovat v jiných buňkách jako text.
Jestli budete tak hodný a vytvořil mi makro, které uloží soubor s příponou ".ncx" do stejné složky, kde je zdrojový ".ods". Bude ukládat Buňku např. B6 ve formátu: prefix z F6 - hodnota z B6 - suffix z G6.
Snad už bych se pak chytil, dodělal smyčku a nakopíroval potřebné řádky, aby byl výsledek pro stroj čitelný.
Děkuji
]]>Sub Export_XML
Dim oleService, oXMLexp as Object, oXMLimp as Object
Dim oRoot, oNode as Object
Dim HOME as String
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")
HOME = "C:\Documents and Settings\" 'Sem přesnou adresu - třeba jméno\Plocha\
oXMLexp = oleService.createInstance("Msxml.DOMDocument")
With oXMLexp 'Export
.async = False
.validateOnParse = False
.resolveExternals = False
oRoot = .createElement("Root")
.appendChild(oRoot)
oNode = .createElement("ElementA")
oNode.Text = "Text Elementu A"
oRoot.appendChild(oNode)
'MsgBox oNode.xml
oNode = .createElement("ElementB")
oNode.Text = "Text Elementu B"
oRoot.appendChild(oNode)
MsgBox .xml ' Tohle je jen pro kontrolu - klidně to smažte
.Save(HOME & "\MujTest_1.xml") 'název xml dokumentu
End With
End Sub
Ovšem to jen ukázka uložení obsahu. Je nutné tam uvést kódování a další věci. zejména názvy uzlů kterým stroj rozumí. Mimo toho si musíte uvědomit, že udělat makro s měnitelným obsahem obnáší mnohem více. Lze například místo psaní "Node" načíst obsah ze sešitu a uložit jako XML. To lze udělat několika způsoby.
Když se nebude export řešit načtením přesné předlohy ze sešitu - píše se makro jiným makrem a to se následně hned spustí a tak se xml uloží.
Výstupní XML je program pro obráběcí stroj. Pokud se dá vytvořit xml pomocí makra, kde si vyberu oblast buněk, kde jsou proměnné a dále bude v makru "natvrdo" napsán text, pak je to přesně to, co potřebuji. Mohu poprosit o nějaký makro mustr?
Program pro obráběcí stroj bych řešil jinak, než datazy na fórech. Poslední zpráva naznačuje, že ani v programování se moc neorientujete. Sežeňte si raději specialistu.
]]>Nejčastěji se používá export do CSV, ale také se makrem vytváří xml soubory. Jde tam jenom o strukturu a názvy uzlů (node) respektive parametry. XML se exportuje bez filtru často pokud se posílá někam na síť a mám dojem že by Vám mohlo jít spíš o takový export nežli o vytváření dokumentů externího formátu (pomocí filtru).
Pokud se nebojíte maker pošlu Vám vzor nebo i volně strukturovaný xml výstup - ten si pak musíte předělat podle potřeby.
Když se exportuje pomocí filtru tak celý export musí být na samostatném listu (alespoň nevím o tom že by šlo exportovat jen část obsahu podobně jako dde). Tato úprava by se musela udělat uživatelsky - což není problém. Potom se aplikuje export pomocí filtru. Tedy žádné programování mimo filtru. Pro malé věci je ale určitě lepší makro. To znamená umět alespoň trošku programovat.