我有一个Excel模板文件,其中包含XML中定义的列。手动我可以右键单击模板然后XML>导入,然后选择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>
检查手动任务:
所以我需要做的是自动执行第3步和第4步。
答案 0 :(得分:1)
您是否尝试过使用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方法导出它们。
答案 1 :(得分:0)
最后,我可以使用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。我还必须考虑到saveAs
method doesn't support forward slashes。