从Word宏返回PHP

时间:2011-03-09 20:10:28

标签: php windows ms-word ms-office

目标是获得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);

2 个答案:

答案 0 :(得分:1)

如果您可以读取doc文件的OLE流,则文档的准确wordcount应存储在SummaryInformation或DocumentSummaryInformation流中。我没有从.doc文件中读取属性的脚本,但是我确实有用于读取Excel xls文件的元属性的代码,这些代码可以很容易地进行调整。

修改

我刚刚检查过,它在SummaryInformation流中的属性ID为0x0F。

答案 1 :(得分:0)

为什么不简单地计算doc字符串中的空格数?或者我错过了什么?