如何获取word文档的总字符数,中文字符数和英文字符数
概述
Aspose.Words 并未提供直接返回文档中中文、英文字符数的 API。若要统计总字符数、中文字符数和英文字符数,需要先提取文档的可见文字,然后在代码中自行遍历字符并依据 Unicode 区间区分中文和英文。
实现思路
- 读取文档文本 – 使用 Aspose.Words 将 Word 文档加载后,获取文档的纯文本(不包括字段代码等隐藏内容)。
- 遍历字符并分类计数 – 对每个字符检查其 Unicode 码点:
- 中文字符:常见的 CJK 统一表意文字区段(如 0x4E00‑0x9FFF、0x3400‑0x4DBF 等)以及兼容区段。
- 英文字符:A‑Z、a‑z。
- 其余字符计入总数但不计入中文或英文。
- 输出结果 – 累计完毕后即可得到总字符数、中文字符数和英文字符数。
示例代码(C#)
using Aspose.Words;
// 1. 加载文档并获取文本
Document doc = new Document("Sample.docx");
string text = doc.GetText(); // 获取文档的可见文字
int total = 0, chinese = 0, english = 0;
foreach (char ch in text)
{
total++;
// 中文字符(常用 CJK 区段)
if ((ch >= 0x4E00 && ch <= 0x9FFF) ||
(ch >= 0x3400 && ch <= 0x4DBF) ||
(ch >= 0x20000 && ch <= 0x2A6DF) ||
(ch >= 0x2A700 && ch <= 0x2B73F) ||
(ch >= 0x2B740 && ch <= 0x2B81F) ||
(ch >= 0x2B820 && ch <= 0x2CEAF) ||
(ch >= 0xF900 && ch <= 0xFAFF) ||
(ch >= 0x2F800 && ch <= 0x2FA1F))
{
chinese++;
}
// 英文字符(A‑Z、a‑z)
else if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
{
english++;
}
}
Console.WriteLine($"总字符数: {total}");
Console.WriteLine($"中文字符数: {chinese}");
Console.WriteLine($"英文字符数: {english}");
注意事项
GetText()会返回文档中所有可见文字,若需要排除特定元素(如页眉、页脚),可遍历文档节点(如Run)并自行拼接文字。- 对于非常大的文档,逐节点处理可以降低一次性加载全部文本的内存占用。
- 上述 Unicode 区间是常用的中文字符范围,若有特殊需求(如统计全角标点、日文假名等),可自行扩展判断条件。