【问题标题】:Converting Large Batch of XML Files to XLSX in Python [duplicate]在 Python 中将大量 XML 文件转换为 XLSX [重复]
【发布时间】:2021-12-04 14:36:45
【问题描述】:

我正在尝试使用我在搜索时找到的这个 python 脚本将 600 多个 .xml 类型的文件转换为 .xlsx 类型:

import sys

folder = '/FolderWithXMLFiles'
for filename in os.listdir(folder):
    infilename = os.path.join(folder, filename)
    if not os.path.isfile(infilename): continue
    oldbase = os.path.splitext(filename)
    newname = infilename.replace('.xml', '.xlsx')
    os.rename(infilename, newname)

虽然代码运行良好,但输出不是我所期望的,因为我在 Excel 中不断收到错误消息“文件格式或文件扩展名无效。验证文件没有损坏并且文件扩展名与文件的格式。”

我也尝试将 .xml 文件转换为 .xls 并且它可以工作,但我收到一条错误消息,指出文件类型和文件格式不一样,但它仍然允许我打开它。将 .xls 转换为 .xlsx 也不起作用。

另外,我还有第二批文件,与 .xml 文件相同,但这些文件保存为 Strict Open XML 文件。我可以选择将任一批次转换为普通的 .xlsx 文件类型,但两个批次都没有转换为我想要的方式。

我曾考虑将 .xml 文件中的所有数据复制到每个 .xml 的新普通 .xlsx 工作簿中,但是,我无法弄清楚如何为此编写 python 脚本。

任何帮助将不胜感激。

【问题讨论】:

    标签: python excel xml xlsx


    【解决方案1】:

    如果你在PC上运行,你可以安装win32com库:

    pip install pywin32
    

    然后,在您的主脚本中有两个文件夹,一个包含所有 XML 文件,一个空文件夹将包含您的 XLSX 文件:

    project/
       xml/
          1.xml
          2.xml
          ...
       xlsx/
       main.py
    

    您可以遍历每个 XML 文件并将其保存为 XLSX:

    import win32com.client as win32
    import os
    
    excel = win32.Dispatch("Excel.Application")
    excel.DisplayAlerts = False
    
    path_root_project = os.path.dirname(os.path.abspath(__file__))
    
    # Iterate through XML files
    for xml_filename in os.listdir(path_root_project + './xml'):
    
        # Define XLSX Path based on XML filename
        xlsx_path_file = path_root_project + "\\xlsx\\" + xml_filename.replace('.xml', '.xlsx')
        xml_path_file = path_root_project + "\\xml\\"  + xml_filename
        
        # Open XML and save into XLSX
        wb = excel.Workbooks.OpenXML(xml_path_file)
        wb.SaveAs(xlsx_path_file)
        wb.Close()
    

    这是我的 XML:

    <?xml version="1.0" encoding="UTF-8"?>  
    <emails>  
        <email>  
            <to>Vimal</to>  
            <from>Sonoo</from>  
            <heading>Hello</heading>  
            <body>Hello brother, how are you!</body>  
        </email>  
        <email>  
            <to>Peter</to>  
            <from>Jack</from>  
            <heading>Birth day wish</heading>  
            <body>Happy birth day Tom!</body>  
        </email>  
        <email>  
            <to>James</to>  
            <from>Jaclin</from>  
            <heading>Morning walk</heading>  
            <body>Please start morning walk to stay fit!</body>  
        </email> 
    </emails>
    

    这就是我在 XLSX 中得到的:

    【讨论】:

    • 我希望这会起作用,但我仍然在 Excel 中收到错误消息,指出文件类型和文件格式不匹配。
    • 我可以看看你在 Github 上的项目吗?或者在您的问题中添加您的代码(Python + XML 示例)?
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2021-11-20
    • 2022-01-17
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2015-01-24
    相关资源
    最近更新 更多