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
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: 3 years, 4 months 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.