Telefonszámunk: 1-472-0679

[Resolved] XML-Excel export-import

Kezdőlap Fórumok Excel programozás [Resolved] XML-Excel export-import

Topic Resolution: Resolved

Ennek a témakörnek tartalma 13 hozzászólás, 2 résztvevő. Utolsó frissítés:  horvimi 2 hete telt el.

14 bejegyzés megtekintése - 1-14 / 14
  • Szerző
    Bejegyzés
  • #7783

    irbisz
    Felhasználó

    Sziasztok!

    Nem tudom a megfelelő témakört választottam-e, de egy xml fájl beolvasása és exportálása a problémám.
    Maga a feladat felettébb általános, ezért nem csatolok külön fájlt.
    Adva van egy program információs táblája, amit rendkívül körülményes kitölteni és rengeteg felesleges sort tartalmaz, ezért adja magát, hogy a szükséges értékeket excelben írjam be. A baj csak az, hogy az xml forrásának beolvasását követően, miután megfeleltem a szükséges cellákat (a 600-ból fontos 20 értékkel), nem tudom a teljes sémát exportálni, csupán a kitöltött értékeket, így a program sem képes visszaolvasni az xml-t. Van rá megoldásotok, hogyan lehetne a legegyszerűbben megoldani a feladatot, anélkül, hogy a teljes sémát meg kellene feleltetni?

    Előre is köszönöm a segítségeteket, Irbisz

    #7796

    horvimi
    Adminisztrátor

    Szia!

    Én most csak tippelek.
    Ha az a bizonyos program egy bizonyos sémát keres, akkor elég sanszos, hogy csak egy részét nem fogja elfogadni.
    Tehát azoknak is ott kell lenniük üres vagy ilyesmi értékkel.

    Szerintem.

    Különben most mit csinálsz? Programozol, vagy XML-t olvasol és próbálsz menteni Excellel?
    Az Excel natív XML kezelését, ami valahol a Táblázat szalagon van, ha jól emlékszem, nem ismerem, nem is próbáltam még…
    Próbából írtam már XML-t olvasó, illetve létrehozó VBA programot, van hozzá könyvtár, csak be kell pipálni a Referenciákban.

    Imre

    #7799

    irbisz
    Felhasználó

    Szia Imre!

    Igen pontosan a teljes sémát ki szeretném menteni excelből, függetlenül attól, hogy csak egy részét feleltettem meg és töltöttem ki.
    Egész egyszerűen a fejlesztőeszközök fülön a forrásnál betöltöttem a programból kimentett xml sémát, megfeleltettem a számomra fontos adatokat az excel egyes celláival, majd kitöltöttem, de az exportálásnál nem tudom megadni, hogy ne csak a kitöltött cellákat olvassa vissza, hanem azokkal együtt az egész sémát.
    Microsoft XML v6.0 -ra gondolsz? …nem gondoltam, hogy pár érték oda-vissza írásához ilyen nagy fába kell vágnom a fejszét 🙁
    PQuery nem lehet megoldás vagy akkor kezdjek neki VBA-ban?

    Irbisz

    #7800

    horvimi
    Adminisztrátor

    Fontos megjegyeznem, hogy ilyeneket nem csináltam még, ezért nem tudok hiteles tanácsot adni.
    PQ csak olvas és kibont XML fájlokat, majd ha már táblázat, akkor lehet átalakítani és betölteni Excel-be, visszafelé nem működik.

    Ha a Neten nem találsz megoldást, akkor le kell programozni.

    Ötlet: Mi van, ha a számosra nem lényeges celláknak is adsz valami tartalmat? Üres sztring, vagy szóköz vagy ilyesmi?
    Talán lehet tömegesen csinálni…

    #7849

    irbisz
    Felhasználó

    Szia Imre!

    Sajnos hiába próbálom tömegesen, kimentésnél nem tudom azt a struktúrát reprodukálni, amit a másik program beolvas.
    Az tűnik a legegyszerűbbnek, hogy egy makróval kicseréljem az xml-ben az adott értékeket.
    Erre van esetleg tipped, hogyan tudnám vagy merre fele keresgéljek?

    Köszönöm, Irbisz!

    #7850

    horvimi
    Adminisztrátor

    Szia!

    Nem tudom pontosan, hogy mit is akarsz, de az említett XML library-vel sokmindent lehet csinálni.

    Itt van egy elég jó példa:
    https://excel-macro.tutorialhorizon.com/vba-excel-update-xml-file/

    Imre

    #7851

    irbisz
    Felhasználó

    Szia!
    Pontosan ezt szeretném csak excel cellákban kitöltött feliratokra akarom kicserélni az xml egyes értékeit.
    Nem tudom, mit csinálok rosszul, de hiába pipálom be a tools/references -ben a Microsoft XML v6.0 -ot, akkor sem fut le a linken leírt makró (fnUpdateXMLByTags meghívásánál elakad).
    Irbisz

    #7852

    horvimi
    Adminisztrátor

    Ettől nem nagyon leszek okosabb, az csak a fv neve.
    Futtattad lépésenként?
    Konkrétan melyik soron akad el?
    Mi a hibaüzenet?

    #7853

    irbisz
    Felhasználó

    Biztosan kihagyok vagy elrontok valamit. Első körben, mielőtt a saját xml-nek nekiállok ki akartam próbálni, hogy működik-e a megadott kód, ezért letöltöttem a link által megadott minta xml-t (https://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx), majd egy üres excelben a vba tools/references-ben bekapcsoltam a Microsoft XML v6.0 -ot. Ezt követően a weboldalról bemásoltam a kódot és a csatolt kép alapján elakadt (az olvasás amúgy működik).

    Attachments:
    You must be logged in to view attached files.
    #7855

    horvimi
    Adminisztrátor

    Szia!

    Ha jól gondolom, akkor nem nagyon makróztál még…
    A kép alapján az a probléma, hogy a weboldalról bemásolt kódban nem minden karakter olyan, amilyennek a VBAS szerkestőben lennie kell ahhoz, hogy működjön.
    A piros sorok mindegyike valójában kód comment, azaz megjegyzés.
    A VBA-ban a megjegyzések felső aposztróffal kezdődnek, ami a magyar billentyűzeten a Shift-1-es-en van.
    A képen másfajta felső aposztrófot vélek felfedezni.
    Ugyanez szokott lenni a dupla idézőjelekel is.

    ???

    Imre

    #7857

    irbisz
    Felhasználó

    Szia Imre!
    Egyrészt rosszul gondolod, noha messze nem vagyok egy vba guru, de írtam már pár makrót, jó párat meg összeraktam (pl ez is egy hosszabb vba ellenőrző, fájl betöltő-átíró processzus lenne, aminek a többi része már jobbára megvan).
    Másrészt, ami a diagnózist illeti, miszerint hülye vagyok, ezúttal pontos.
    Mentségemre szolgáljon, hogy lopott perceimben próbálom ezt összehegeszteni, xml-lel még sosem volt dolgom és arra a meggyőződésemre fókuszáltam, hogy biztosan rossz xml libraryt töltök be, akkor sem kapcsolva, mikor a megjegyzésnél állt le a kód.
    Elnézést kérek érte 🙁
    Ezek után persze nehéz segítséget kérni, de ha mégis megteszed, nagyon megköszönöm, mert a CDATA értékeket sehogy sem sikerül megadnom, kicserélnem. Mellékeltem az xml fájlt és kb ez lenne a kód váza:

    Function fnUpdateXMLByTags()
    Dim mainWorkBook As Workbook
    Set mainWorkBook = ActiveWorkbook
    
    Set oXMLFile = CreateObject("Microsoft.XMLDOM")
    XMLFileName = "c:\Users\Irbisz\Downloads\Munka\Nevezéktan\out\projectinfo.xml"
    oXMLFile.Load (XMLFileName)
    
    Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/Fix1/value/CDATA")
    oAttribute.Text = mainWorkBook.Sheets("Munka1").Range("B" & 3).Value
    
    Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/Custom2/value/CDATA")
    oAttribute.Text = mainWorkBook.Sheets("Munka1").Range("B10").Value & " - " & mainWorkBook.Sheets("Munka1").Range("B11").Value
    
    oXMLFile.Save (XMLFileName)
    
    End Function

    Irbisz

    • A hozzászólás módosításra került: 2 hete, 2 napja telt el- irbisz.
    Attachments:
    You must be logged in to view attached files.
    #7860

    horvimi
    Adminisztrátor

    Bocsi a nyers feltélezésért…
    Ahogy az elején már írtam, nincs tapasztalatom XML feldolgozás területén. de tényleg semmilyen azon a valamikori rövid kísérleten kívül, amiben nem volt CDATA…
    Szóval bele kellene ásnom magam, de most erre nem lesz kapacitásom így az év vége felé…
    Itt egy link, ahol CDATA node-ot csinál valaki..
    https://stackoverflow.com/questions/12454211/how-to-create-cdata-tag-in-excel-vba
    Remélem sikerül megoldanod, (ez alapján vagy másképp) és visszajelzel a fórumba, hogy mi lett a megoldás!

    köszi,

    Imre

    #7861

    irbisz
    Felhasználó

    Szia Imre!
    Sehogy sem sikerült felülírnom a cdatat, az object browserben már mindent kipróbáltam, azonosítani a node-ot, stb..
    úgyhogy maradt a favágó megoldás, azaz kiürítettem a meglévő cdata értéket és a createCDATASection paranccsal létrehoztam egy újat.
    Végül ez lett a váz:

    Sub UpdateXML()
    
    Dim mainWorkBook As Workbook
    Set mainWorkBook = ActiveWorkbook
    
    Set oXMLFile = CreateObject("Microsoft.XMLDOM")
    XMLFileName = "útvonal\projectinfo.xml"
    oXMLFile.Load (XMLFileName)
    
    Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/FixKeys/Fix1/value")
    oAttribute.Text = ""
    
    Set ParentNode = oXMLFile.SelectSingleNode("/ProjectInfo/FixKeys/Fix1/value")
    Set childNode = oXMLFile.createElement("value")
    Set CData = oXMLFile.createCDATASection("value")
    CData.Data = mainWorkBook.Sheets("Munka1").Range("B2").Value & " - " & mainWorkBook.Sheets("Munka1").Range("B3").Value
    ParentNode.appendChild CData
    
    oXMLFile.Save (XMLFileName)
    
    End Sub

    A célnak megfelel, szépen végigfut, a forrásprogram is hibátlanul visszaolvassa, de azért nem biztos, hogy az ilyen megoldásokat kellene mutogatni 😀

    #7862

    horvimi
    Adminisztrátor

    Na látod!

    megérte!

    Különben néhány keresésre én csak olyan linkeket találtam, ahol létrehoznak CDATA részeket, illetve olvasnak.
    Szóval koránt sem biztos, hogy nem jó, illetve az egyetlen lehetséges a te megoldásod.
    Mondom ezt laikusként 🙂

    Köszönöm, hogy visszatetted az eredményt!

    Imre

14 bejegyzés megtekintése - 1-14 / 14

Be kell jelentkezni a hozzászóláshoz.