Skip to content

用 GPT 批量处理 Excel ​

把下面的脚本保存成 batch_excel.py,改好要处理的列名和提示词,运行 python batch_excel.py 你的表格.xlsx,结果会写到新的一列,另存为「你的表格_结果.xlsx」。 适合几百到几万行的分类、提取、改写、翻译,比在网页里一条条复制粘贴快得多。

更新于 2026-10。脚本用 OpenAI 官方 Python SDK 和 openpyxl,已用 45 行的测试表格实际跑过。

准备 ​

bash
pip install -U openai openpyxl

设置环境变量 HIVEGPT_API_KEY(Windows PowerShell:$env:HIVEGPT_API_KEY="sk-你的Key")。还没有 Key:到 API 密钥 页创建一个,建议单独建一个 Key 并设额度上限。

表格的第一行是表头,比如:

编号用户评论
1快递很快,包装也好
2耳机音质一般,低音闷

脚本 ​

python
"""批量处理 Excel:读取一列文字,逐行交给模型处理,结果写进新的一列。

用法:python batch_excel.py 输入.xlsx
"""
import os
import sys
from concurrent.futures import ThreadPoolExecutor, as_completed

import openai
from openai import OpenAI
from openpyxl import load_workbook

INPUT_COLUMN = "用户评论"     # 要处理的那一列的表头
OUTPUT_COLUMN = "分析结果"    # 结果写到这一列(没有会自动新建)
MODEL = "gpt-5.5"
WORKERS = 5                    # 同时处理几行,太大会触发 429
PROMPT = """判断下面这条用户评论的情感(正面 / 负面 / 中性),并用不超过 15 个字概括原因。
只输出一行,格式:情感|原因

评论:{text}"""

client = OpenAI(
    base_url="https://hivegpt.cn/v1",
    api_key=os.environ["HIVEGPT_API_KEY"],
    max_retries=5,   # 429 / 5xx 自动重试
    timeout=120,
)


def process(text: str) -> str:
    resp = client.chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": PROMPT.format(text=text)}],
    )
    return resp.choices[0].message.content.strip()


def main(path: str):
    wb = load_workbook(path)
    ws = wb.active
    header = [c.value for c in ws[1]]
    src = header.index(INPUT_COLUMN) + 1
    if OUTPUT_COLUMN in header:
        dst = header.index(OUTPUT_COLUMN) + 1
    else:
        dst = len(header) + 1
        ws.cell(row=1, column=dst, value=OUTPUT_COLUMN)

    # 只处理有内容、还没有结果的行,中断后重新运行会接着做
    todo = [r for r in range(2, ws.max_row + 1)
            if ws.cell(r, src).value and not ws.cell(r, dst).value]
    print(f"共 {len(todo)} 行要处理")

    out_path = path.replace(".xlsx", "_结果.xlsx")
    done = 0
    with ThreadPoolExecutor(max_workers=WORKERS) as pool:
        futures = {pool.submit(process, str(ws.cell(r, src).value)): r for r in todo}
        for future in as_completed(futures):
            row = futures[future]
            try:
                ws.cell(row, dst, value=future.result())
            except openai.APIStatusError as e:
                body = e.body if isinstance(e.body, dict) else {}
                ws.cell(row, dst, value=f"失败:{body.get('message') or e.message}")
            done += 1
            if done % 20 == 0:          # 每 20 行保存一次,防止中途出错白做
                wb.save(out_path)
                print(f"已完成 {done}/{len(todo)}")
    wb.save(out_path)
    print(f"完成,结果保存在 {out_path}")


if __name__ == "__main__":
    main(sys.argv[1])

要改的地方 ​

脚本开头的几行:

变量改成
INPUT_COLUMN你要处理的那一列的表头
OUTPUT_COLUMN结果写到哪一列(不存在会新建)
MODEL简单任务换成分组里更便宜的模型,见 模型广场
WORKERS同时处理几行;遇到 429 就调小
PROMPT你的任务,{text} 会被换成每一行的内容

常见任务的提示词

  • 商品标题改写:把下面的商品标题改写成 30 字以内、突出卖点的版本,只输出标题:{text}
  • 提取信息:从下面的客户留言里提取「姓名|电话|需求」,没有的写「无」,只输出一行:{text}
  • 翻译:把下面的内容翻译成英文,只输出译文:{text}
  • 打标签:从「物流、质量、价格、服务、其他」里选一个最贴切的标签,只输出标签:{text}

让输出格式稳定:在提示词里写清楚「只输出一行」「格式:A|B」,结果更容易用 Excel 的「分列」拆开。需要严格的结构时,用 JSON 输出,见 Python 完整示例。

中途断了怎么办 ​

脚本每 20 行保存一次。中断后,对生成的「_结果.xlsx」再运行一次,已经有结果的行会跳过,只处理剩下的。处理失败的行会写上「失败:原因」,删掉这些单元格再运行一次就会重做。

大概花多少钱 ​

按 gpt-5.5 的标价,一条 50 字的评论加上提示词约 120 token 输入、20 token 输出,每行约 $0.0012,1000 行约 $1.2。换成便宜的小模型可以再便宜几十倍。实际花费以 使用记录 为准,算法见 token 怎么算钱。

常见问题 ​

现象原因处理
ValueError: '用户评论' is not in list列名不对把 INPUT_COLUMN 改成表头里的原文
很多行显示「失败:…429…」并发太高把 WORKERS 调小到 2–3,再运行一次
「失败:…不支持模型…」模型不在你的分组里见 模型不存在
.xls 文件打不开openpyxl 只支持 .xlsx在 Excel / WPS 里另存为 .xlsx
KeyError: 'HIVEGPT_API_KEY'环境变量没设置在运行脚本的同一个终端里设置

更多报错看 报错速查。

代码示例在页面里运行时使用 HiveGPT 的模型接口。延伸阅读来自 JavaGuide(Apache-2.0),版权归原作者。