# OpenXmlTools
**Repository Path**: lovelydouble/open-xml-tools
## Basic Information
- **Project Name**: OpenXmlTools
- **Description**: 基于OpenXml封装的一套处理Word文本、书签、表格、字体等的工具类库
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-09-02
- **Last Updated**: 2025-11-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OpenXmlTools
## 介绍
OpenXmlTools 是一个基于 [OpenXML SDK](https://github.com/OfficeDev/Open-XML-SDK) 封装的 .NET 类库,专门用于处理 Word 文档。该工具库提供了丰富的 API 来简化 Word 文档的创建、编辑和格式化操作,包括文本替换、书签处理、表格操作(样式设置、合并单元格、锁定内容)、字体控制、段落对齐等功能,大大提升了 OpenXML 的使用效率。
## 软件架构
- 基于 .NET Standard 2.0/2.1 和 .NET Framework 4.72/4.8 构建
- 使用 C# 8.0 语言特性
- 依赖 DocumentFormat.OpenXml 3.3.0
- 支持跨平台使用(Windows、Linux、macOS)
## 功能特性
- **文本处理**:支持精确的文本查找和替换,包括跨 Run 元素的文本替换
- **书签操作**:通过书签名称快速定位并替换内容
- **表格操作**:
- 动态填充表格数据
- 合并单元格
- 设置边框样式
- 控制对齐方式(水平和垂直)
- 设置字体格式
- 锁定表格内容防止编辑
- **文档生成**:提供 WordDocumentBuilder 静态类,支持创建段落、标题、表格、图片、超链接等元素
- **文档比较**:内置 WordDocumentComparer 工具,可比较两个 Word 文档的差异
- **样式控制**:支持设置字体、字号、加粗、斜体等格式
## 安装教程
### NuGet 包管理器
```powershell
Install-Package OpenXmlTools
```
### .NET CLI
```bash
dotnet add package OpenXmlTools
```
### PackageReference
```xml
```
## 使用说明
### 1. 基本文本替换
```csharp
using OpenXmlTools.OpenXML;
using System.Collections.Generic;
using System.IO;
// 准备替换字典
var replacements = new Dictionary
{
{ "姓名", "张三" },
{ "日期", "2025-01-01" }
};
// 读取模板文件
using var fileStream = File.OpenRead("template.docx");
// 执行文本替换
var resultStream = OpenXMLWordHelper.WriteData(fileStream, replacements);
// 保存结果
using var outputFile = File.Create("output.docx");
resultStream.CopyTo(outputFile);
```
### 2. 表格数据填充
```csharp
using OpenXmlTools.OpenXML;
using OpenXmlTools.OpenXML.Word;
using System.Collections.Generic;
// 准备表格数据
var tablesData = new Dictionary>>
{
{
"0", // 表格索引(从0开始)
new List>
{
new List { "产品名称", "数量", "单价" },
new List { "产品A", "10", "¥100" },
new List { "产品B", "5", "¥200" }
}
}
};
// 读取模板文件
using var fileStream = File.OpenRead("template.docx");
// 填充表格数据
var resultStream = OpenXMLWordHelper.WriteData(fileStream, tablesData);
// 保存结果
using var outputFile = File.Create("output.docx");
resultStream.CopyTo(outputFile);
```
### 3. 表格单元格合并
```csharp
using OpenXmlTools.OpenXML;
using OpenXmlTools.OpenXML.Word;
using System.Collections.Generic;
// 准备表格数据和合并区域
var wordTables = new List
{
new WordTable
{
TableIdentifier = "0", // 表格索引
TableDatas = new List>
{
new List { "项目", "子项目", "描述" },
new List { "项目A", "子项目1", "描述1" },
new List { "项目A", "子项目2", "描述2" },
new List { "项目B", "子项目3", "描述3" }
},
MergeRegions = new List<(int startRow, int startCol, int endRow, int endCol)>
{
// 合并第2-3行的第一列
(1,2,0,0)
}
}
};
// 读取模板文件
using var fileStream = File.OpenRead("template.docx");
// 填充表格数据并合并单元格
var resultStream = OpenXMLWordHelper.WriteData(fileStream, wordTables);
// 保存结果
using var outputFile = File.Create("output.docx");
resultStream.CopyTo(outputFile);
```
### 4. 书签内容替换
```csharp
using OpenXmlTools.OpenXML.Word;
using System.Collections.Generic;
using System.IO;
// 准备书签替换字典
var bookmarks = new Dictionary
{
{ "BookmarkName1", "替换内容1" },
{ "BookmarkName2", "替换内容2" }
};
// 读取模板文件
using var fileStream = File.OpenRead("template.docx");
// 替换书签内容
var resultStream = WordBookmarkHelper.ReplaceDocumentBookmarks(fileStream, bookmarks);
// 保存结果
using var outputFile = File.Create("output.docx");
resultStream.CopyTo(outputFile);
```
### 5. 创建新的 Word 文档
```csharp
using OpenXmlTools.OpenXML.Word;
using DocumentFormat.OpenXml.Wordprocessing;
using System.IO;
// 创建文档流
using var stream = new MemoryStream();
// 创建 Word 文档
var document = WordDocumentBuilder.CreateWordDocument(stream);
var body = document.MainDocumentPart.Document.Body;
// 添加段落
WordDocumentBuilder.AddParagraph(body, "这是一个段落", isBold: true);
// 添加标题
WordDocumentBuilder.AddHeading(body, "这是标题", 1);
// 添加表格
var tableData = new List>
{
new List { "列1", "列2", "列3" },
new List { "数据1", "数据2", "数据3" }
};
WordDocumentBuilder.AddTable(body, tableData);
// 保存文档
document.Save();
// 保存到文件
using var outputFile = File.Create("new_document.docx");
stream.Position = 0;
stream.CopyTo(outputFile);
```
### 6. 比较两个 Word 文档
```csharp
using OpenXmlTools.OpenXML.Word;
using System.IO;
// 读取两个要比较的文档
using var doc1Stream = File.OpenRead("document1.docx");
using var doc2Stream = File.OpenRead("document2.docx");
// 比较文档
var comparisonResult = WordDocumentComparer.CompareWordDocuments(doc1Stream, doc2Stream);
// 保存比较结果
using var outputFile = File.Create("comparison_result.docx");
comparisonResult.CopyTo(outputFile);
```
## API 参考
### 主要类和方法
#### OpenXMLWordHelper
- `WriteData()`: 填充 Word 文档中的文本和表格数据
- `WriteDataAndLockTables()`: 填充数据并锁定表格内容
#### WordBookmarkHelper
- `ReplaceDocumentBookmarks()`: 替换文档中的书签内容
#### WordTextHelper
- `ReplaceText()`: 替换文档中的文本
- `AdvancedReplaceText()`: 支持正则表达式的高级文本替换
#### WordTableHelper
- `FillTables()`: 填充表格数据
- `CreateTableWithData()`: 创建带数据的表格
#### WordTableMergeHelper
- `BatchMergeCells()`: 批量合并单元格
#### WordTableLocker
- `LockTable()`: 锁定表格内容
- `LockTables()`: 批量锁定表格内容
#### WordDocumentBuilder
- `CreateWordDocument()`: 创建新的 Word 文档
- `AddParagraph()`: 添加段落
- `AddHeading()`: 添加标题
- `AddTable()`: 添加表格
- `AddImage()`: 添加图片
- `AddHyperlink()`: 添加超链接
#### WordDocumentComparer
- `CompareWordDocuments()`: 比较两个 Word 文档
## 支持的平台
- .NET Framework 4.72
- .NET Framework 4.8
- .NET Standard 2.0
- .NET Standard 2.1
## 参与贡献
1. Fork 本仓库
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启一个 Pull Request
## 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情