【问题标题】:How to import an XML file into an Excel XLS file template using Python?如何使用 Python 将 XML 文件导入 Excel XLS 文件模板?
【发布时间】:2017-03-24 19:40:57
【问题描述】:

我有一个 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>

检查手动任务:

  1. 将上述示例保存为 XML 文件。
  2. 要创建 Excel XLS 模板,您只需使用 Excel 打开上述 XML 示例,确保模板上没有数据(如果在导入中添加了任何数据,请删除数据)并将文件另存为 XLS。
  3. 导入示例 XML 文件。右键单击创建的 Excel 模板文件,然后单击 XML > 导入,然后选择 XML 示例文件。
  4. 将包含数据的模板保存为新的 XLS。

所以我需要做的是自动执行第 3 步和第 4 步

【问题讨论】:

  • 请注意我正在使用 Python 2.5

标签: python xml excel python-2.5


【解决方案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 方法导出它们。

【讨论】:

  • 我会试试这个。我一直在使用 ElementTree for xml 和 pandas 来读取 excel 文件。
  • 文档说:“我使用 Python 2.7 和 Python 3.2 来开发 Beautiful Soup,但它应该可以与其他最新版本一起使用。”所以希望它会,但如果没有,请尝试使用 BeautifulSoup3。这提醒了我,最新版本应该使用“pip install bs4”安装。
  • 如果我想将xml文件的整个结构导入到excel中怎么办。没有更简单的方法吗?还是我应该一点一点地查找数据并导出到数据框,然后保存 excel 文件?
  • 另外,我想在我的 Excel 模板中添加一些我想要保留的条件格式。所以我不想写excel,我需要将数据导入现有的Excel文件(即模板)
  • 我相信我尝试做的事情可以用pythonexcels.com/basic-excel-driving-with-python上所述的win32模块完成
【解决方案2】:

最后我可以使用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

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2017-10-21
    • 2015-04-29
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多