能否在Shell中基于匹配模式为Excel行设置颜色(无需Perl)
在Shell中为Excel匹配特定模式的行上色(无需Perl)
下面是几种无需依赖Perl,纯Shell环境下可实现的方案:
方案1:LibreOffice Calc 命令行 + Basic宏
这是跨平台最通用的方法,只要系统装了LibreOffice/OpenOffice就能用。
操作步骤:
- 先写一个Basic宏文件(比如
color_match.bas),用来匹配行并设置背景色:
Sub ColorMatchedRows Dim doc As Object, sheet As Object Dim rowCount As Integer, i As Integer Dim matchPattern As String, cellContent As String Dim regExp As Object ' 替换成你需要匹配的正则表达式 matchPattern = "你的目标模式" doc = ThisComponent sheet = doc.Sheets(0) ' 操作第一个工作表,可按需修改索引 rowCount = sheet.Rows.Count ' 初始化正则匹配对象(如果用通配符,直接用Like即可,不需要这部分) Set regExp = CreateObject("VBScript.RegExp") regExp.Pattern = matchPattern regExp.IgnoreCase = True ' 可选:忽略大小写 For i = 0 To rowCount - 1 ' 检查第1列(索引0)的内容,可改成你要匹配的列 cellContent = sheet.getCellByPosition(0, i).String ' 正则匹配判断,用Like的话改成 If cellContent Like matchPattern Then If regExp.Test(cellContent) Then ' 设置行背景为黄色,RGB值可自行调整 sheet.Rows(i).CellBackColor = RGB(255, 255, 0) End If Next i ' 保存修改 doc.store() End Sub
- 在Shell里调用LibreOffice无界面执行宏:
libreoffice --headless --macro 'color_match.bas#ColorMatchedRows' your_excel_file.xlsx
提示:如果用的是OpenOffice,把
libreoffice换成soffice即可;--headless确保后台运行,不会弹出窗口。
方案2:轻量命令行工具 xlsxio
xlsxio是专门处理XLSX的命令行工具,体积小、速度快,适合批量处理。
操作步骤:
- 先安装
xlsxio:- Debian/Ubuntu:
sudo apt install xlsxio-tools - 其他系统可从源码编译安装
- Debian/Ubuntu:
- 导出Excel内容为TSV格式:
xlsxio_read your_excel_file.xlsx sheet_name > data.tsv
- 用
awk生成格式配置文件,标记需要上色的行:
awk -v pattern="你的匹配模式" ' BEGIN { print "[FORMAT]"; print "ROW,COLOR" } $0 ~ pattern { print NR ",FFFF00" }' data.tsv > format_config.csv
这里NR是行号,FFFF00是黄色的十六进制RGB值,可按需替换成其他颜色。
4. 生成带颜色的新Excel文件:
xlsxio_write colored_file.xlsx sheet_name < data.tsv --format format_config.csv
方案3:CSV中转 + Python脚本(Shell调用)
如果系统已经装了Python,这是最灵活的方式,无需复杂的宏编写:
- 安装依赖工具:
pip install csvkit xlsxwriter
- 把Excel转成CSV:
in2csv your_excel_file.xlsx > data.csv
- 写一个极简的Python脚本(
color_rows.py):
import csv import xlsxwriter # 配置参数 MATCH_PATTERN = "你的匹配模式" INPUT_CSV = "data.csv" OUTPUT_XLSX = "colored_result.xlsx" # 初始化工作簿和格式 workbook = xlsxwriter.Workbook(OUTPUT_XLSX) yellow_format = workbook.add_format({"bg_color": "yellow"}) # 读取CSV并写入带格式的Excel with open(INPUT_CSV, "r") as f: reader = csv.reader(f) for row_idx, row_data in enumerate(reader): # 检查第1列是否匹配,可修改列索引(比如row_data[1]对应第2列) if MATCH_PATTERN in row_data[0]: workbook.worksheets()[0].write_row(row_idx, 0, row_data, yellow_format) else: workbook.worksheets()[0].write_row(row_idx, 0, row_data) workbook.close()
- 在Shell里执行脚本:
python color_rows.py
内容的提问来源于stack exchange,提问作者vmicrobio
相关产品推荐
相关产品推荐

