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

如何通过UNIX终端脚本自动为Excel表格按数值阈值着色(优先Python方案)

终端自动化实现方案

完全可以用纯Python脚本实现全流程,无GUI依赖、不需要手动打开Excel、可直接嵌入你现有的bash/R/Python流水线,比VBA方案适配性强——VBA必须依赖Windows/macOS下安装的桌面版Excel,无图形界面的UNIX服务器环境根本无法运行。

依赖安装

直接在UNIX终端执行以下命令安装依赖库即可,两个库都不需要桌面环境支持:
pip install pandas openpyxl
其中pandas负责批量读取CSV文件、执行数据筛选逻辑,openpyxl负责生成多工作表Excel、设置单元格填充样式。

实现逻辑

  • 遍历指定目录下所有输入的.csv文件,以文件名(去除后缀)作为对应工作表名称
  • 对每个读入的表格按预设规则完成数据筛选
  • 将筛选后的所有表格写入同一个Excel文件的独立工作表
  • 逐表遍历数值单元格,按照阈值匹配规则给符合条件的单元格设置指定填充色
  • 脚本支持命令行直接调用,全程无人工交互步骤

可直接复用的脚本代码

把以下代码保存为csv2formatted_excel.py,修改开头配置项匹配你的业务规则即可:

import os
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# -------------------------- 按需修改以下配置 --------------------------
CSV_FOLDER = "./csv_output"  # 所有输入CSV文件存放的目录路径
FINAL_EXCEL_PATH = "./merged_result.xlsx"  # 最终输出的Excel文件路径
# 数据筛选规则,示例为保留value列大于0的行,可根据实际需求自定义
filter_df = lambda df: df[df["value"] > 0]
# 单元格填充规则:(数值判断函数, 十六进制填充色)
STYLE_RULES = [
    (lambda x: x < 10, "FFC7CE"),   # 数值小于10填充浅红色
    (lambda x: 10 <= x < 50, "FFEB9C"), # 数值在10-50区间填充浅黄色
    (lambda x: x >= 50, "C6EFCE")   # 数值大于等于50填充浅绿色
]
# 需要做阈值判断、应用填充色的数值列列名
NUMERIC_COLS = ["value", "score", "sample_count"]
# -------------------------------------------------------------------

if __name__ == "__main__":
    # 收集目录下所有CSV文件
    csv_list = [f for f in os.listdir(CSV_FOLDER) if f.endswith(".csv")]
    if not csv_list:
        raise RuntimeError("指定目录下未找到CSV文件")

    # 读入CSV、筛选、写入多sheet
    with pd.ExcelWriter(FINAL_EXCEL_PATH, engine="openpyxl") as writer:
        for csv_file in csv_list:
            df = pd.read_csv(os.path.join(CSV_FOLDER, csv_file))
            df_filtered = filter_df(df)
            # Excel工作表名最长支持31字符,自动截断避免报错
            sheet_name = csv_file.rstrip(".csv")[:31]
            df_filtered.to_excel(writer, sheet_name=sheet_name, index=False)

    # 加载生成的Excel设置单元格样式
    wb = load_workbook(FINAL_EXCEL_PATH)
    for sheet in wb.sheetnames:
        ws = wb[sheet]
        # 匹配表头找到需要处理的列索引
        col_index_map = {cell.value: cell.column for cell in ws[1]}
        target_cols = [col_index_map[col] for col in NUMERIC_COLS if col in col_index_map]
        # 遍历数据行设置填充色
        for row_idx in range(2, ws.max_row + 1):
            for col_idx in target_cols:
                cell = ws.cell(row=row_idx, column=col_idx)
                cell_val = cell.value
                if not isinstance(cell_val, (int, float)):
                    continue
                for judge_func, fill_color in STYLE_RULES:
                    if judge_func(cell_val):
                        cell.fill = PatternFill(fill_type="solid", start_color=fill_color)
                        break
    wb.save(FINAL_EXCEL_PATH)
    print(f"处理完成,结果已写入{FINAL_EXCEL_PATH}")

流水线调用方式

  • 给脚本添加可执行权限:chmod +x csv2formatted_excel.py
  • 直接在bash流程中调用执行:python3 csv2formatted_excel.py
  • 如果需要在R脚本中触发执行,直接调用system("python3 csv2formatted_excel.py")即可,执行完成后会在指定路径生成最终Excel文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:15:44