You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量从数千XML文件提取指定行数据至Excel的实现方法

批量从XML文件固定行号提取数据到Excel的实现方案

方案一:Python脚本(跨平台,灵活可控)

准备工作

先安装所需依赖库:

pip install openpyxl

脚本实现

将以下代码保存为extract_xml_rows.py,根据你的需求修改文件夹路径和行号映射:

import os
from openpyxl import Workbook

# 配置参数
XML_FOLDER = "/path/to/your/xml/files"  # 替换为你的XML文件所在文件夹路径
OUTPUT_EXCEL = "extracted_data.xlsx"    # 输出Excel文件名

# 定义列与行号的映射:键是Excel列标识,值是要提取的行号(对应文件中的第N行)
COLUMN_MAPPING = {
    "A": 277,    # A列提取第277行
    "B": 269,    # B列提取第269行
    "C": 183,    # C列提取第183行(对应filename行的下一行)
    "D": 231     # D列提取第231行(对应Creation Date行的下一行)
    # 可继续添加更多列的映射
}

# 定义表头(可选,根据需求修改)
HEADERS = {
    "A": "第277行数据",
    "B": "第269行数据",
    "C": "文件名",
    "D": "创建日期"
}

# 创建Excel工作簿和工作表
wb = Workbook()
ws = wb.active

# 写入表头
header_row = []
for col in sorted(COLUMN_MAPPING.keys()):
    header_row.append(HEADERS.get(col, f"第{COLUMN_MAPPING[col]}行"))
ws.append(header_row)

# 遍历所有XML文件
for filename in os.listdir(XML_FOLDER):
    if not filename.endswith(".xml"):
        continue
    file_path = os.path.join(XML_FOLDER, filename)
    
    # 读取文件所有行
    try:
        with open(file_path, "r", encoding="utf-8") as f:
            lines = f.readlines()
    except UnicodeDecodeError:
        # 若utf-8编码读取失败,尝试gbk编码
        with open(file_path, "r", encoding="gbk") as f:
            lines = f.readlines()
    
    # 提取对应行的数据
    row_data = []
    for col in sorted(COLUMN_MAPPING.keys()):
        target_line = COLUMN_MAPPING[col]
        if target_line <= len(lines):
            # 去除换行符和首尾空格
            content = lines[target_line - 1].strip()
            row_data.append(content)
        else:
            # 若文件行数不足,填充空值
            row_data.append("")
    
    # 将数据写入Excel
    ws.append(row_data)

# 保存Excel文件
wb.save(OUTPUT_EXCEL)
print(f"数据提取完成,已保存至 {OUTPUT_EXCEL}")

使用说明

  1. 修改XML_FOLDER为你的XML文件所在目录,OUTPUT_EXCEL为输出文件路径。
  2. 根据需求更新COLUMN_MAPPING和HEADERS,添加或删除需要提取的行号。
  3. 在终端中运行脚本:python extract_xml_rows.py。

方案二:PowerShell脚本(Windows平台原生支持,无需额外安装)

脚本实现

将以下代码保存为Extract-XmlRows.ps1,修改文件夹路径和行号映射:

# 配置参数
$xmlFolder = "C:\path\to\your\xml\files"  # 替换为XML文件所在文件夹
$outputCsv = "C:\output\extracted_data.csv"  # 输出CSV文件(可直接用Excel打开)

# 定义提取规则:键是表头名称,值是要提取的行号
$rowMappings = @{
    "第277行数据" = 277
    "第269行数据" = 269
    "文件名" = 183
    "创建日期" = 231
    # 可继续添加更多规则
}

# 初始化结果集合
$results = @()

# 遍历所有XML文件
Get-ChildItem -Path $xmlFolder -Filter "*.xml" | ForEach-Object {
    $filePath = $_.FullName
    # 读取文件内容
    try {
        $lines = Get-Content -Path $filePath -Encoding UTF8
    } catch {
        $lines = Get-Content -Path $filePath -Encoding Default
    }
    
    # 构造当前文件的提取结果
    $rowObj = [PSCustomObject]@{}
    foreach ($mapping in $rowMappings.GetEnumerator()) {
        $targetLine = $mapping.Value
        if ($targetLine -le $lines.Count) {
            $content = $lines[$targetLine - 1].Trim()
            $rowObj | Add-Member -MemberType NoteProperty -Name $mapping.Key -Value $content
        } else {
            $rowObj | Add-Member -MemberType NoteProperty -Name $mapping.Key -Value ""
        }
    }
    $results += $rowObj
}

# 导出为CSV文件(可直接用Excel打开并保存为xlsx格式)
$results | Export-Csv -Path $outputCsv -Encoding UTF8 -NoTypeInformation
Write-Host "数据提取完成,已保存至 $outputCsv"

使用说明

  1. 修改xmlFolder和outputCsv的路径。
  2. 更新rowMappings添加需要提取的行号和对应表头。
  3. 右键以PowerShell方式运行脚本,或在PowerShell终端中执行:.\Extract-XmlRows.ps1。

注意事项

  • 行号准确性:确认目标行号是文件中的实际行号(部分编辑器可能显示的行号与实际读取的一致,需提前验证几个文件)。
  • 编码问题:若脚本读取文件报错,尝试更换编码参数(如utf-8、gbk、latin-1)。
  • 大文件处理:若XML文件体积过大,可修改脚本为逐行读取(避免一次性加载全部内容到内存)。

内容的提问来源于stack exchange,提问作者Leighski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:35:54