Как создавать документы Microsoft Office при помощи PHP

Original author: Justin Silverton
  • Translation
Есть два основных способа построить Excel, Word, и PowerPoint используя PHP. Первый — используя библиотеку COM (только под Windows сервером) и другой — используя более стандартизированные форматы, такие как CSV и HTML.

Динамической создание Word документа:


<?php
$word = new COM("word.application");

$word->Visible = 0;
$word->Documents->Add();
$word->Selection->PageSetup->LeftMargin = '2"';
$word->Selection->PageSetup->RightMargin = '2"';

//Setup the font
$word->Selection->Font->Name = 'Verdana';
$word->Selection->Font->Size = 8;

//Write some text
$word->Selection->TypeText("This is a test document");
//Save the document as DOC file
$word->Documents[1]->SaveAs("c:\\docs\\test1.doc");

//quit and release COM resources
$word->quit();
$word->Release();
$word = null;

?>


Динамическое создание Excel документа:


<?php
$excel = new COM("excel.application");
$excel->Visible = 0;

//Create a new workbook
$wkb = $excel->Workbooks->Add();
$sheet = $wkb->Worksheets(1);

//This code adds the text 'myvalue' on row 2, column 4
$sheet->activate;
$cell = $sheet->Cells(2,4);
$cell->Activate;
$cell->value = 'myvalue';

$wkb->SaveAs("C:\docs\test.xls");

//close and free resources
$wkb->Close(false);
$excel->Workbooks->Close();
$excel->Quit();
?>

Динамическое создание презентации Powerpoint


<?php
$powerpnt = new COM("powerpoint.application");
//Creating a new presentation
$pres=$powerpnt->Presentations->Add();
//Adds the first slide. "12" means blank slide
$pres->Slides->Add(1,12);
//Adds another slide. "10" means a slide with a clipart and text
$pres->Slides->Add(2,10);
//Adds a textbox
$pres->Slides[1]->Shapes->AddTextbox(1,20,50,300,40);
//Save the document as PPT file
$powerpnt->Presentations[1]->SaveAs("C:\Docs\test1.ppt");

//free resources and quit powerpoint
$powerpnt->quit();
?>


Как найти функции Word, Excel, и Powerpoint


