Python 如何将XML格式的表格导入excel文件?

Python 如何将XML格式的表格导入excel文件?,python,excel,xml,vba,multidimensional-array,Python,Excel,Xml,Vba,Multidimensional Array,我在XML文件中有一堆表,需要导入excel文件。我尝试直接使用power查询导入表,但没有成功。总共有25个这样的表需要导入到excel工作表中。我对VBA或python脚本编写知之甚少,因此不知道如何继续。这方面的任何帮助都会非常有帮助 下面是一个XML格式的表示例 <TABLE VIEW="DETAILED"><TABLE-CAPTION ID="ID19862004604572"><LONG-NAME>

我在XML文件中有一堆表,需要导入excel文件。我尝试直接使用power查询导入表,但没有成功。总共有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>

孔_调谐1

X

0.3

价值

0.5

孔(2)

X

0.3

0.8

价值

0.5

0.5

孔_调子3

X

0.3

价值

0.5

孔(4)

X

0.3

价值

0.5

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

您可以使用
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()
输出:


是否要在Excel文件中以图像或文本的形式添加数据?@Alderven as text感谢您的帮助,但脚本已将“值”和“0.3”列互换。如何更改代码以转换多个表?我已经修改了这个问题。请看一看