Работаем с документами типа WORD

Статус
В этой теме нельзя размещать новые ответы.

Ramazan

пыщ-пыщ
Регистрация
28 Янв 2007
Сообщения
470
Реакции
101
Вообщем меня много раз спрашивают, как прочитать документ word и узнать скока он весит, т.к. люди слабо владеют php, и не знают что есть класс COM.

Итак приступим

1. Присвоим переменной $doc свойства класса COM

PHP:
$doc = new COM("word.application");

word.application - задаём классу параметры с какими мы хотим работать, тут может быть всё что угодно, вплоть до работы с *.exe, мы рассмотрим простой пример с документом типа WORD

2. Дабы в процессе работы не запускался сам WORD, стаим параметры visible = 0
PHP:
$doc->visible = 0;

3. Порабы уже создать документ
PHP:
$doc->Documents->Add();

4. Далее можно проявить фантазию, и установить некоторые параметры, типа:

PHP:
$doc->Selection->Font->Name = 'Tahoma';

вообще параметром $doc->Selection->, особо не стоит баловаться, у меня лично при неправильном выставлении параметров слетал apache.

5. Добавим текст в наш документ
PHP:
$doc->Selection->TypeText("ПРИВЕТ NWS");

6. Сохраняем документ
PHP:
$doc->Documents[1]->SaveAs("C:\абсолютный путь\test.doc");

7. Обязательно надо в конце добавить:
PHP:
$doc->quit();
unset($doc)

для того, что-бы наооборот прочитать документ надо
прописать следующее:
PHP:
<?php
$doc = new COM("word.application");
$doc->Documents->Open("C:\абсолютный путь\документ.doc");

echo $doc->ActiveDocument->Content;

$doc->ActiveDocument->Close(false);

$doc->Quit();
unset($doc);
?>
 
Вопрос возник, а как можно прочитать из документа doc например первые три строчки текста?
 
Хех супер!
А есть ссылки где можно подробнее почитать.
Ведь так я думаю и информацию на сайте можно размещать.
 
ОДИН ОТВЕТ НА ДВА ВОПРОСА, ТЕКС ПРИ ЧТЕНИИ ВЫВОДИТЬСЯ БЕЗ ТЕГОВ ФОРМАТИРОВАНИЯ, Т.К. у MS WOED СВОИ тэги

ХОТЯ В ПЕРВОМ СЛУЧАЕ МОЖНО

PHP:
$doc->ActiveDocument->Content = str_replace("\n", "<br>", $doc->ActiveDocument->Content);

Сам не пробовал, не уверен что получится
 
А класс СОМ он встроен, или нужно подключать отдельную библиотеку и какую?
 
А класс СОМ он встроен, или нужно подключать отдельную библиотеку и какую?

Да вроде встроен, у меня стоит базовый Denwer, ничего дополнительно не подключал.

Вообще COM класс он не тока для WORD и тому подобной дряни, можно рабоать со многими программами, главное знать нужные свойства.
 
Всё бы здорово.. Но - это работает только под виндой.

2JorJ
PHP:
 print_r( ecplode( "\n", $doc->ActiveDocument->Content ) );
Проблемы нет..

2triode-master
Для просмотра ссылки Войди или Зарегистрируйся


пс. тема для тех, кто не ищет.. ибо пхп на пхп.нет есть.
 
Проблема не в ворде, про который я кстати написал.

Проблема в том, что под линем нет комов)
Это изобретение M$
 
:)

Да. По поводу win - интересно. Спс.
По поводу lin сводим к следующему:
документ ворд сохраняем в xml формате, документ эксель - в csv.
Далее задача сводится к типовой простейшей.
Для xml word: Разбор дерева xml и извлечение данных. Либо формирование специфического дерева xml, который word потом примет за свое детище. Благо таких готовых классов уже навалом даже на Для просмотра ссылки Войди или Зарегистрируйся в поиске.
И если даже начинать с "0", средств для работы с xml в php море: и domit, объеденяющая в себе sax + dom, и SimpleXML с очень "легким" и понятным апи идущая в стандартной поставке php5 и т.д. и т.п.).
CSV экселя еще элементарнее. Парсеров csv давно уже вагон и маленькая тележка.
А сколько "весит" документ можно узнать и так:
PHP:
$size = filesize('./example.doc');
Говорю не по наслышке: в свое время пришлось написать парсер под линь, который занимался выполнением занудной трудоемкой работы по формированию отчетов на основании выборочных данных десятков документов ворд и эксель вместе взятых, и заполнением бланков к ним. Но, опять же "но", для этого пхп изначально и не задумывался, здесь гораздо лучше справляются детища мелкомягких: vb script или vicual C например, либо что-то можно "налабать" на делфях. Все используют одну и ту же ole объектную структуру, то есть сам ворд и расскажет все нужное о своем документе:)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху