2011-03-09 3 views
0

목적은 Microsoft Word 파일의 정확한 단어 수를 얻는 것입니다. Apache와 PHP를 실행하는 Windows 서버가 있습니다. 기본적으로 문서의 모든 내용을 가져와 preg_match_all("/\S+/", $string, $matches); return count($matches[0]);을 통해 내용을 실행하는 웹 서비스가 해당 컴퓨터에서 실행됩니다. 잘 작동하지만 정확하지 않습니다. 내가 Word에서이 매크로를 실행하면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` 

,이 문서에있는 모든 단어와 참조를 카운트 나에게 깔끔한 작은 경고 상자를 제공합니다 : 그래서 우리는 다음과 같은 매크로를 썼다. 나는 PHP로 그 값을 반환하는 방법을 잘 모르겠다. 그래서 나의 webservice는 그것들을 다시 나에게 전달할 수있다.

업데이트 : 나는이 매크로를 PHP로 다시 작성하고 올바른 단어 수를 얻을 수있었습니다. 기본적으로 :

$word = new COM("Word.Application") 
$word->Documents->Open(file); 
$wdStatisticWords = 0; 
$wordcount = $word->ActiveDocument->ComputeStatistics($wdStatisticWords); 

답변

0

왜 단순히 문서화 문자열에 공백의 수를 계산? 또는 나는 무엇인가 놓치고 있냐?

+0

또한 현재 시스템이 정확하지 않은 이유는 무엇입니까? – JakeSteam

+0

필자는 주요 문서의 텍스트 만 원하고 머리글이나 각주는 필요하지 않습니다. 만약 내가'$ content = $ word-> ActiveDocument-> Content;를하면 문서의 내용을 얻기 위해 모든 문자열이 하나의 긴 문자열로 주어 지므로 올바르지 않습니다. – Vic

1

doc 파일의 OLE 스트림을 읽을 수 있으면 문서의 정확한 단어 수를 SummaryInformation 또는 DocumentSummaryInformation 스트림에 저장해야합니다. .doc 파일에서 속성을 읽는 스크립트가 없지만 상당히 쉽게 적용 할 수있는 Excel xls 파일의 메타 속성을 읽는 코드가 있습니다.

편집

난 그냥 확인했습니다, 그리고 그것은 SummaryInformation 스트림에 속성 ID 0x0F의를합니다.