Szybki sposób na konwersję arkusza Excel do XML

3

Jak łatwo przekonwertować plik Excel na plik XML?

Próbując zapisać jako plik XML, skarży się, że plik nie ma odwzorowania XML. Kliknięcie pomocy wywołuje dość skomplikowane rzeczy na temat pliku mapowania XML, XLD i kilku innych akronimów. Dlaczego to takie skomplikowane?

Ostatnio zdałem sobie sprawę, że tabulator rozdzielony, CSV i inne są podatne na problemy z formatowaniem (przecinki w polu, nowe linie, cytaty, ...). Myślę więc, że XML jest lepszym sposobem na przetwarzanie danych w Excelu.

Proszę doradź. Może narzędzie do autostrady?

nute
źródło
Ograniczone tabulatorami unika się przecinków w polach, ponieważ nie są one częścią separatora. Jeśli zapisujesz pliki CSV przy użyciu programu Excel i wykryje przecinki w niektórych polach, zawinie je w cudzysłowy, aby uniknąć niejednoznaczności, ale system, w który wprowadzasz dane, musi to zrozumieć i usunąć je.
AdamV

Odpowiedzi:

1

Oto staroświeckie odniesienie do ' XML::Excel ' Perl moduł .
Jest kolejne pytanie na temat Stackoverflow który pokazuje próbki do konwersji do CSV, które mogą dać Ci pomysły na używanie takich skryptów.

Istnieje również krótki artykuł IBM developerWorks na temat wskazówek dla Konwertuj dane Excela na XML co wskazuje na niektóre zasoby.

nik
źródło
Link do IBM developerWorks jest uszkodzony, niestety ... czy znasz zaktualizowany link?
Nathan Fellman
Pozwoliłem sobie naprawić link.
Nathan Fellman
1

tutaj jest kod perla do konwersji pliku CSV do pliku XML

use XML::CSV;
$csv_obj = XML::CSV->new();

 $csv_obj->parse_doc("customer.csv", {headings => 1});

 $csv_obj->print_xml("customer.xml");

więcej szczegółów można znaleźć w Konwertuj plik CSV do pliku XML w Perlu

sandeep
źródło
0

W programie Excel 2007 domyślnie arkusze kalkulacyjne są zapisywane w formacie skomplikowany format XML (xlsx), który następnie zostaje spakowany do jednego pliku. Jeśli chcesz zapisać w niestandardowym formacie XML, musisz zdefiniować schemat który określa sposób tworzenia danych. Nie ma opcji „zapisz do XML”.

heavyd
źródło
0

Jeśli chcesz otworzyć kartę programisty, oto niektóre kody VBA do generowania XML.

Wcześniej napisałem tę odpowiedź na podobne pytanie dotyczące SO, więc stamtąd jest kopiowane.

Może być nieco zaawansowany, jeśli nie jesteś przyzwyczajony do części programistycznej programu Excel, ale jeśli zrobisz to raz, możesz automatycznie wygenerować dokumenty xml z danych programu Excel za naciśnięciem jednego przycisku.

'*****************************************************************
'This is how the main structure of the XMl file is created in VBA
'Use this as guidance to create new XML files.
'*****************************************************************

Sub CreateXML()

Dim objDom As DOMDocument
Dim objRootElem As IXMLDOMElement
Dim objSubRootElem As IXMLDOMElement
Dim objMemberElem As IXMLDOMElement
Dim objSubMemberElem As IXMLDOMElement
Dim objMemberRel As IXMLDOMAttribute
Dim objMemberName As IXMLDOMElement

Set objDom = New DOMDocument    

' Creates root element
'Set objRootElem = objDom.createElement("r1")
'objDom.appendChild objRootElem

' Creates sub root element
'Set objSubRootElem = objDom.createElement("r2")
'objRootElem.appendChild objSubRootElem

' Creates Error Date & Time element
'Set objMemberElem = objDom.createElement("r3")
'objSubRootElem.appendChild objMemberElem

' Create element under Member element, and
' gives value "some guy"
'Set objMemberName = objDom.createElement("r3_Tag")
'objMemberElem.appendChild objMemberName
'objMemberName.Text = "value"

' Creates User Name element
'Set objMemberElem = objDom.createElement("r2_tag")
'objSubRootElem.appendChild objMemberElem
'objMemberElem.Text = "value"

' Creates Error Date & Time element
'Set objMemberElem = objDom.createElement("r3")
'objSubRootElem.appendChild objMemberElem

' Create element under Member element, and
' gives value "some guy"
'Set objMemberName = objDom.createElement("r3_Tag")
'objMemberElem.appendChild objMemberName
'objMemberName.Text = "value"

' Creates User Name element
'Set objMemberElem = objDom.createElement("r2_tag")
'objSubRootElem.appendChild objMemberElem
'objMemberElem.Text = "value"

„Aby uczynić to bardziej czytelnym dla ludzi, musimy dodać formatowanie, wcisnąć je i dodać powrót powozu przed jego dziećmi. Następnie rekurencyjnie sformatuj dzieci ze zwiększonym wcięciem.

Sub FormatXmlNode(ByVal node As IXMLDOMNode, ByVal indent As Integer)
    Dim child As IXMLDOMNode
    Dim text_only As Boolean

    ' Do nothing if this is a text node.
    If TypeOf node Is IXMLDOMText Then Exit Sub

    ' See if this node contains only text.
    text_only = True
    If node.HasChildNodes Then
        For Each child In node.ChildNodes
            If Not (TypeOf child Is IXMLDOMText) Then
                text_only = False
                Exit For
            End If
        Next child
    End If

    ' Process child nodes.
    If node.HasChildNodes Then

        ' Add a carriage return before the children.
        If Not text_only Then
            node.InsertBefore node.OwnerDocument.createTextNode(Chr(10)), node.FirstChild
        End If

        ' Format the children.
        For Each child In node.ChildNodes
            FormatXmlNode child, indent + 2
        Next child
    End If

    ' Format this element.
    If indent > 0 Then

        ' Indent before this element.
        node.ParentNode.InsertBefore node.OwnerDocument.createTextNode(Space$(indent)), node

        ' Indent after the last child node.
        If Not text_only Then node.appendChild node.OwnerDocument.createTextNode(Space$(indent))

        ' Add a carriage return after this node.
        If node.NextSibling Is Nothing Then
            node.ParentNode.appendChild node.OwnerDocument.createTextNode(Chr(10))
        Else
            node.ParentNode.InsertBefore node.OwnerDocument.createTextNode(Chr(10)), node.NextSibling
        End If
    End If
End Sub

„Zapisuje dane XML na dysku.

On Error Resume Next
MkDir ("C:\Users\" & Environ$("Username") & _
"\Desktop\FXML_FILES") 'Creates folder on desktop, ignores error if it already exists
On Error GoTo 0

objDom.Save ("C:\Users\" & Environ$("Username") & _
"\Desktop\XML_FILES\" & "filename.xml")
Jon Carlstedt
źródło