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

如何使用openpyxl从Excel提取JSON数据适配NiFi?

问题描述

需要从Excel单元格提取指定行列数据导入NiFi,因NiFi不支持Jython无法使用pandas,只能借助openpyxl处理。目标是生成单个JSON对象字符串(如{"data1": 0, "data2": 0, "data3": 0}),但当前代码生成的是字典列表,且json.dump无法正常工作。同时询问其他Excel导入NiFi的方法,以及是否可先转XML再导入。

当前使用代码:

sheet = ws1

data = []
for i in range(3, 13):
        filial = sheet.cell(row=i, column=1).value
        kvartal1 = sheet.cell(row=i, column=2).value
        kvartal2 = sheet.cell(row=i, column=3).value
        kvartal3 = sheet.cell(row=i, column=4).value
        kvartal4 = sheet.cell(row=i, column=5).value

        row1 = {filial:kvartal1}
        data.append(row1)

当前输出结果:

[{'data1': 0}, {'data2': 0}, {'data3': 0}, {'data4': 0}, {'data5': 0}, {'data6': 0}, {'data7': None}, {'data8': None}, {'data9': None}]
解决方案

1. 调整代码生成目标JSON格式

你当前代码生成的是字典列表,要改成单个字典存储数据,再用json.dumps(而非json.dump,dump用于写入文件,dumps才是生成字符串)转换。调整后代码如下:

import json
from openpyxl import load_workbook

# 加载Excel文件并获取工作表
wb = load_workbook('你的Excel文件路径.xlsx')
ws1 = wb.active

data = {}  # 改用单个字典存储键值对
for i in range(3, 13):
    filial = ws1.cell(row=i, column=1).value
    kvartal1 = ws1.cell(row=i, column=2).value
    # 处理None值(JSON不支持Python的None,可按需替换为0或空字符串)
    if kvartal1 is None:
        kvartal1 = 0
    data[filial] = kvartal1

# 生成JSON字符串
json_str = json.dumps(data)
print(json_str)

执行后就能得到你需要的{"data1":0,"data2":0,...}格式字符串。

2. 其他NiFi导入Excel的方法

不用自行写脚本的话,NiFi有现成处理器可直接处理Excel:

  • ConvertExcelToCSV + ConvertCSVToJSON:先把Excel转成CSV格式,再转成JSON,全程无需编码
  • QueryRecord:配合ExcelReader服务,用SQL语句直接查询Excel指定行列数据,输出结构化JSON
  • ExecuteScript:用Groovy/Java编写脚本处理Excel(NiFi原生支持Groovy,适配性更好),借助Apache POI库操作Excel并生成JSON字符串

3. Excel转XML再导入NiFi的可行性

完全可行:

  • 可通过Excel自带的「另存为」功能转成XML,或用openpyxl生成XML格式数据
  • 后续用NiFi的ConvertXMLToJSON处理器将XML转成JSON,或用EvaluateXPath提取所需数据后再转换为目标格式
  • 这种方式适合保留Excel复杂结构的场景,但步骤比直接转CSV/JSON更多

内容的提问来源于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 02:35:05