PowGrade.FileConverters.XlsToXlsx.Cli
0.1.0
dotnet tool install --global PowGrade.FileConverters.XlsToXlsx.Cli --version 0.1.0
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
dotnet tool install --local PowGrade.FileConverters.XlsToXlsx.Cli --version 0.1.0
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=PowGrade.FileConverters.XlsToXlsx.Cli&version=0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
nuke :add-package PowGrade.FileConverters.XlsToXlsx.Cli --version 0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
PowGrade.FileConverters.XlsToXlsx
PowGrade.FileConverters.XlsToXlsx 是一个 .NET 的 XLS(BIFF8) 到 XLSX(OpenXML) 转换器,包含:
- 类库:
PowGrade.FileConverters.XlsToXlsx - 命令行:
PowGrade.FileConverters.XlsToXlsx.Cli(命令名xls2xlsx)
项目目标是尽可能保留旧版 Excel 工作簿的可读内容与常见结构,同时保持纯托管、无 Office 依赖、可在服务端运行。
当前功能完成度
以下状态基于当前代码实现与测试覆盖情况整理。
已完成(可稳定使用)
- OLE 复合文档读取(Workbook 流、FAT/DIFAT/MiniFAT)
- BIFF8 基础单元格解析:数字、字符串、布尔、错误值、公式结果
- 样式主链路:字体、填充、边框、对齐、数字格式、行列样式索引映射
- 工作表基础布局:行高、列宽、冻结窗格、合并单元格去重防冲突
- 超链接(外链/本地/邮件)
- 页面设置:页边距、页眉页脚、方向、纸张、缩放相关字段
- 文档属性:core/app 属性(作者、标题、公司、时间等)
- 工作簿/工作表保护标志与 16 位密码哈希透传
- 严格模式(
--strict)与公式未知 PTG 诊断(--report/ConversionReport) - CLI 单文件与目录批量转换(目录模式为当前目录下
*.xls)
部分完成(可用但有边界)
- 公式反编译:覆盖大量函数与 PTG,但仍存在未知 PTG 的兼容场景
- 图表:支持基础图类型和系列数据写出;已支持轴最小/最大值、对数刻度、反向轴、主/次单位,线图/散点图 marker 细节写出,以及按系列图类型覆盖、次坐标轴与类别轴/XY 轴族并存映射;高级图表特性仍不完整
- 图片/绘图:支持常见图片提取与锚点;复杂 Escher 容器仅部分解析
- 条件格式:支持 CFRULE/CF12 主体结构;已增强 CF12 的阈值解析、图标集类型映射、“公式前缀 + 载荷”场景解析、DataBar 长度提取,以及 iconSet percent/dataBar 长度写出一致性处理,复杂样式仍含降级逻辑
- 数据验证:支持常见规则与公式;复杂多区域/细粒度标志处理有限
- 数据透视表:可生成 pivotCache/pivotTable 结构,支持 row/column/page/data 字段索引映射与基础布局,复杂行为依赖 Excel 刷新
- 外部链接:支持 EXTERNBOOK/EXTERNSHEET 基础映射,并写出外部工作表名与外部定义名;复杂路径场景仍有限
- 注释:已写出 comments part + legacy VML,支持基础文本与作者;富文本细节与高级注释属性仍有限
明确缺失或不完整项
- 图表高级能力缺失(如复杂 3D 参数、跨类型组合图的更完整布局语义、更多样式细节)
- 条件格式 CF12 二进制细节未完全逐字段映射,部分场景走默认/回退值
- 目录过滤策略支持 include/exclude 通配符与基础正则;支持输出目录、输出扩展名、JSON 汇总报告、dry-run 与输出冲突策略(尚未提供更复杂条件组合规则)
快速开始
1) 本地运行 CLI
dotnet run --project src\PowGrade.FileConverters.XlsToXlsx.Cli -- -i input.xls -o output.xlsx
CLI 参数:
-i, --input <path>:输入文件或目录-o, --output <file>:输出文件(单文件转换时使用,支持.xlsx/.xlsm)--strict:严格模式,未知公式 PTG 视为错误,并启用输出包校验--report:输出转换诊断信息--password <value>:加密 XLS 密码(默认会尝试VelvetSweatshop)-r, --recursive:目录输入时递归扫描子目录--pattern <glob>:目录输入时的文件匹配模式(默认*.xls)--exclude-pattern <glob>:目录输入时排除文件名模式--include-regex <expr>:目录输入时按文件名正则包含--exclude-regex <expr>:目录输入时按文件名正则排除--output-dir <path>:指定输出目录(目录模式保留相对结构)--output-ext <ext>:输出扩展名(xlsx或xlsm,默认xlsx)--report-file <path>:输出 JSON 汇总报告(含成功/失败、输入输出路径、未知 PTG)--dry-run:仅输出计划转换映射,不写文件--flatten-output:目录模式下将输出扁平化写入--output-dir--on-collision <mode>:输出冲突策略(fail或overwrite)--dump-colors <file>:仅解析调色板/字体信息,不执行转换--version:显示版本--help, -h:显示帮助
示例:
xls2xlsx -i C:\legacy\book.xls -o C:\out\book.xlsx --strict --report
xls2xlsx -i C:\legacy\book.xls -o C:\out\book.xlsm
xls2xlsx -i C:\legacy-folder
xls2xlsx -i C:\legacy-folder --recursive --pattern *invoice*.xls --strict
xls2xlsx -i C:\legacy-folder --recursive --pattern *.xls --exclude-pattern *backup*.xls
xls2xlsx -i C:\legacy-folder --recursive --pattern *.xls --include-regex ^sales-.*\.xls$ --exclude-regex backup
xls2xlsx -i C:\legacy-folder --recursive --output-dir C:\converted --output-ext xlsm
xls2xlsx -i C:\legacy-folder --recursive --report-file C:\converted\summary.json
xls2xlsx -i C:\legacy-folder --recursive --output-dir C:\flat --flatten-output --on-collision overwrite
2) 类库调用
using var input = File.OpenRead(@"C:\legacy.xls");
using var output = File.Create(@"C:\converted.xlsx");
XlsToXlsxConverter.Convert(
input,
output,
strictMode: false);
带诊断报告:
ConversionReport report = XlsToXlsxConverter.ConvertWithReport(
input,
output,
strictMode: false);
ConversionReport 除未知 PTG 外,还包含工作表/行/单元格、公式单元格、注释、超链接、数据验证、条件格式、图表、透视表、外部引用数量,以及是否宏项目与输出是否宏启用等统计信息;并提供按工作表维度的明细统计(WorksheetSummaries)与结构化兼容性告警(Warnings,含 WarningSeverity、来源索引与 ActionHint)。Warnings 结果在库内会去重并稳定排序,便于 CI 结果对比。
架构概览
OleCompoundFile:读取 OLE 复合文档结构XlsParser:解析 BIFF8 记录并构建中间模型WorkbookFormulaDecompiler:将 PTG/RPN 公式反编译为 A1 风格文本WorkbookStylesBuilder:归并/映射样式索引XlsxGenerator:将中间模型序列化为 OpenXML 包XlsToXlsxConverter:对外统一 API(同步/异步/报告/批量)
开发与验证
dotnet build PowGrade.FileConverters.XlsToXlsx.sln -c Release
dotnet test PowGrade.FileConverters.XlsToXlsx.sln -c Release
发布前可运行:
.\tools\verify-release-metadata.ps1
改进计划(建议)
- 宏文件输出策略:补齐
.xlsm输出路径与内容类型一致性 - 注释体系:补齐 comments 相关部件并增强富文本支持
- 条件格式:完善 CF12 二进制解析与样式精确映射
- 图表:扩展高级图表参数、轴与样式覆盖面
- 批量转换:增加递归目录与过滤策略
- 回归样本:增加多来源真实 XLS 样本集做兼容性回归
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 158 | 4/30/2026 |