Возврат вещей в PHP из макроса Word - PullRequest
0 голосов
/ 09 марта 2011

Цель состоит в том, чтобы получить точное количество слов для файла Microsoft Word. У нас есть сервер Windows, на котором работает Apache и PHP. На этом компьютере запущена веб-служба, которая в основном получает все содержимое документа и пропускает содержимое через 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, чтобы мой веб-сервис мог передать их мне.

Обновление: Мне удалось просто переписать этот макрос в PHP и получить правильный счетчик слов. В основном:

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

и т.д.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Если вы можете прочитать потоки OLE для файла doc, точный счетчик слов для документа должен быть сохранен в потоке SummaryInformation или DocumentSummaryInformation. У меня нет сценария, который считывает свойства из файлов .doc, но у меня есть код для чтения мета-свойств файлов Excel xls, который можно легко адаптировать.

EDIT

Я только что проверил, и это свойство id 0x0F в потоке SummaryInformation.

0 голосов
/ 09 марта 2011

Почему бы просто не посчитать количество пробелов в строке документа?Или я что-то упустил?

...