Текст далее рассказывает как найти функции работы с Microsoft Office components из-под PHP:

  1. Откройте Microsoft Word, Excel, или Powerpoint
  2. Нажмите Alt+F11 для того, что бы начать Visual Basic Editor
  3. Нажмите F2
  4. Найдите «ThisDocument» слева. В правом фрейме вы увидите возможные переменные и функции, которые могут быть использованы для COM объекта

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 46

    –2
    скорей под кат !
    habracut
      0
      Спасиб, что не начал минусовать ;)
      +6
      Не очень красиво. Для случая с Excel рекомендую посмотреть на:
      PEAR Spreadsheet_Excel_Writer
      PHPExcelReader

      И никаких COM'ов HTML или CSV ;)

      С MSWORD конечно плачевнее, но отдавать html с соответствующим content-type'ом не считаю зазорным :) Если кто знает как прочитать WORD "качественно", а главное бесплатно - буду благодарен :)

      С презентацией же пока не вижу практической выгоды :)
        0
        Забыл добавить, что на крайний случай есть OpenDocument, но он не очень подходит под условия задачи ;)
          0
          Опередили меня. Я только написал про XML-форматы.
          0
          С MSWORD не так плачевно кстати. Во-первых есть формат rtf, а также xml-форматы. Это позволит все-таки как-то работать с документами без COM.
            0
            Мне нравиться, что статью обсуждают, как мою. но это ж перевод :) Я б тоже работал через XML или RTF
              0
              Почему нет. Всегда готов что-то про PHP пообсуждать.
                0
                :)
                давайте обсудим, как из php отправить xml на url по post, с авторизацией.
                как раз рою интернет в поисках решения.
                спасибо
                0
                тогда к вам вопрос (извините за оффтоп, написал бы в "личку" но для "незнакомых" такого понятия на хабре не существует к сжалению, а вопрос очень важен для меня) - разумно ли передовать переменные в пользовательскую функци в виде ассоциативного массива? :)
                  0
                  Все зависит от ситуации. Вообще советую избегать ассоциативных массивов, они дольше обрабатываются.
                    0
                    Они одинаково обрабатываются, php (в отличии, например, от perl) не различает хеши и массивы.
                      0
                      Не одинаково. От меня чуть позже тест.
                        0
                        http://blog.zavoruev.ru/associativnye-ma…
                        Обрабатываются не одинаково, передаются конечно одинаково. Разумно использовать или нет? Конечно разумно там где это нужно.
              0
              PEAR Spreadsheet_Excel_Writer использовал...Классный набор классов!
                +1
                Spreadsheet_Excel_Writer — сосёт.
                Не умеет работать с русскоязычными текстовыми полями длиной более 255 символов.
                Не умеет работать с большими (более 7 мег) файлами.

                Для генерации более-менее нормального файла пришлось портировать последний перловый Spreadsheet::Excel::Writer. Вот он работает по-человечески.
                  0
                  1-он у меня с грузинским рабтал(UTF-8)..Неужели не пашет с русским!?
                  2-да правда,больше каких то размеров(зависит от операционки) он глохнет,но это можно обойти;)(у меня стояла Suse 10)на BugTracker-e PEAR я отписялся,как я это сделал(юзер purs)
                  http://pear.php.net/bugs/bug.php?id=2942
                  грубо говоря проблема появлялась при смене кодировок и решалась этой же сменой,но при этом с последующим возвращением к кодировке "по-умолчанию"..
                    0
                    «1-он у меня с грузинским рабтал(UTF-8)..»
                    На данных какого объёма?

                    По поводу http://pear.php.net/bugs/bug.php?id=2942
                    А тут fullstack всё правильно написал — кривой BiffWriter 5ой версии. И для нормальной работы там надо изрядно переписать, чтоб писался корректный Biff7/8
                    0
                    А еще Spreadsheet_Excel_Writer криво работает с объединением ячеек.
                    Я вообще не нашел под юниксы библиотек, которые бы нормально работали с объединением.
                      0
                      мм..незнаю,вроде использовал функцию mergeCells и не жаловался..Хотя у вас может не сработала специфика по версиям..(там гарантируют,что должно работать под Excel97/2000)
                        0
                        со сложным объединением были траблы по крайней мере в 2000.
                        0
                        А оригинальный перловый http://search.cpan.org/dist/Spreadsheet-… ?
                          0
                          не. времени на эксперименты такого рода не было.

                          я вообще думаю что от вещей типа Spreadsheet_Excel_Writer и ей подобных
                          можно ожидать более-менее нормальной поддержки простых структур, но не сложных.

                          для полноценной работы с Excel вне самого Excel и Office должно быть что-то типа
                          SpreadsheetML, но попроще :) и поддерживаемое всеми версиями MS Office
                      0
                      Привет! Мне нужна помощ срочно!!! Надо написать код в PHP, который обробатывает файл *.ppt (PowerPoint слайд) и конвертирует каждый слайд на рисунок (JPEG файл). Если кто можеть, помогите плизззззз....
                      +2
                      Значительно ценнее было бы, если статья включала способы чтения и генерации таких документов под Linux. Поскольку использование php в коммерческих целях на одном компьютере с MS Office практически не встречается (лично я ни разу не видел).
                        0
                        Автор же по видимому видел ;)
                        • UFO just landed and posted this here
                            0
                            Я бы тоже посмотрел. Но все бывает. Эмули и прочь. Хотя ИМХО вообще лучше использовать *.rtf
                        • UFO just landed and posted this here
                            0
                            у меня такой сервер. жизнь заставит, и не такое придумаешь :)
                            0
                            спасибо огромное, пусть даже и перевод, но всё равно бесконечно полезно.
                            я как раз скоро именно с такой задачей буду сталкиваться, как раз в среде win2003+IIS+php
                            век живи — век учись, называется.
                              +1
                              Совершенно бесполезная штука. Ибо 90% хостеров — это не виндовс.
                              Гораздо легче найти решения через PEAR или другие публичные библиотеки.
                                0
                                Ну для Excel библиотеки есть, но вот для Word и PowerPoint увы...
                                0
                                в качестве экспорта в эксель удобно использовать простой XML
                                конечно же при условии сухого форматирования и отсутствия наворотов
                                  0
                                  А нужны ли библиотеки и COM? Начиная с Office 2003, и Word, и Excel поддерживают WordML и SpreadsheetML соответственно, которые являются подмножествами XML.
                                    0
                                    Мы использовали другую модель. Собственный модуль отчетов в Web и формирование документа в Excel при помощи VBS+JS на машине пользователя. Принцип тот же что и в примере, но нет зависимости от типа сервера. При этом можно реализовать любые навороты по форматированию и т.д. Pear пробовали, но к сожалению не прошел по техническим требованиям.
                                      0
                                      Все бы хорошо, но вот незадача - у пользователя вообще не может быть офиса или стоять только читалки документов (я работал в организации где было именно так).
                                        0
                                        У нас в постановке задаче оговоренно наличие.
                                      0
                                      вчера на dzone.com нечто подобное проскакивало :)
                                        +1
                                        Открываем старые истины. Лучше бы вы кросс-платформенную библиотеку по созданию этих файлов под Linux и Windows описали.
                                          0
                                          http://www.codeplex.com/PHPExcel
                                            0
                                            На мой взгляд отличное решение для Word документов.
                                            Можно работать с любой платформы, поскольку нет заморочек с COM.
                                            PhpRtf Lite is a free PHP class library
                                              0
                                              вот собственно и есть ответ на вопрос о работе с word из php. спасибо за ссылку
                                            0
                                            А существуют библиотеки для работы с BIFF4 (Excel) на PHP в природе или нет не под Windows?

                                            Only users with full accounts can post comments. Log in, please.