XML作为一种可扩展标记语言,常被用来存储和传输结构化数据,而Excel凭借直观的表格展示能力,成为数据分析和日常办公的常用工具。当需要将XML中存储的业务数据、配置信息等内容导入到Excel中进行进一步处理时,就需要掌握对应的转换方法。

手动导入方式(适合少量数据)
如果没有编程基础,且只需要处理少量XML文件,可以直接使用Excel自带的导入功能完成转换,操作步骤如下:
- 打开Excel软件,新建一个空白工作簿
- 点击顶部菜单栏的数据选项卡,选择获取数据 - 来自文件 - 从XML文件
- 在弹出的文件选择窗口中找到需要转换的XML文件,点击导入
- 在导航器窗口中预览XML数据,确认无误后点击加载,数据就会自动填充到Excel表格中
编程自动化转换(适合批量处理)
当需要批量转换多个XML文件,或者对转换逻辑有特殊要求时,使用编程方式会更加高效。下面以Python为例,介绍如何通过xml.etree.ElementTree解析XML,再使用openpyxl库生成Excel文件。
环境准备
首先安装需要的依赖库:
pip install openpyxl
示例XML文件
假设我们有一个存储学生信息的XML文件students.xml,内容如下:
<students>
<student>
<id>1</id>
<name>张三</name>
<age>20</age>
<score>95</score>
</student>
<student>
<id>2</id>
<name>李四</name>
<age>21</age>
<score>88</score>
</student>
<student>
<id>3</id>
<name>王五</name>
<age>19</age>
<score>92</score>
</student>
</students>
转换代码实现
下面是完整的转换代码,会解析上述XML文件,并将数据写入到Excel中:
import xml.etree.ElementTree as ET
from openpyxl import Workbook
def xml_to_excel(xml_path, excel_path):
# 解析XML文件
tree = ET.parse(xml_path)
root = tree.getroot()
# 创建Excel工作簿
wb = Workbook()
ws = wb.active
ws.title = "学生信息"
# 写入表头
headers = ["ID", "姓名", "年龄", "成绩"]
ws.append(headers)
# 遍历XML中的student节点,提取数据写入Excel
for student in root.findall("student"):
student_id = student.find("id").text
name = student.find("name").text
age = student.find("age").text
score = student.find("score").text
# 将每行数据写入Excel
ws.append([student_id, name, age, score])
# 保存Excel文件
wb.save(excel_path)
print(f"转换完成,文件已保存至{excel_path}")
if __name__ == "__main__":
# 调用转换函数,输入XML路径和输出的Excel路径
xml_to_excel("students.xml", "students.xlsx")
代码说明
- 首先使用
ET.parse方法加载并解析XML文件,获取根节点 - 创建
Workbook对象生成新的Excel工作簿,激活默认的工作表 - 先写入表头行,再遍历XML中所有的
student子节点,提取每个子节点的文本内容 - 将提取到的每行数据通过
ws.append方法写入Excel工作表 - 最后调用
wb.save方法保存生成的Excel文件
不同方案对比
下面是两种转换方案的适用场景对比:
| 转换方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Excel手动导入 | 少量XML文件,无特殊转换需求 | 无需编程基础,操作简单 | 无法批量处理,自定义逻辑能力弱 |
| Python编程转换 | 批量XML文件,需要自定义数据处理逻辑 | 可批量处理,逻辑灵活可扩展 | 需要一定的编程基础 |
注意事项
- 如果XML文件结构复杂,存在多层嵌套,需要先分析XML的节点结构,调整解析逻辑
- 如果XML中包含特殊字符,解析时需要注意编码问题,建议XML文件使用UTF-8编码
- 生成的Excel文件路径需要确保有写入权限,避免保存失败