目标是获得Microsoft Word文件的准确字数。我们有一台运行Apache和PHP的Windows服务器。在该计算机上运行的Web服务基本上获取文档的所有内容,并通过preg_match_all("/\S+/", $string, $matches); return count($matches[0]);
运行内容。效果很好,但它并不准确。所以我们编写了以下宏:
Sub GetWordCountBreakdown()
Dim x As Integer
Dim TotalWords As Long
Dim FieldWords As Long
TotalWords = ActiveDocument.ComputeStatistics(wdStatisticWords)
For x = 1 To ActiveDocument.Fields.Count
If ActiveDocument.Fields.Item(x).Result.ComputeStatistics(wdStatisticWords) > 25 Then
FieldWords = FieldWords + ActiveDocument.Fields.Item(x).Result.ComputeStatistics(wdStatisticWords)
End If
Next x
MsgBox (TotalWords & " - " & FieldWords & " = " & TotalWords - FieldWords)
End Sub`
当我在Word中运行这个宏时,它给了我一个整洁的小警报框,用于计算文档中的所有单词和引用。我不知道如何将这些值返回给PHP,因此我的web服务可以将它们传达给我。
更新:我能够在PHP中重写这个宏并获得正确的wordcount。基本上是:
$word = new COM("Word.Application")
$word->Documents->Open(file);
$wdStatisticWords = 0;
$wordcount = $word->ActiveDocument->ComputeStatistics($wdStatisticWords);
等
答案 0 :(得分:1)
如果您可以读取doc文件的OLE流,则文档的准确wordcount应存储在SummaryInformation或DocumentSummaryInformation流中。我没有从.doc文件中读取属性的脚本,但是我确实有用于读取Excel xls文件的元属性的代码,这些代码可以很容易地进行调整。
修改强>
我刚刚检查过,它在SummaryInformation流中的属性ID为0x0F。
答案 1 :(得分:0)
为什么不简单地计算doc字符串中的空格数?或者我错过了什么?