Pek.Office 4.22.2026.419-beta0908
Pek.Office
Pek.Office 是一个面向 .NET 的办公文档处理库,当前仓库覆盖 Excel、Word、PowerPoint、PDF、Markdown、RTF、ODS、EML、MSG、iCalendar、vCard、EPUB、XPS 等常见办公与文档格式。
项目当前 NuGet 包名为 Pek.Office。由于历史兼容原因,公开 API 仍主要位于 NewLife.Office 命名空间,README 中涉及该命名空间的示例均以当前源码为准。
项目定位
- 面向服务端或工具侧的文档读写、导入导出与格式转换
- 基于文件格式本身实现,不依赖 Office 或 LibreOffice 进程自动化
- 同时支持 OpenXML/ZIP+XML 与 OLE2/CFB 旧二进制格式
- 提供统一入口 OfficeFactory,用于识别支持的文档类型并创建读取器
目标框架与依赖
- 目标框架:net45、netstandard2.0、netstandard2.1
- 运行时核心依赖:DH.NCore
- 测试框架:xUnit
安装示例:
dotnet add package Pek.Office
当前实现模块
Excel
- ExcelReader:读取 xlsx 工作簿、工作表行数据、对象集合、DataTable
- ExcelWriter:写入 xlsx,支持表头、数据行、样式、冻结窗格、自动筛选、数据验证、图片、页面设置、条件格式等常见能力
- ExcelTemplate:基于占位符执行模板填充
- BiffReader:读取 Excel 97-2003 的 xls 二进制文件
- BiffWriter:生成 Excel 97-2003 的 xls 文件,支持多工作表、对象集合和 DataTable 导出
Word
- WordReader / WordWriter:读写 docx
- WordTemplate:docx 模板占位符填充
- WordHtmlConverter:docx 转 HTML
- WordPdfConverter:docx 转 PDF,属于内容映射型转换,不依赖外部渲染引擎
- DocReader:读取 Word 97-2003 的 doc 文件,可提取全文、段落和表格
PowerPoint
- PptxReader / PptxWriter:读写 pptx
- PptxTemplate:pptx 模板填充
- PptReader:读取 PowerPoint 97-2003 的 ppt 文件,提取幻灯片文本
- PptxPdfConverter:pptx 转 PDF,当前按文本内容和版面顺序映射,不做像素级渲染
- PdfWriter / PdfReader / PdfDocument:基础 PDF 读写能力
- PdfFluentDocument:声明式 PDF 排版接口
- PdfEncryptor:PDF 加密与权限处理
Markdown
- MarkdownParser / MarkdownWriter:Markdown 解析与输出
- MarkdownHtmlConverter:Markdown 转 HTML
- MarkdownWordConverter:Markdown 转 Word
- MarkdownPdfConverter:Markdown 转 PDF
- MarkdownDocument:文档对象模型与快捷转换入口
RTF
- RtfDocument / RtfReader / RtfWriter:RTF 解析与写入
- 支持段落、表格、颜色、字体、图片提取与图片嵌入
- 支持基于 {{Key}} 的模板填充
ODS
- OdsReader / OdsWriter:读写 OpenDocument Spreadsheet
- 支持多工作表、对象映射、DataTable、基础单元格样式、合并区域读取
邮件与个人信息格式
- EmlReader / EmlWriter / EmlMessage:EML 邮件读写
- MsgReader:Outlook MSG 读取
- ICalReader / ICalWriter / ICalDocument:iCalendar 读写
- VCardReader / VCardWriter / VCardContact:vCard 读写
电子书与固定版式文档
- EpubReader / EpubWriter / EpubDocument:EPUB 2/3 读写
- XpsReader / XpsWriter:XPS 读写、文本提取、图片提取、元数据读写
基础容器与工厂
- CfbDocument / CfbReader:OLE2/CFB 容器解析与写入
- OfficeFactory:统一识别支持的扩展名并创建对应读取器
OfficeFactory 支持格式
当前 OfficeFactory 内置支持以下 15 种扩展名:
- .xlsx
- .xls
- .docx
- .doc
- .pptx
- .ppt
- .rtf
- .ods
- .epub
- .vcf
- .eml
- .ics
- .md
- .xps
说明:
- 对于 xlsx、xls、docx、doc、pptx、ppt、pdf,会返回对应 Reader 实例
- 对于 rtf、ods、epub、md,会直接返回解析后的文档对象或结果对象
- 对于 eml、ics、vcf、xps,会返回对应读取器实例,由调用方继续读取文件内容
快速开始
读取任意支持的文件
using NewLife.Office;
if (OfficeFactory.IsSupported(".xlsx"))
{
using var reader = (ExcelReader)OfficeFactory.CreateReader("demo.xlsx");
var rows = reader.ReadRows("Sheet1").ToList();
}
写入 xlsx
using System.Text;
using NewLife.Office;
using var ms = new MemoryStream();
var writer = new ExcelWriter(ms);
writer.WriteHeader("Data", ["编号", "姓名", "金额"], CellStyle.Header);
writer.WriteRow("Data", new Object?[] { 1, "张三", 1234.56m }, new CellStyle
{
Border = CellBorderStyle.Thin,
NumberFormat = "#,##0.00"
});
writer.FreezePane("Data", 1);
writer.SetAutoFilter("Data", "A1:C1");
writer.Save();
ms.Position = 0;
var reader = new ExcelReader(ms, Encoding.UTF8);
var rows = reader.ReadRows("Data").ToList();
写入 xls
using NewLife.Office;
using var writer = new BiffWriter();
writer.WriteHeader(["姓名", "年龄", "成绩"]);
writer.WriteRow(new Object?[] { "Alice", 28, 95.5 });
writer.WriteRow(new Object?[] { "Bob", 31, 88.0 });
writer.Save("data.xls");
docx 转 PDF
using NewLife.Office;
var converter = new WordPdfConverter();
converter.ConvertToFile("input.docx", "output.pdf");
pptx 转 PDF
using NewLife.Office;
var converter = new PptxPdfConverter
{
DocumentTitle = "演示文稿导出"
};
converter.Convert("slides.pptx", "slides.pdf");
能力概览
| 格式 | 读取 | 写入 | 模板 | 转换 | 说明 |
|---|---|---|---|---|---|
| Excel xlsx | ✅ | ✅ | ✅ | — | ExcelReader / ExcelWriter / ExcelTemplate |
| Excel xls | ✅ | ✅ | — | — | BiffReader / BiffWriter |
| Word docx | ✅ | ✅ | ✅ | HTML、PDF | WordReader / WordWriter / WordTemplate |
| Word doc | ✅ | — | — | — | DocReader |
| PowerPoint pptx | ✅ | ✅ | ✅ | PptxReader / PptxWriter / PptxTemplate / PptxPdfConverter | |
| PowerPoint ppt | ✅ | — | — | — | PptReader |
| ✅ | ✅ | — | — | PdfReader / PdfWriter / PdfFluentDocument | |
| Markdown | ✅ | ✅ | — | HTML、Word、PDF | Markdown 系列 |
| RTF | ✅ | ✅ | ✅ | — | RtfDocument / RtfWriter |
| ODS | ✅ | ✅ | — | — | OdsReader / OdsWriter |
| EML | ✅ | ✅ | — | — | EmlReader / EmlWriter |
| MSG | ✅ | — | — | — | MsgReader |
| iCalendar | ✅ | ✅ | — | — | ICalReader / ICalWriter |
| vCard | ✅ | ✅ | — | — | VCardReader / VCardWriter |
| EPUB | ✅ | ✅ | — | — | EpubReader / EpubWriter |
| XPS | ✅ | ✅ | — | — | XpsReader / XpsWriter |
目录结构
Pek.Office/
├── Calendar/
├── Epub/
├── Excel/
├── Mail/
├── Markdown/
├── Ods/
├── OLE2/
├── PDF/
├── PPT/
├── Rtf/
├── VCard/
├── Word/
├── Xps/
└── OfficeFactory.cs
测试覆盖
仓库已提供独立的 xUnit 测试项目,覆盖以下主要模块:
- ExcelReader / ExcelWriter / ExcelTemplate / BiffReader / BiffWriter
- CfbDocument、DocReader、PptReader
- Eml、Msg、ICal、VCard、Epub
- Markdown、Rtf、Ods、Xps
- WordHtmlConverter、WordPdfConverter、PptxPdfConverter
- OfficeFactory 集成测试
运行测试:
dotnet test XUnitTest/XUnitTest.csproj
已知边界
- WordPdfConverter 和 PptxPdfConverter 当前属于内容映射型转换,目标是稳定导出文本和基本结构,不追求 Office 原生渲染级还原
- WordPdfConverter.ConvertToImages 和 PptxPdfConverter.ConvertToImages 当前按设计抛出 NotSupportedException
- OfficeFactory.CreateReader 的返回值类型会随扩展名变化,调用方需要按具体格式进行转换或继续处理
适用场景
- 后台报表导出
- 文档批量导入导出
- 旧版 Office 二进制格式解析
- 邮件、日历、联系人、电子书等结构化文档处理
- 轻量级文档格式转换与内容提取
Showing the top 20 packages that depend on Pek.Office.
| Packages | Downloads |
|---|---|
|
Pek.NCube.Base
Web快速开发平台,搭建管理后台,灵活可扩展!内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块,在真实项目中经历过单表100亿数据添删改查的考验。
|
2 |
|
Pek.NCube.Base
Web快速开发平台,搭建管理后台,灵活可扩展!内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块,在真实项目中经历过单表100亿数据添删改查的考验。
|
1 |
| Version | Downloads | Last updated |
|---|---|---|
| 4.25.2026.915-beta0314 | 1 | 2026/9/21 |
| 4.22.2026.516-beta0902 | 1 | 2026/9/16 |
| 4.22.2026.516-beta0859 | 1 | 2026/9/16 |
| 4.22.2026.419-beta0908 | 1 | 2026/9/16 |
| 4.22.2026.419-beta0853 | 1 | 2026/9/16 |