python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel转XML工具

基于Python编写一个Excel转XML格式转换工具

作者:UrbanJazzerati

在日常开发工作中,我们经常需要处理不同格式的数据转换,今天分享一个实用的Python脚本,它能够将Excel中的数据自动转换为符合特定格式要求的XML文件,这个工具特别适合处理配置文件、本地化文件、元数据转换等场景,需要的朋友可以参考下

需求背景

假设我们需要将Excel中的多语言翻译数据转换为Salesforce平台所需的CustomLabels格式的XML文件。原始数据存储在Excel中,需要按照特定的XML结构进行输出。

工具准备

我们需要使用以下Python库:

核心代码实现

1. XML美化函数

def prettify_xml(elem):
    """格式化 XML 输出"""
    rough_string = ET.tostring(elem, "utf-8")
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="    ")

这个函数确保生成的XML文件具有良好的可读性,使用4个空格进行缩进。

2. 主处理函数

def main():
    # 1. 打开 Excel 文件
    excel_file_path = r"C:\Projects\Translation\test_data.xlsx"
    wb = xw.Book(excel_file_path)
    # 2. 选择指定工作表
    try:
        sheet = wb.sheets["TranslationData"]
    except KeyError:
        print("❌ 错误:指定工作表不存在!")
        wb.close()
        return
    # 3. 定义列映射关系
    column_mapping = {
        'full_name': 'B',    # 标签名称
        'categories': 'F',   # 分类信息
        'short_desc': 'G',   # 简短描述
        'value': 'C'         # 实际值
    }
    # 4. 构建 XML 根元素
    root = ET.Element("CustomLabels", 
                     xmlns="http://soap.sforce.com/2006/04/metadata")
    # 5. 遍历数据行
    row_index = 2  # 从第二行开始(跳过标题行)
    processed_count = 0
    
    while True:
        full_name = sheet.range(f"{column_mapping['full_name']}{row_index}").value
        
        # 检查是否到达数据末尾
        if full_name is None:
            break
        # 读取其他字段数据
        categories = sheet.range(f"{column_mapping['categories']}{row_index}").value
        short_desc = sheet.range(f"{column_mapping['short_desc']}{row_index}").value
        value = sheet.range(f"{column_mapping['value']}{row_index}").value
        # 创建 XML 标签元素
        label_elem = ET.SubElement(root, "labels")
        ET.SubElement(label_elem, "fullName").text = str(full_name)
        ET.SubElement(label_elem, "categories").text = str(categories)
        ET.SubElement(label_elem, "language").text = "en_US"
        ET.SubElement(label_elem, "protected").text = "false"
        ET.SubElement(label_elem, "shortDescription").text = str(short_desc)
        ET.SubElement(label_elem, "value").text = str(value)
        row_index += 1
        processed_count += 1
    # 6. 生成并保存 XML
    xml_str = prettify_xml(root)
    
    output_xml_path = "output_custom_labels.xml"
    with open(output_xml_path, "w", encoding="utf-8") as f:
        f.write(xml_str)
    print(f"✅ 处理完成!共转换 {processed_count} 条记录")
    print(f"✅ XML 文件已生成:{output_xml_path}")
    
    wb.close()

示例数据结构

Excel数据格式(test_data.xlsx)

B列 (fullName)C列 (value)F列 (categories)G列 (shortDescription)
Welcome_Message欢迎使用系统UI_Labels欢迎消息
Error_404页面不存在Error_Messages404错误提示
Save_Success保存成功Notification成功提示

生成的XML输出

<?xml version="1.0" encoding="utf-8"?>
<CustomLabels xmlns="http://soap.sforce.com/2006/04/metadata">
    <labels>
        <fullName>Welcome_Message</fullName>
        <categories>UI_Labels</categories>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>欢迎消息</shortDescription>
        <value>欢迎使用系统</value>
    </labels>
    <labels>
        <fullName>Error_404</fullName>
        <categories>Error_Messages</categories>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>404错误提示</shortDescription>
        <value>页面不存在</value>
    </labels>
</CustomLabels>

功能特点

1. 灵活的数据映射

通过修改column_mapping字典,可以轻松调整Excel列与XML字段的对应关系。

2. 错误处理

3. 可扩展性

可以轻松添加新的字段或修改XML结构:

<PYTHON>
# 添加自定义字段示例
ET.SubElement(label_elem, "customField").text = "custom_value"

4. 格式化输出

生成的XML文件具有良好的缩进和格式,便于阅读和调试。

实际应用场景

1. 多语言支持

将翻译团队提供的Excel翻译文件转换为应用程序可读的XML格式。

2. 配置管理

将配置数据从Excel迁移到XML格式的配置文件。

3. 数据迁移

在不同系统间迁移数据时,作为中间转换工具。

4. 元数据管理

处理Salesforce、SAP等系统的元数据文件。

优化建议

1. 添加日志记录

import logging
logging.basicConfig(level=logging.INFO, 
                   format='%(asctime)s - %(levelname)s - %(message)s')

2. 支持多种编码

# 检测并处理不同的文件编码
def detect_encoding(file_path):
    import chardet
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
    return result['encoding']

3. 批量处理支持

def process_multiple_files(input_folder, output_folder):
    # 处理整个文件夹中的Excel文件
    pass

使用注意事项

  1. 数据验证:建议添加数据验证逻辑,确保必填字段不为空
  2. 特殊字符处理:XML中的特殊字符(如<, >, &等)需要转义处理
  3. 性能优化:处理大量数据时,考虑使用更高效的数据读取方式
  4. 错误恢复:添加异常处理,支持从错误点继续处理

总结

这个Python脚本展示了如何通过自动化工具解决实际工作中的数据格式转换问题。通过结合xlwings和XML处理库,我们创建了一个强大而灵活的数据转换工具。

主要优点:

这种自动化思路可以应用于各种数据转换场景,只需要根据具体需求调整映射关系和输出格式即可。

以上就是基于Python编写一个Excel转XML格式转换工具的详细内容,更多关于Python Excel转XML工具的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文