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

Тема в разделе ".:: Готовые решения", создана пользователем Ramazan, 30 окт 2008.

Статус темы:
Закрыта.
  1. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    Вообщем меня много раз спрашивают, как прочитать документ 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);
    ?>

     
    duomax, Black#FFFFFF и mrr нравится это.
  2. JorJ

    JorJ Постоялец

    Регистр.:
    20 авг 2007
    Сообщения:
    58
    Симпатии:
    38
    Вопрос возник, а как можно прочитать из документа doc например первые три строчки текста?
     
  3. triode-master

    triode-master Постоялец

    Регистр.:
    23 апр 2007
    Сообщения:
    123
    Симпатии:
    17
    Хех супер!
    А есть ссылки где можно подробнее почитать.
    Ведь так я думаю и информацию на сайте можно размещать.
     
  4. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    ОДИН ОТВЕТ НА ДВА ВОПРОСА, ТЕКС ПРИ ЧТЕНИИ ВЫВОДИТЬСЯ БЕЗ ТЕГОВ ФОРМАТИРОВАНИЯ, Т.К. у MS WOED СВОИ тэги

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

    PHP:
    $doc->ActiveDocument->Content str_replace("\n""<br>"$doc->ActiveDocument->Content);
    Сам не пробовал, не уверен что получится
     
  5. General Fizz

    General Fizz Боевой Генерал :)

    Регистр.:
    11 апр 2007
    Сообщения:
    753
    Симпатии:
    396
    А класс СОМ он встроен, или нужно подключать отдельную библиотеку и какую?
     
  6. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    Да вроде встроен, у меня стоит базовый Denwer, ничего дополнительно не подключал.

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

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Всё бы здорово.. Но - это работает только под виндой.

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

    2triode-master
    http://ru2.php.net/com


    пс. тема для тех, кто не ищет.. ибо пхп на пхп.нет есть.
     
  8. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    Хех, ну я не видел ещё WORD под Linux
     
  9. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Проблема не в ворде, про который я кстати написал.

    Проблема в том, что под линем нет комов)
    Это изобретение M$
     
  10. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    174
    Симпатии:
    107
    :)

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