打开Office(Calc)电子表格到XML

时间:2016-12-07 16:10:33

标签: python xml spreadsheet openoffice.org

我正在寻找一种将电子表格文件(开放式办公室)转换为与LabVIEW集群相对应的XML格式的自动方法,并将其作为XML文件导入。

我被建议使用Python将电子表格转换为XML,但是我使用Python的经验非常有限。我尝试在线查找示例,但大多数是针对XML到电子表格而不是相反的方式。

有没有人就如何将电子表格中的值自动转换为设置的XML格式提出任何建议?

非常感谢任何帮助!

所需的XML格式如下:

<LVData><Version>16.0</Version>
<Cluster><Name>CVT File Data</Name>
<NumElts>2</NumElts>
<Array>
<Name>Tags</Name>
<Dimsize>3</Dimsize>
<Cluster>
<Name>Tag</Name>
<NumElts>4</NumElts>
<EW><Name>Data Type</Name>
<Choice>Double</Choice>
<Choice>Single</Choice>
<Choice>I64</Choice>
<Choice>I32</Choice>
<Choice>I16</Choice>
<Choice>I8</Choice>
<Choice>U64</Choice>
<Choice>U32</Choice>
<Choice>U16</Choice>
<Choice>U8</Choice>
<Choice>String</Choice>
<Choice>Boolean</Choice>
<Choice>Array of U8</Choice>    
<Choice>Array of U16</Choice>
<Choice>Array of U32</Choice>
<Choice>Array of U64</Choice>
<Choice>Array of I64</Choice>
<Choice>Array of I32</Choice>
<Choice>Array of I16</Choice>
<Choice>Array of I8</Choice>
<Choice>Array of Double</Choice>
<Choice>Array of Single</Choice>
<Choice>Array of Boolean</Choice>
<Choice>Array of String</Choice>
<Val>11</Val></EW>
<String>
<Name>Name</Name>
<Val>91Q0-st-CL</Val>
</String>
<String>
<Name>Value</Name>
<Val>T</Val>
</String>
<String>
<Name>Description</Name>
<Val>Status Close</Val>
</String>
</Cluster>
<Cluster>
<Name>Tag</Name>
<NumElts>4</NumElts>
<EW><Name>Data Type</Name>
<Choice>Double</Choice>
</EW>
<String>
<Name>Name</Name>
<Val>91F2-PAE-I</Val>
</String>
<String>
<Name>Value</Name>
<Val>T</Val>
</String>
<String>
<Name>Description</Name>
<Val>Pulse active energy import</Val>
</String>
</Cluster>
<Cluster>
<Name>Tag</Name>
<NumElts>4</NumElts>
<EW><Name>Data Type</Name>
<Choice>Double</Choice>
</EW>
<String>
<Name>Name</Name>
<Val>91F2-PAE-E</Val>
</String>
<String>
<Name>Value</Name>
<Val>T</Val>
</String>
<String>
<Name>Description</Name>
<Val>Pulse active energy export</Val>
</String>
</Cluster>
</Array>
<Array>
<Name>Group Listings</Name>
<Dimsize>1</Dimsize>
<Cluster>
<Name>Tag Grouping</Name>
<NumElts>2</NumElts>
<String>
<Name>Group</Name>
<Val>Active energy</Val>
</String>
<Array>
<Name>Tag Names</Name>
<Dimsize>2</Dimsize>
<String>
<Name>Names</Name>
<Val>91F2-PAE-I</Val>
</String>
<String><Name>Names</Name>
<Val>91F2-PAE-E</Val>
</String>
</Array>
</Cluster>
</Array>
</Cluster>
</LVData>

1 个答案:

答案 0 :(得分:0)

至于从LibreOffice Calc文档中读取数据,我对Ezodf有好运(https://pythonhosted.org/ezodf/

偶尔导致令人困惑的doc的一个怪癖:曾经被称为Sheet的东西现在被称为Table(clasnames)。两者都是指工作表。

一些代码段:打开电子表格(FILE =“path / somefile.ods”)并迭代SHEETS指定的工作表的子集:

doc=ezodf.opendoc(FILE)
sheets = doc.sheets
sheetnames = list( sheets.names() )
for name in SHEETS: 
    print( "Starting sheet '{}'".format( name ))
    do_sheet( sheets[name] )

def do_sheet( sheet ):
    ...

访问工作表中的单元格可以是"A1" or "AB352"电子表格符号,也可以是(row,col)从零开始的整数2元组。所以“A4”和(3,0)是访问同一个单元格的方法。

单元格是一个包含两个组件的对象:valuevalue_type。典型代码类似于

cell = sheet[ (row,col) ]
t,v = cell.value_type, cell.value
if t is None:
    # the cell is empty, convert to empty string
    thing = ''
elif t == "string":
    thing = v
elif t == "float":
    # this is an all-digits product code which got stored as a number
    thing = str( int( v))

你必须警惕那些与你期望的类型不同的用户数据:1O4不是一百零四,它是一个三个字符的字符串,中间有一个字母O!

还有其他value_type比无,“字符串”和“浮点数”。脑海中浮现出“约会”。有关他和ezodf对象的各种其他方法的更多详细信息,请参阅doc。