如何使用 Python 将 XML 文件导入到 Excel XLS 文件模板?
How to import an XML file into an Excel XLS file template using Python?
我有一个 Excel 模板文件,其中包含在 XML 中定义的列。我可以手动右键单击模板,然后 XML > 导入,然后 select XML 文件,最后保存文件。
我如何在 Python 中自动执行此任务?
XML 文件示例:
<DCPowerFlow>
<branches>
<branch>
<busFrom name="bus_one" number="1" />
<busTo name="bus_two" number="2" />
<id>1</id>
<rateA>1000</rateA>
<resultPowerFlow>
<probOverFlow>0.0</probOverFlow>
<maxOverFlow>800</maxOverFlow>
</resultPowerFlow>
</branch>
<branch>
<busFrom name="bus_two" number="2" />
<busTo name="bus_three" number="3" />
<id>1</id>
<rateA>1200</rateA>
<resultPowerFlow>
<probOverFlow>0.1</probOverFlow>
<maxOverFlow>1300</maxOverFlow>
</resultPowerFlow>
</branch>
</branches>
</DCPowerFlow>
检查手动任务:
- 将上面的示例保存为 XML 文件。
- 为了创建 Excel XLS 模板,您只需使用 Excel 打开上面的 XML 示例,确保模板上没有数据(如果在导入中则删除数据你添加了任何)并将文件另存为 XLS。
- 导入示例 XML 文件。右键单击创建的 Excel 模板文件,然后 XML > 导入,然后 select XML 示例文件。
- 将包含数据的模板保存为新的 XLS。
所以我需要做的是自动执行第 3 步和第 4 步。
您尝试过使用 BeautifulSoup 和 Pandas 吗?请注意,我在以下脚本中使用的解析器要求您已经安装 lxml。如果你没有它,只需 pip install lxml。
import pandas as pd
from bs4 import BeautifulSoup
file = open("file.xml", 'r')
soup = BeautifulSoup(file, 'lxml')
df = pd.DataFrame({'ids': [x.text for x in soup.find_all('id')]})
df.to_excel('data.xls')
虽然您必须弄清楚要如何解析文件,但这将为您提供所需的工具。如果您需要有关如何解析文件的更多信息,请尝试访问 BeautifulSoup documentation。使用此代码,您可以遍历所有您感兴趣的文件并将它们解析为数据帧,然后使用 to_excel 方法导出它们。
最后我可以使用 win32com.client
模块解决这个问题。
我使用以下代码成功地将 xml 导入我用作模板的现有 Excel xlsx 文件,然后用不同的名称保存它:
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open("D:/tmp/template.xlsx")
wb.XmlImport("D:/tmp/result.xml")
wb.SaveAs("D:\tmp\result.xlsx")
wb.Close()
可以找到 Excel 个工作簿的方法 here. Also I had to take into account that the saveAs
method doesn't support forward slashes。
我有一个 Excel 模板文件,其中包含在 XML 中定义的列。我可以手动右键单击模板,然后 XML > 导入,然后 select XML 文件,最后保存文件。
我如何在 Python 中自动执行此任务?
XML 文件示例:
<DCPowerFlow>
<branches>
<branch>
<busFrom name="bus_one" number="1" />
<busTo name="bus_two" number="2" />
<id>1</id>
<rateA>1000</rateA>
<resultPowerFlow>
<probOverFlow>0.0</probOverFlow>
<maxOverFlow>800</maxOverFlow>
</resultPowerFlow>
</branch>
<branch>
<busFrom name="bus_two" number="2" />
<busTo name="bus_three" number="3" />
<id>1</id>
<rateA>1200</rateA>
<resultPowerFlow>
<probOverFlow>0.1</probOverFlow>
<maxOverFlow>1300</maxOverFlow>
</resultPowerFlow>
</branch>
</branches>
</DCPowerFlow>
检查手动任务:
- 将上面的示例保存为 XML 文件。
- 为了创建 Excel XLS 模板,您只需使用 Excel 打开上面的 XML 示例,确保模板上没有数据(如果在导入中则删除数据你添加了任何)并将文件另存为 XLS。
- 导入示例 XML 文件。右键单击创建的 Excel 模板文件,然后 XML > 导入,然后 select XML 示例文件。
- 将包含数据的模板保存为新的 XLS。
所以我需要做的是自动执行第 3 步和第 4 步。
您尝试过使用 BeautifulSoup 和 Pandas 吗?请注意,我在以下脚本中使用的解析器要求您已经安装 lxml。如果你没有它,只需 pip install lxml。
import pandas as pd
from bs4 import BeautifulSoup
file = open("file.xml", 'r')
soup = BeautifulSoup(file, 'lxml')
df = pd.DataFrame({'ids': [x.text for x in soup.find_all('id')]})
df.to_excel('data.xls')
虽然您必须弄清楚要如何解析文件,但这将为您提供所需的工具。如果您需要有关如何解析文件的更多信息,请尝试访问 BeautifulSoup documentation。使用此代码,您可以遍历所有您感兴趣的文件并将它们解析为数据帧,然后使用 to_excel 方法导出它们。
最后我可以使用 win32com.client
模块解决这个问题。
我使用以下代码成功地将 xml 导入我用作模板的现有 Excel xlsx 文件,然后用不同的名称保存它:
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open("D:/tmp/template.xlsx")
wb.XmlImport("D:/tmp/result.xml")
wb.SaveAs("D:\tmp\result.xlsx")
wb.Close()
可以找到 Excel 个工作簿的方法 here. Also I had to take into account that the saveAs
method doesn't support forward slashes。