本文档为 Excel2Object 项目提供 GitHub Copilot 的使用指导和项目规范说明。
Excel2Object 是一个用于 Excel 与 .NET 对象互相转换的类库。该项目支持多个 .NET 框架版本,包括 .NET Framework 4.7.2+、.NET Standard 2.0/2.1、.NET 6.0/8.0/9.0。
- Excel 转对象: 将 Excel 文件内容转换为 .NET 对象集合
- 对象转 Excel: 将 .NET 对象集合导出为 Excel 文件
- 自动列宽: 基于内容自动调整 Excel 列宽
- 日期时间格式: 支持 56 种日期时间格式
- 样式支持: 支持字体、颜色、对齐方式等 Excel 样式设置
- 主要依赖: NPOI 2.7.5 (Excel 操作), SixLabors.ImageSharp 3.1.11 (图像处理)
- 目标框架: 多目标框架 (net472, netstandard2.0, netstandard2.1, net6.0, net8.0, net9.0)
- 测试框架: xUnit
- CI/CD: GitHub Actions
- 类名: 使用 PascalCase,例如
ExcelExporter,ExcelImporter - 方法名: 使用 PascalCase,例如
ToExcel(),ToObject<T>() - 属性名: 使用 PascalCase,例如
FileName,SheetName - 私有字段: 使用 camelCase,例如
_workbook,_sheet - 常量: 使用 UPPER_CASE,例如
MAX_COLUMN_WIDTH
- 缩进: 使用 Tab 缩进(项目现有风格)
- 语言版本: C# 12.0,启用隐式 using
- 可空性: 启用可空引用类型注解 (
Nullable=annotations) - 注释: 对公共 API 提供 XML 文档注释
- 异常处理: 使用明确的异常类型,提供有意义的错误消息
项目广泛使用 Attribute 来配置 Excel 映射:
[ExcelTitle("工作表名称")]
public class MyModel
{
[ExcelColumn("列标题", Order = 1)]
public string Name { get; set; }
[ExcelColumn("日期", Format = "yyyy-MM-dd")]
public DateTime? Date { get; set; }
[ExcelColumn("金额", CellAlignment = HorizontalAlignment.Right)]
public decimal Amount { get; set; }
}- 保持兼容性: 确保新功能在所有支持的框架版本上正常工作
- 编写测试: 为新功能添加 xUnit 测试用例
- 更新文档: 在 README.md 中添加功能说明和示例代码
- 遵循 SemVer: 根据语义化版本规范更新版本号
- 单元测试: 使用 xUnit 编写测试
- 测试命名: 使用描述性的测试方法名,例如
Should_ExportCorrectly_When_ModelHasNullValues - 测试覆盖: 确保核心功能和边界情况都有测试覆盖
- 测试数据: 测试用例应包含中文字符测试,确保 Unicode 支持
- 大文件处理: 考虑大型 Excel 文件的内存使用
- 流式处理: 对于大数据集,优先使用流式处理
- 缓存机制: 合理使用缓存避免重复计算
建议使用约定式提交(Conventional Commits)格式:
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
类型:
feat: 新功能fix: 修复 bugdocs: 文档更新style: 代码格式调整(不影响功能)refactor: 重构代码test: 添加或修改测试chore: 构建过程或辅助工具的变动
示例:
feat: 支持自定义日期格式导出
fix: 修复空值导致的 NullReferenceException
docs: 更新 README 中的安装说明
- 标题: 简明扼要地描述变更内容
- 描述: 详细说明变更的原因、实现方式和影响
- 关联 Issue: 如果相关,使用
Closes #123关联 Issue - 测试: 说明如何测试变更
- Breaking Changes: 明确标注破坏性变更
项目使用语义化版本(Semantic Versioning):
- 主版本号 (Major): 不兼容的 API 变更
- 次版本号 (Minor): 向后兼容的功能新增
- 修订号 (Patch): 向后兼容的问题修正
当前版本: 2.0.2
- 更新版本号: 在
Chsword.Excel2Object.csproj中更新<Version>标签 - 更新 README: 在发布说明中添加版本更新内容
- 创建 Git Tag: 使用
v{version}格式,例如v2.0.3 - 自动发布: 推送 tag 后自动触发 NuGet 和 GitHub Release 发布
项目支持多个目标框架,编码时注意:
- 使用条件编译处理框架差异
- 避免使用特定框架独有的 API
- 针对不同框架的 API 差异提供兼容层
- NPOI 是项目的核心依赖,用于 Excel 文件操作
- 注意 NPOI 的版本兼容性
- 了解 NPOI 的内存管理,适当释放资源
- 确保所有功能正确处理中文字符
- 字符宽度计算需考虑全角/半角字符差异
- 日期格式支持中文格式(如"yyyy年MM月dd日")
我们欢迎各种形式的贡献:
- 报告 Bug: 提交详细的 Issue,包括重现步骤
- 功能建议: 在 Issue 或 Discussion 中讨论新功能
- 代码贡献: 提交 Pull Request,遵循上述规范
- 文档改进: 改进 README、示例代码和注释
- 项目主页: https://github.com/chsword/Excel2Object
- NuGet 包: https://www.nuget.org/packages/Chsword.Excel2Object
- NPOI 文档: https://github.com/tonyqus/npoi
- 问题讨论: http://www.cnblogs.com/chsword/p/excel2object.html
本项目采用 MIT 许可证。详见 LICENSE 文件。