2011-03-09 62 views
0

目的是爲Microsoft Word文件獲取準確的字數。我們有一臺運行Apache和PHP的Windows服務器。在該機器上運行的Web服務基本上獲取文檔的所有內容,並通過preg_match_all("/\S+/", $string, $matches); return count($matches[0]);運行內容。工作得很好,但它並不準確。因此,我們寫了下面的宏:將事情從Word宏返回到PHP

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

爲什麼就不能指望的空間在文檔字符串的數字?或者我錯過了什麼?

+0

此外,爲什麼您當前的系統不正確? – JakeSteam 2011-03-09 20:30:11

+0

我只想在主文檔中使用文本,而不是任何註釋或腳註。如果我做'$ content = $ word-> ActiveDocument-> Content;'來獲取文檔的內容,它會將所有東西都看作一個長字符串,因此是不正確的。 – Vic 2011-03-09 20:43:16

1

如果您可以讀取doc文件的OLE流,則應該將文檔的準確wordcount存儲在SummaryInformation或DocumentSummaryInformation流中。我沒有一個從.doc文件讀取屬性的腳本,但我確實有讀取可以很容易地進行調整的Excel xls文件的metaproperties的代碼。

編輯

我剛剛檢查,這是物業編號爲0x0F的的SummaryInformation流。