refactor(dexcel): 重构Excel工具库依赖和功能
- 将底层Excel库从calamine和rust_xlsxwriter切换到umya-spreadsheet - 更新版本号从0.1.0到0.4.0 - 降低Rust edition从2024到2021 - 添加新的样式设置功能(style命令),支持行高、列宽、自动换行设置 - 修改delete命令支持范围删除(前N行、后N行、指定范围) - 移除自动创建文件功能,insert操作要求文件必须存在 - 添加thiserror和tempfile依赖用于错误处理和临时文件操作 - 更新tabled和clap依赖版本 - 完善README文档,新增样式设置相关说明和示例 - 保留完整的Excel样式(颜色、字体、边框等)功能 - 修改query输出格式,移除分隔符参数,统一使用表格格式显示
This commit is contained in:
+124
-52
@@ -1,22 +1,25 @@
|
||||
# dexcel - Excel 读写工具 📊
|
||||
|
||||
一个简单易用的命令行 Excel 处理工具,支持查询、统计、插入、更新和删除操作。
|
||||
一个简单易用的命令行 Excel 处理工具,支持查询、统计、插入、更新、删除和样式设置操作。
|
||||
|
||||
**当前版本**: v0.4.0
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
### 核心操作
|
||||
- 🔍 **query**: 灵活查询 Excel 数据,支持行范围选择和自定义分隔符
|
||||
- 🔍 **query**: 灵活查询 Excel 数据,支持行范围选择
|
||||
- 📊 **count**: 快速统计行数,适合脚本使用
|
||||
- ➕ **insert**: 插入新行,支持指定位置或追加到末尾
|
||||
- ✏️ **update**: 更新现有数据,支持部分列更新
|
||||
- ❌ **delete**: 删除行或单元格,带安全确认机制
|
||||
- ❌ **delete**: 删除行,带安全确认机制
|
||||
- 🎨 **style**: 设置样式(行高、列宽、自动换行)
|
||||
|
||||
### 通用特性
|
||||
- 📑 **多 Sheet 支持**: 所有操作都支持 `--sheet` 参数指定工作表
|
||||
- 🔢 **负数索引**: 支持负数行号(-1 表示最后一行)
|
||||
- 🆕 **自动创建**: insert 操作在文件不存在时自动创建
|
||||
- ⚠️ **安全确认**: delete 操作需要用户确认
|
||||
- 📤 **灵活输出**: query 支持自定义分隔符(默认 |)
|
||||
- 💾 **样式保留**: 使用 umya-spreadsheet 库,完整保留 Excel 样式
|
||||
- 📤 **表格输出**: query 以美观的表格格式显示数据
|
||||
|
||||
## 📦 安装
|
||||
|
||||
@@ -89,13 +92,26 @@ dexcel data.xlsx count --sheet "Sales"
|
||||
|
||||
**输出**: 只输出一个数字,表示总行数,适合脚本中使用。
|
||||
|
||||
### 3. 创建新文件 (new)
|
||||
|
||||
```bash
|
||||
# 创建新的 Excel 文件
|
||||
dexcel new mydata.xlsx
|
||||
|
||||
# 指定 Sheet 名称
|
||||
dexcel new mydata.xlsx --sheet "数据表"
|
||||
```
|
||||
|
||||
#### new 参数说明
|
||||
- `<NAME>`: 文件名(必填)**必需**
|
||||
- `--sheet <SHEET>`: Sheet 名称(可选,默认为 Sheet1)
|
||||
|
||||
**注意**:如果文件已存在,会报错提示。
|
||||
|
||||
### 3. 插入数据 (insert)
|
||||
|
||||
```bash
|
||||
# 创建新文件并插入表头
|
||||
dexcel new-file.xlsx insert "姓名|年龄|城市"
|
||||
|
||||
# 追加数据到末尾
|
||||
# 追加数据到末尾(文件必须已存在)
|
||||
dexcel data.xlsx insert "张三|18|北京"
|
||||
|
||||
# 在指定位置插入(第2行)
|
||||
@@ -114,6 +130,8 @@ dexcel data.xlsx insert "数据" --sheet "Sheet2"
|
||||
- `--sheet <SHEET>`: Sheet 名称(可选)
|
||||
- `--split <SPLIT>`: 分隔符(默认 |)
|
||||
|
||||
**注意**:insert 命令要求文件必须已存在,如果文件不存在会报错。
|
||||
|
||||
### 4. 更新数据 (update)
|
||||
|
||||
```bash
|
||||
@@ -140,26 +158,54 @@ dexcel data.xlsx update "新值" --row 1 --sheet "Sheet2"
|
||||
### 5. 删除数据 (delete)
|
||||
|
||||
```bash
|
||||
# 删除整行(带确认)
|
||||
dexcel data.xlsx delete --row 5
|
||||
# 删除前10行
|
||||
dexcel data.xlsx delete 10
|
||||
|
||||
# 删除最后一行
|
||||
dexcel data.xlsx delete --row -1
|
||||
# 删除后5行
|
||||
dexcel data.xlsx delete -5
|
||||
|
||||
# 删除单元格(第3行第2列)
|
||||
dexcel data.xlsx delete --row 3 --cell 2
|
||||
# 删除第3到第8行
|
||||
dexcel data.xlsx delete 3 8
|
||||
|
||||
# 指定 Sheet
|
||||
dexcel data.xlsx delete --row 1 --sheet "Sheet2"
|
||||
dexcel data.xlsx delete 1 --sheet "Sheet2"
|
||||
```
|
||||
|
||||
#### delete 参数说明
|
||||
- `[COUNT]`: 删除数量(默认1)
|
||||
- `--row <ROW>`: 行号(必需,支持负数)
|
||||
- `--cell <CELL>`: 列号(可选,不指定则删除整行)
|
||||
- `<RANGE>`: 删除范围,支持以下格式:
|
||||
- `N` - 删除前 N 行(如 `delete 10` 删除前10行)
|
||||
- `-N` - 删除后 N 行(如 `delete -10` 删除后10行)
|
||||
- `START END` - 删除从 START 到 END 行(如 `delete 1 10` 删除第1到第10行)
|
||||
- `--sheet <SHEET>`: Sheet 名称(可选)
|
||||
|
||||
**注意**: delete 操作需要用户确认(输入 y 继续)
|
||||
**注意**: delete 操作需要用户确认(输入 y 继续),请谨慎操作!
|
||||
|
||||
### 6. 设置样式 (style)
|
||||
|
||||
```bash
|
||||
# 设置第1行的行高
|
||||
dexcel data.xlsx style --rows 1 --row-height 30
|
||||
|
||||
# 设置A列的列宽
|
||||
dexcel data.xlsx style --cols 1 --col-width 20
|
||||
|
||||
# 设置自动换行
|
||||
dexcel data.xlsx style --rows 1 --cols 1 --wrap-text
|
||||
|
||||
# 组合设置
|
||||
dexcel data.xlsx style --rows 1 2 3 --cols 1 2 --row-height 25 --col-width 15 --wrap-text
|
||||
|
||||
# 指定 Sheet
|
||||
dexcel data.xlsx style --rows 1 --row-height 20 --sheet "Sheet2"
|
||||
```
|
||||
|
||||
#### style 参数说明
|
||||
- `--rows <ROWS>`: 行号列表(支持负数,不指定则应用到所有行)
|
||||
- `--cols <COLS>`: 列号列表(不指定则应用到所有列)
|
||||
- `--row-height <ROW_HEIGHT>`: 行高(像素)
|
||||
- `--col-width <COL_WIDTH>`: 列宽(字符数)
|
||||
- `--wrap-text`: 启用自动换行
|
||||
- `--sheet <SHEET>`: Sheet 名称(可选)
|
||||
|
||||
## 💡 使用示例
|
||||
|
||||
@@ -218,14 +264,14 @@ done
|
||||
### 示例 4: 数据清理
|
||||
|
||||
```bash
|
||||
# 删除错误数据行
|
||||
dexcel data.xlsx delete --row 10
|
||||
# 删除前5行
|
||||
dexcel data.xlsx delete 5
|
||||
|
||||
# 删除最后一行
|
||||
dexcel data.xlsx delete --row -1
|
||||
# 删除最后3行
|
||||
dexcel data.xlsx delete -3
|
||||
|
||||
# 删除特定单元格
|
||||
dexcel data.xlsx delete --row 5 --cell 3
|
||||
# 删除第10到第20行
|
||||
dexcel data.xlsx delete 10 20
|
||||
```
|
||||
|
||||
### 示例 5: 多 Sheet 操作
|
||||
@@ -242,6 +288,25 @@ dexcel data.xlsx query --sheet "Sales"
|
||||
dexcel data.xlsx count --sheet "Sales"
|
||||
```
|
||||
|
||||
### 示例 6: 设置样式
|
||||
|
||||
```bash
|
||||
# 设置第1行的行高为30像素
|
||||
dexcel data.xlsx style --rows 1 --row-height 30
|
||||
|
||||
# 设置A列的列宽为20字符
|
||||
dexcel data.xlsx style --cols 1 --col-width 20
|
||||
|
||||
# 设置自动换行
|
||||
dexcel data.xlsx style --rows 1 --cols 1 --wrap-text
|
||||
|
||||
# 组合设置:多行多列,设置行高、列宽和自动换行
|
||||
dexcel data.xlsx style --rows 1 2 3 --cols 1 2 --row-height 25 --col-width 15 --wrap-text
|
||||
|
||||
# 指定 Sheet
|
||||
dexcel data.xlsx style --rows 1 --row-height 20 --sheet "Sheet2"
|
||||
```
|
||||
|
||||
## 📊 输出格式
|
||||
|
||||
### query 输出(表格格式)
|
||||
@@ -290,8 +355,8 @@ dexcel data.xlsx count --sheet "Sales"
|
||||
|
||||
**delete 成功**:
|
||||
```
|
||||
✓ 操作成功:已删除第 5 行
|
||||
剩余行数: 9
|
||||
✓ 操作成功:已删除第 5 行到第 10 行(共 6 行)
|
||||
剩余行数: 94
|
||||
文件: data.xlsx, Sheet: Sheet1
|
||||
```
|
||||
|
||||
@@ -299,25 +364,19 @@ dexcel data.xlsx count --sheet "Sales"
|
||||
|
||||
### 依赖库
|
||||
|
||||
- **calamine**: Excel 文件读取库,支持 .xlsx 格式
|
||||
- **rust_xlsxwriter**: Excel 文件写入库,功能强大
|
||||
- **umya-spreadsheet**: Excel 读写库,完整保留样式,支持 .xlsx 格式
|
||||
- **clap**: 命令行参数解析库
|
||||
- **tabled**: 表格格式化输出库
|
||||
- **chrono**: 日期时间处理库
|
||||
- **thiserror**: 错误处理库
|
||||
|
||||
### 工作原理
|
||||
|
||||
#### 查询流程
|
||||
1. 打开 Excel 文件
|
||||
#### 工作流程
|
||||
1. 打开 Excel 文件(使用 umya-spreadsheet)
|
||||
2. 选择指定的 Sheet(默认第一个)
|
||||
3. 根据参数计算读取范围
|
||||
4. 遍历单元格并提取数据
|
||||
5. 以指定分隔符格式输出
|
||||
|
||||
#### 写入流程
|
||||
1. 检查文件是否存在(insert 可自动创建)
|
||||
2. 读取现有数据到新工作簿
|
||||
3. 执行插入/更新/删除操作
|
||||
4. 保存文件
|
||||
3. 执行相应操作(查询/插入/更新/删除/样式设置)
|
||||
4. 保存文件(保留原有样式)
|
||||
|
||||
### 数据类型支持
|
||||
|
||||
@@ -332,32 +391,39 @@ dexcel data.xlsx count --sheet "Sales"
|
||||
|
||||
**写入时:**
|
||||
- 所有数据都作为字符串写入
|
||||
- 样式完全保留
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **索引从 1 开始**: 行和列的索引都是从 1 开始,不是 0
|
||||
2. **负数索引**: `-1` = 最后一行/列,`-2` = 倒数第二
|
||||
3. **文件自动创建**: insert 操作在文件不存在时自动创建
|
||||
3. **文件必须存在**: insert/update/delete 操作要求文件必须已存在
|
||||
4. **分隔符默认**: 默认使用 `|` 分隔列
|
||||
5. **文件格式**: 仅支持 `.xlsx`,不支持 `.xls`
|
||||
6. **删除需确认**: delete 操作必须用户确认才能执行
|
||||
7. **日期自动识别**: 自动识别并格式化日期单元格
|
||||
8. **不可撤销**: delete 操作不可撤销,请谨慎操作!
|
||||
9. **删除范围**: delete 支持多种删除模式(前N行、后N行、指定范围)
|
||||
10. **样式保留**: 使用 umya-spreadsheet 库,完整保留 Excel 样式
|
||||
11. **样式设置**: style 命令可设置行高、列宽、自动换行等样式
|
||||
|
||||
### 限制
|
||||
|
||||
**读取限制:**
|
||||
- 公式: 不计算公式,只读取原始值
|
||||
- 样式: 不读取单元格样式(颜色、字体等)
|
||||
- 图表: 不支持读取图表
|
||||
- 宏: 不支持 VBA 宏
|
||||
- 大文件: > 10MB 的文件可能较慢
|
||||
|
||||
**写入限制:**
|
||||
- 无样式: 不能设置颜色、字体等样式
|
||||
- 无公式: 不能写入公式
|
||||
- 覆盖警告: update 会覆盖目标单元格的原有内容
|
||||
- insert 下移: insert 会将原有数据下移
|
||||
- update 会覆盖目标单元格的原有内容
|
||||
- insert 会将原有数据下移
|
||||
|
||||
**优势:**
|
||||
- ✅ 完整保留 Excel 样式(颜色、字体、边框等)
|
||||
- ✅ 支持行高、列宽、自动换行等样式设置
|
||||
- ✅ 插入/删除时自动调整样式
|
||||
|
||||
## 🔧 常见问题
|
||||
|
||||
@@ -379,7 +445,7 @@ dexcel data.xlsx insert "数据3|数据4"
|
||||
|
||||
```bash
|
||||
dexcel data.xlsx query -5 # 最后5行
|
||||
dexcel data.xlsx delete --row -1 # 删除最后一行
|
||||
dexcel data.xlsx delete -1 # 删除最后一行
|
||||
```
|
||||
|
||||
### Q4: 如何处理中文内容?
|
||||
@@ -436,7 +502,11 @@ dexcel data.xlsx update "新值" --row 6 --cell 2
|
||||
### 5. 数据清理
|
||||
删除错误数据:
|
||||
```bash
|
||||
dexcel data.xlsx delete --row 10
|
||||
# 删除前5行
|
||||
dexcel data.xlsx delete 5
|
||||
|
||||
# 删除第10到第20行
|
||||
dexcel data.xlsx delete 10 20
|
||||
```
|
||||
|
||||
### 6. 自动化脚本
|
||||
@@ -490,12 +560,13 @@ Write-Host "处理完成!" -ForegroundColor Green
|
||||
欢迎提交 Issue 和 Pull Request!
|
||||
|
||||
可能的改进方向:
|
||||
- 支持更多数据类型(公式等)
|
||||
- 支持单元格样式(颜色、字体等)
|
||||
- 支持公式计算
|
||||
- 支持更多数据类型
|
||||
- 支持批量写入优化
|
||||
- 支持复制 Sheet
|
||||
- 添加数据验证功能
|
||||
- 支持更多输出格式(CSV, JSON 等)
|
||||
- 支持条件格式化
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
@@ -504,10 +575,11 @@ Write-Host "处理完成!" -ForegroundColor Green
|
||||
## 🙏 致谢
|
||||
|
||||
感谢以下开源项目:
|
||||
- [calamine](https://github.com/tafia/calamine) - 优秀的 Excel 读取库
|
||||
- [rust_xlsxwriter](https://github.com/jmcnamara/rust_xlsxwriter) - 强大的 Excel 写入库
|
||||
- [umya-spreadsheet](https://github.com/nomiddlename/umya-spreadsheet) - 优秀的 Excel 读写库,完整保留样式
|
||||
- [tabled](https://github.com/zhiburt/tabled) - 美观的表格格式化库
|
||||
- [clap](https://github.com/clap-rs/clap) - 优秀的命令行参数解析库
|
||||
- [chrono](https://github.com/chronotope/chrono) - 日期时间处理库
|
||||
- [thiserror](https://github.com/dtolnay/thiserror) - 错误处理库
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user