【问题标题】:How to import a table in XML format to excel file?如何将 XML 格式的表格导入 Excel 文件?
【发布时间】:2021-02-28 02:50:25
【问题描述】:

我在一个 XML 文件中有一堆表需要导入到 excel 文件中。我尝试使用电源查询直接导入表,但它不起作用。我需要将总共 25 个这样的表导入到我的 Excel 工作表中。我对 VBA 或 python 脚本的了解很少,因此我不知道如何进行。在这方面的任何帮助都会非常有帮助

以下是 XML 格式的表格示例。

    <TABLE VIEW="DETAILED"><TABLE-CAPTION ID="ID19862004604572"><LONG-NAME> 
                                <L-4 L="en">BORE_TUNE1</L-4></LONG-NAME></TABLE-CAPTION><TGROUP COLS="1"><COLSPEC COLNUM="1" COLNAME="col1" COLWIDTH="1.00*"/><COLSPEC COLNUM="2" COLNAME="col2" COLWIDTH="1.00*"/><TBODY>
<ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">X</E></L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">0.3</E></L-1> 
                                     </P></ENTRY></ROW><ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all">Value</L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all">0.5</L-1> 
                                     </P></ENTRY></ROW></TBODY></TGROUP> 
                        </TABLE>
                        <TABLE VIEW="DETAILED"><TABLE-CAPTION ID="ID19862004604573"><LONG-NAME> 
                                <L-4 L="en">BORE_TUNE2</L-4></LONG-NAME></TABLE-CAPTION><TGROUP COLS="2"><COLSPEC COLNUM="1" COLNAME="col1" COLWIDTH="1.00*"/><COLSPEC COLNUM="2" COLNAME="col2" COLWIDTH="1.00*"/><COLSPEC COLNUM="3" COLNAME="col3" COLWIDTH="1.00*"/><TBODY>
<ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">X</E></L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">0.3</E></L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col3">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">0.8</E></L-1> 
                                     </P></ENTRY></ROW><ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all">Value</L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all">0.5</L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col3">
                                     <P> 
                                        <L-1 L="for-all">0.5</L-1> 
                                     </P></ENTRY></ROW></TBODY></TGROUP> 
                        </TABLE>
                        <TABLE VIEW="DETAILED"><TABLE-CAPTION ID="ID19862004604574"><LONG-NAME> 
                                <L-4 L="en">BORE_TUNE3</L-4></LONG-NAME></TABLE-CAPTION><TGROUP COLS="1"><COLSPEC COLNUM="1" COLNAME="col1" COLWIDTH="1.00*"/><COLSPEC COLNUM="2" COLNAME="col2" COLWIDTH="1.00*"/><TBODY>
<ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">X</E></L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">0.3</E></L-1> 
                                     </P></ENTRY></ROW><ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all">Value</L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all">0.5</L-1> 
                                     </P></ENTRY></ROW></TBODY></TGROUP> 
                        </TABLE>
                        <TABLE VIEW="DETAILED"><TABLE-CAPTION ID="ID19862004604575"><LONG-NAME> 
                                <L-4 L="en">BORE_TUNE4</L-4></LONG-NAME></TABLE-CAPTION><TGROUP COLS="1"><COLSPEC COLNUM="1" COLNAME="col1" COLWIDTH="1.00*"/><COLSPEC COLNUM="2" COLNAME="col2" COLWIDTH="1.00*"/><TBODY>
<ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">X</E></L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all"><E TYPE="BOLD">0.3</E></L-1> 
                                     </P></ENTRY></ROW><ROW><ENTRY COLNAME="col1">
                                     <P> 
                                        <L-1 L="for-all">Value</L-1> 
                                     </P></ENTRY><ENTRY COLNAME="col2">
                                     <P> 
                                        <L-1 L="for-all">0.5</L-1> 
                                     </P></ENTRY></ROW></TBODY></TGROUP> 
                        </TABLE>

它需要看起来像附加的图像(在 excel 文件中)

【问题讨论】:

  • 您想在 Excel 文件中以图像或文本的形式添加数据?
  • @Alderven 作为文本

标签: python excel xml vba multidimensional-array


【解决方案1】:

您可以使用xmltodict lib 解析您的 XML,然后将其保存到 Excel 文件中:

import xmltodict
import xlsxwriter

workbook = xlsxwriter.Workbook('Output.xlsx')
worksheet = workbook.add_worksheet()
res = []
with open('file.xml', 'r') as f:
    data = xmltodict.parse(f.read())
    worksheet.write(0, 0, data['TABLE']['TABLE-CAPTION']['LONG-NAME']['L-4']['#text'])
    for row in data['TABLE']['TGROUP']['TBODY']['ROW']:
        for entry in row['ENTRY']:
            if entry['P']['L-1'].get('E'):
                res.append(entry['P']['L-1']['E']['#text'])
            else:
                res.append(entry['P']['L-1']['#text'])

for r in range(int(len(res)/2)):
    for c in range(2):
        worksheet.write(r+1, c, res[r+c])

workbook.close()

输出:

【讨论】:

  • 感谢您的帮助,但脚本已将“值”和“0.3”列互换。如何更改代码以转换多个表?我已经修改了问题。请看一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多