字数、字符数、段落数、行数和页数用于衡量 Word 文档的内容规模与排版结果:字数反映文本总量,字符数用于核算篇幅,段落数体现内容结构,行数与页数则与打印布局直接相关。在网页中完成这类统计时,把文件上传到服务端会增加一次传输,依赖桌面软件又难以接入自动化流程。
本文使用 Spire.Doc for JavaScript 在浏览器中读取上述统计值。整个过程基于 WebAssembly 在浏览器端运行,无需安装 Office,也不依赖任何后端,文件始终保留在用户的设备上。
本文介绍两个核心功能点:
有关安装和项目配置,请参考 React 项目中集成 Spire.Doc for JavaScript。下面的示例假定 Spire.Doc 已安装、WebAssembly 模块已初始化。
统计 Word 文档中的字数、字符数、段落数、行数和页数
统计 Word 文档中的字数、字符数、段落数、行数和页数,主要通过 Document.BuiltinDocumentProperties 读取文档的内置属性。该属性返回 BuiltinDocumentProperties 对象,各项统计值的对应关系如下:
| 属性 | 含义 |
|---|---|
BuiltinDocumentProperties.WordCount |
字数 |
BuiltinDocumentProperties.CharCount |
字符数(不计空格) |
BuiltinDocumentProperties.CharCountWithSpace |
字符数(计空格) |
BuiltinDocumentProperties.ParagraphCount |
段落数 |
BuiltinDocumentProperties.LinesCount |
行数 |
BuiltinDocumentProperties.PageCount |
页数 |
内置属性中的统计值来自文档自身保存的统计信息。对于新建文档,或者由其他工具生成、尚未写入统计信息的文档,字数、字符数和段落数可能为 0,因此示例在读取前调用 Document.UpdateWordCount() 重新统计这三项。行数与页数属于版面统计,UpdateWordCount() 不会重新计算,其取值取决于文档中已经保存的统计信息。
具体操作步骤如下:
- 获取 Spire.Doc 的 WASM 模块,确认已就绪。
- 读入示例文档与字体,创建
Document对象并加载该文件。 - 调用
Document.UpdateWordCount()重新统计字数、字符数与段落数。 - 通过
Document.BuiltinDocumentProperties读取各项统计值。 - 将统计结果整理为文本,保存为 TXT 文件并触发浏览器下载。
统计 Word 文档中的字数、字符数、段落数、行数和页数的代码如下:
function App() {
const countDocument = async () => {
// 获取 Spire.Doc WASM 模块
const docModule = window.wasmModule?.spiredoc;
// 检查模块是否就绪
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 载入示例文档与字体
await window.spire.FetchFileToVFS('示例文档.docx', "", `${process.env.PUBLIC_URL}/data/`);
await window.spire.FetchFileToVFS('ARIALUNI.TTF', "/Library/Fonts/", `${process.env.PUBLIC_URL}/font/`);
// 创建 Document 实例并加载文档
const doc = new docModule.Document();
doc.LoadFromFile('示例文档.docx');
// 重新统计字数、字符数与段落数
doc.UpdateWordCount();
// 获取内置文档属性
const properties = doc.BuiltinDocumentProperties;
// 读取各项统计值
const wordCount = properties.WordCount;
const charCount = properties.CharCount;
const charCountWithSpace = properties.CharCountWithSpace;
const paragraphCount = properties.ParagraphCount;
const lineCount = properties.LinesCount;
const pageCount = properties.PageCount;
// 汇总统计结果
const report = [
'字数: ' + wordCount,
'字符数(不计空格): ' + charCount,
'字符数(计空格): ' + charCountWithSpace,
'段落数: ' + paragraphCount,
'行数: ' + lineCount,
'页数: ' + pageCount,
].join('\r\n');
doc.Dispose();
// 将统计结果保存为 TXT 文件并触发下载
const outputFileName = '统计结果.txt';
const blob = new Blob([report], { type: 'text/plain;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>统计 Word 文档信息</h1>
<button onClick={countDocument}>
统计文档信息
</button>
</div>
);
}
export default App;
运行上述代码后,下载的「统计结果.txt」内容如下:

统计 Word 文档中指定段落的字数和字符数
统计 Word 文档中指定段落的字数和字符数,可以使用 Paragraph.WordCount、Paragraph.CharCount 与 Paragraph.CharCountIncludeSpace 三个属性。与整篇文档的内置属性不同,段落级的统计值由段落内容直接计算,读取前不需要额外更新文档统计。
| 属性 | 含义 |
|---|---|
Paragraph.WordCount |
当前段落的字数 |
Paragraph.CharCount |
当前段落不包含空格的字符数 |
Paragraph.CharCountIncludeSpace |
当前段落包含空格的字符数 |
具体操作步骤如下:
- 获取 Spire.Doc 的 WASM 模块,确认已就绪。
- 读入示例文档与字体,创建
Document对象并加载该文件。 - 通过
Document.Sections.get_Item(0).Paragraphs.get_Item(1)获取第 1 个节中的第 2 个段落。 - 通过
Paragraph.WordCount、Paragraph.CharCount与Paragraph.CharCountIncludeSpace读取该段落的统计值。 - 将统计结果整理为文本,保存为 TXT 文件并触发浏览器下载。
统计 Word 文档中指定段落的字数和字符数的代码如下:
function App() {
const countParagraph = async () => {
// 获取 Spire.Doc WASM 模块
const docModule = window.wasmModule?.spiredoc;
// 检查模块是否就绪
if (!docModule) {
alert('Spire.Doc is not ready yet');
return;
}
// 载入示例文档与字体
await window.spire.FetchFileToVFS('示例文档.docx', "", `${process.env.PUBLIC_URL}/data/`);
await window.spire.FetchFileToVFS('ARIALUNI.TTF', "/Library/Fonts/", `${process.env.PUBLIC_URL}/font/`);
// 创建 Document 实例并加载文档
const doc = new docModule.Document();
doc.LoadFromFile('示例文档.docx');
// 获取第 1 个节中的第 2 个段落(下标从 0 开始)
const paragraph = doc.Sections.get_Item(0).Paragraphs.get_Item(1);
// 读取该段落的字数与字符数
const wordCount = paragraph.WordCount;
const charCount = paragraph.CharCount;
const charCountIncludeSpace = paragraph.CharCountIncludeSpace;
// 汇总统计结果
const report = [
'字数: ' + wordCount,
'字符数(不计空格): ' + charCount,
'字符数(计空格): ' + charCountIncludeSpace,
].join('\r\n');
doc.Dispose();
// 将统计结果保存为 TXT 文件并触发下载
const outputFileName = '段落统计结果.txt';
const blob = new Blob([report], { type: 'text/plain;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = outputFileName;
a.click();
URL.revokeObjectURL(url);
};
return (
<div style={{ textAlign: 'center', height: '300px' }}>
<h1>统计指定段落信息</h1>
<button onClick={countParagraph}>
统计段落信息
</button>
</div>
);
}
export default App;
运行上述代码后,下载的「段落统计结果.txt」内容如下:

常见问题
统计出的字数或字符数为 0 是什么原因
内置属性中的统计值来自文档自身保存的统计信息。新建文档,或者由某些工具生成、没有写入统计信息的文档,读取到的字数、字符数和段落数可能为 0。示例在读取前调用 Document.UpdateWordCount(),按当前内容重新统计这三项;该调用用于更新统计值,不会修改文档正文。
行数或页数与 Word 中显示的不一致是什么原因
行数和页数属于版面统计,保存在文档的内置属性中,Document.UpdateWordCount() 不会重新计算这两项,因此返回的是文档中已经保存的值。文档内容编辑后尚未重新保存时,这些值可能停留在上一次的状态,与 Word 当前显示的结果不一致。需要核对时,可以在 Word 中查看「字数统计」对话框;对段落的字数与字符数,可以直接使用 Paragraph.WordCount 与 Paragraph.CharCount 读取。
字数与两种字符数有什么区别
WordCount 返回文档的字数;CharCount 返回不包含空格的字符数,CharCountWithSpace 返回包含空格的字符数,两者都包含标点符号。核算篇幅或排版容量时,通常以包含空格的字符数为准。
如何统计其他段落的字数和字符数
Sections.get_Item() 与 Paragraphs.get_Item() 的下标都从 0 开始。示例中的 Paragraphs.get_Item(1) 指向第 1 个节中的第 2 个段落,改为其他下标即可统计对应段落。读取前可以先检查 Paragraphs.Count,避免下标超出范围。
获取免费许可证
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。







