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

如何用openpyxl提取Excel指定行并插入结果指定位置,过滤指定列?

使用openpyxl提取Excel特定内容并生成JSON字符串

以下是基于openpyxl修改的脚本,完全符合你的需求——跳过指定行列、保留目标列、将第3行内容插入结果指定位置,最终输出JSON字符串:

import openpyxl
import json

def excel_to_custom_json(file_path):
    # 打开Excel工作簿,只读模式处理大文件更高效
    wb = openpyxl.load_workbook(file_path, read_only=True)
    ws = wb.active  # 假设处理第一个工作表,可根据需求修改为ws = wb["工作表名称"]
    
    # 筛选需要保留的列索引(从0开始计数)
    target_cols = []
    header_row = next(ws.iter_rows(min_row=1, max_row=1, values_only=True))[0]
    for col_idx, cell_value in enumerate(header_row):
        # 保留第一列,以及表头为"1 part"、"3 part"、"4 part"的列
        # 排除包含"2 part"或"Year"的列
        if col_idx == 0:
            target_cols.append(col_idx)
        elif cell_value in ["1 part", "3 part", "4 part"]:
            target_cols.append(col_idx)
        elif "2 part" in str(cell_value) or "Year" in str(cell_value):
            continue
    
    # 提取第3行的内容,后续插入每个结果的指定位置
    third_row_data = {}
    third_row = next(ws.iter_rows(min_row=3, max_row=3, values_only=True))[0]
    for col_idx in target_cols:
        header = header_row[col_idx]
        third_row_data[header] = third_row[col_idx]
    
    # 遍历行,收集有效数据
    result = []
    # 从第5行开始遍历(跳过第4行),同时跳过第一列值为"Place"、"All"、"Year"的行
    for row in ws.iter_rows(min_row=5, values_only=True):
        first_col_value = row[0]
        if first_col_value in ["Place", "All"] or "Year" in str(first_col_value):
            continue
        
        # 收集当前行的目标列数据
        row_data = {}
        for col_idx in target_cols:
            header = header_row[col_idx]
            row_data[header] = row[col_idx]
        
        # 将第3行内容插入到指定位置(这里用"third_row_summary"作为键,可自定义)
        row_data["third_row_summary"] = third_row_data
        
        result.append(row_data)
    
    # 关闭工作簿
    wb.close()
    
    # 转为JSON字符串,ensure_ascii=False支持中文
    return json.dumps(result, indent=4, ensure_ascii=False)

# 调用示例
if __name__ == "__main__":
    json_str = excel_to_custom_json("your_excel_file.xlsx")
    print(json_str)
    # 也可以写入文件
    with open("output.json", "w", encoding="utf-8") as f:
        f.write(json_str)

关键逻辑说明:

  • 大文件优化:使用read_only=True模式打开工作簿,避免加载整个文件到内存,适合处理大Excel文件。
  • 列筛选:遍历表头行,只保留第一列和标注为"1 part"、"3 part"、"4 part"的列,自动跳过"2 part"和"Year"相关列。
  • 行过滤:直接从第5行开始遍历(跳过第4行),同时排除第一列值为"Place"、"All"或包含"Year"的行。
  • 第3行内容插入:提前提取第3行的目标列数据,将其作为单独的键值对插入到每个结果条目中,位置可通过修改键名(third_row_summary)自定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:45:01