Install
openclaw skills install @thcjp/ws-excel-tool-freeopenclaw skills install @thcjp/ws-excel-tool-freeExcel 是最通用的数据交换格式之一。本工具让 AI Agent 能够直接读写 xlsx 文件、执行数据清洗与基础统计,无需安装 Microsoft Excel。免费版聚焦于"能读能写能算"——覆盖单文件基础操作;多表合并、透视表、图表生成与大数据处理留给专业版。
通过 openpyxl 与 pandas 等成熟开源库操作,支持格式保留与公式计算。
| 能力 | 说明 | 免费版 |
|---|---|---|
| 读取 xlsx | 多 sheet、表头识别 | 是 |
| 写入 xlsx | 数据与格式保留 | 是 |
| 数据清洗 | 去重、空值、类型转换 | 是 |
| 基础公式 | SUM/AVERAGE/COUNT/MAX/MIN | 是 |
| 基础统计 | 总和、均值、极值、计数 | 是 |
| 格式操作 | 字体、颜色、边框 | 是 |
| 多 sheet 处理 | 跨 sheet 读写 | 是 |
| 多表合并 | 多文件合并 | 否(专业版) |
| 透视表 | 数据透视分析 | 否(专业版) |
| 图表生成 | 柱状图/折线图/饼图 | 否(专业版) |
| 大数据处理 | 分块读取与流式处理 | 否(专业版) |
| 自动化流水线 | 定时任务与批处理 | 否(专业版) |
用input_params参数进行配置。
输入: 用户提供核心功能执行所需的指令和必要参数。 处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志。
input_params参数,支持创建/查询/导出操作用config_options参数进行配置。
输入: 用户提供参数配置与调用所需的指令和必要参数。 处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回参数配置与调用的响应数据,包含状态码、结果和日志。
config_options参数,支持修改/重置/导入操作用output_format参数进行配置。
输入: 用户提供结果处理与输出所需的指令和必要参数。 处理: 解析结果处理与输出的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回结果处理与输出的响应数据,包含状态码、结果和日志。
output_format参数,支持导出/保存/转换操作
能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Excel、文件处理免费版、公式计算与基础统、面向个人用户与独、立开发者、文件的基础处理能、openpyxl、pandas、等标准库操作、无需安装、Microsoft、Use、when、需要数据分析、报表生成、统计洞察、数据可视化时使用、不适用于实时流数等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。用户说"统计这个 Excel 里销售额的总和与平均值"。Agent 读取 xlsx 文件,识别"销售额"列,计算 SUM 与 AVERAGE,输出结果。
用户说"这个表有很多重复行和空值,帮我清理"。Agent 用 pandas 去重、填充或删除空值、转换数据类型,输出清洗后的文件。
用户说"把这个表加上标题行、边框和合计行"。Agent 用 openpyxl 写入格式(粗体、边框、背景色),追加合计行并写入 SUM 公式。
pip install openpyxl pandasimport pandas as pd
# ...
# 读取第一个 sheet
df = pd.read_excel('data.xlsx')
# ...
# 读取指定 sheet
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# ...
# 读取所有 sheet
sheets = pd.read_excel('data.xlsx', sheet_name=None)
for name, df in sheets.items():
print(f"Sheet: {name}, 行数: {len(df)}")
import pandas as pd
# ...
df = pd.DataFrame({
'产品': ['A', 'B', 'C'],
'销量': [100, 200, 150],
'单价': [10, 20, 15]
})
df['总额'] = df['销量'] * df['单价']
df.to_excel('output.xlsx', index=False)
import pandas as pd
# ...
df = pd.read_excel('data.xlsx')
# ...
# 1. 去除完全重复的行
df = df.drop_duplicates()
# ...
# 2. 处理空值
df = df.dropna(subset=['必填列']) # 删除关键字段为空的行
df['可选列'] = df['可选列'].fillna(0) # 填充默认值
df['文本列'] = df['文本列'].fillna('未知') # 填充文本
# ...
# 3. 类型转换
df['日期'] = pd.to_datetime(df['日期'])
df['金额'] = df['金额'].astype(float)
# ...
# 4. 输出清洗结果
df.to_excel('cleaned.xlsx', index=False)
print(f"清洗完成:{len(df)} 行")
from openpyxl import load_workbook
# ...
wb = load_workbook('report.xlsx')
ws = wb.active
# ...
# 在最后一行追加合计
last_row = ws.max_row
ws.cell(row=last_row + 1, column=1, value='合计')
ws.cell(row=last_row + 1, column=2, value=f'=SUM(B2:B{last_row})')
ws.cell(row=last_row + 1, column=3, value=f'=AVERAGE(C2:C{last_row})')
ws.cell(row=last_row + 1, column=4, value=f'=MAX(D2:D{last_row})')
# ...
wb.save('report_with_totals.xlsx')
from openpyxl import Workbook
from openpyxl.styles import Font, Border, PatternFill, Alignment
# ...
wb = Workbook()
ws = wb.active
ws.title = '销售报表'
# ...
# 标题行格式
header_font = Font(bold=True, color='FFFFFF', size=12)
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
thin_border = Border(left=True, right=True, top=True, bottom=True)
# ...
headers = ['产品', '销量', '单价', '总额']
for col, header in enumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=header)
cell.font = header_font
cell.fill = header_fill
cell.border = thin_border
cell.alignment = Alignment(horizontal='center')
# ...
# 数据行
data = [
['A', 100, 10, 1000],
['B', 200, 20, 4000],
['C', 150, 15, 2250],
]
for row_idx, row_data in enumerate(data, 2):
for col_idx, value in enumerate(row_data, 1):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
cell.border = thin_border
# ...
wb.save('formatted_report.xlsx')
from openpyxl import load_workbook
wb = load_workbook('large.xlsx', read_only=True)
只读模式不加载整个文件到内存,适合大文件。
df.to_excel('output.xlsx', index=False)
避免生成无意义的索引列。
=SUM(B2:B10))pd.to_datetime() 转换datetime 对象,pandas 自动识别utf-8-sig 编码(兼容 Excel 中文)A:文件可能不是真正的 xlsx,或已损坏。检查文件扩展名与实际格式是否一致。旧版 .xls 需用 xlrd 库读取。
A:xlsx 不存在编码问题。如出现乱码,可能是字符串本身编码错误。检查数据源编码,统一转为 UTF-8。
A:openpyxl 写入公式是字符串,需要 Excel 打开后才会计算。如需在 Python 中获取计算结果,用 data_only=True 读取(但前提是文件曾被 Excel 打开并保存过)。
A:Excel 日期本质是数字序列。用 pd.read_excel(..., parse_dates=['日期列']) 或读取后用 pd.to_datetime() 转换。
A:① 用 read_only=True 模式;② 用 pd.read_excel(..., chunksize=1000) 分块读取;③ 超大文件考虑转为 CSV 或用专业版的大数据处理能力。
A:用 openpyxl.load_workbook() 读取(保留格式),修改后 save()。pandas 读取会丢失格式,只保留数据。
A:pd.read_excel(..., sheet_name=None) 返回字典,key 是 sheet 名,value 是 DataFrame。可遍历处理每个 sheet。
本免费体验版限制以下高级功能:
PostgreSQL 等数据库的数据导入导出解锁全部功能请使用专业版:ws-excel-tool-pro
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由 Agent 平台内置 LLM 提供 |
| openpyxl | Python 库 | 必需 | pip install openpyxl |
| pandas | Python 库 | 必需 | pip install pandas |
| Python | 运行时 | 必需 | 官网下载安装 |
| xlrd | Python 库 | 可选 | 读取旧版 .xls 文件时需要 |
data/ 子目录| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
{
"success": true,
"data": {
"result": "Excel工具(免费版)处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "ws excel"
}
},
"execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
"error": null
}