Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: работа с вордом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
startdreamer
Отправлено: 10 Августа, 2011 - 20:52:27
Post Id



Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




здравствуйте у меня есть документ ворд, и он уменя служит какбы бланком для сайта.
так вот, как мне можно сделать чтобы скрипт брал 1 документ ворд с сервера, затем изменял там некоторые слова, и сохрянял под другим именем, главное чтобы шаблон так же оставался неизменныим.
заранее спасибо
 
 Top
filkeith
Отправлено: 11 Августа, 2011 - 08:56:19
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




ну во первых такое будет работать только на виндовом сервере, на котором будет установлен офис. А вот про то как работать с ворд доками http://www[dot]inode[dot]ru/articles/php/2005-09-16/70
 
 Top
NVP
Отправлено: 11 Августа, 2011 - 14:53:23
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




По ссылке на JS, а на ПХП примерно так:
// Вызываем Ворд
$word = new COM("word.application") or die("Невозможно загрузить Word!");;
// Делаем что бы он был виден
$word->Visible = true;
// Открываем в Ворде документ
$doc = $word->Documents->open('путь к документу/contract.doc');
$word->Activate();
// Ищем в Вордовском шаблоне закладки (Меню:Вставка/Закладка
if ($word->ActiveDocument->Bookmarks->Exists("CONTRACT_NUMBER")) {
// Если искомая закладка надена, то
//отмечаем ее
$word->ActiveDocument->Bookmarks["CONTRACT_NUMBER"]->Select();
// заменяем выбранное на необходимый текст
$word->ActiveDocument->Bookmarks["CONTRACT_NUMBER"]->Range->Text = $this->input->post('number');
}
// Другая закладка...
if ($word->ActiveDocument->Bookmarks->Exists("CONTRACT_CONCLUDE")) {
$word->ActiveDocument->Bookmarks["CONTRACT_CONCLUDE"]->Select();
$word->ActiveDocument->Bookmarks["CONTRACT_CONCLUDE"]->Range->Text =
$this->contracts_model->convert_date($this->input->post('conclude'));
}
//и т.д.
// Если нужно вместо закладки вставить таблицу, то примерно так:
if ($word->ActiveDocument->Bookmarks->Exists("CLIENT_EQUIPMENT")) {
$word->ActiveDocument->Bookmarks["CLIENT_EQUIPMENT"]->Select();
$table = $doc->Tables->Add($word->Selection->Range, $result + 1, 4);
// рисуем Шапку
$table->Cell(1,1)->Range->Text = "Название оборудования";
// форматируем ее внешний вид
$table->Cell(1,1)->Range->Bold = True;
$table->Cell(1,1)->Range->ParagraphFormat->Alignment = 1; // 0= Left, 1=Center, 2=Right
$table->Cell(1,1)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,2)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,2)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,2)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,2)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,3)->Range->Text = "Количество";
$table->Cell(1,3)->Range->Bold = True;
$table->Cell(1,3)->Range->ParagraphFormat->Alignment = 1; // 0= Left, 1=Center, 2=Right
$table->Cell(1,3)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,3)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,3)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,3)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,4)->Range->Text = "Ед. измерения";
$table->Cell(1,4)->Range->Bold = True;
$table->Cell(1,4)->Range->ParagraphFormat->Alignment = 1; // 0= Left, 1=Center, 2=Right
$table->Cell(1,4)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,4)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,4)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,4)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
// Вставляем данные
$i=1;
foreach($cur_equipment as $item):
$table->Cell($i+1,1)->Range->Text = "Еще чегг-то";
$table->Cell($i+1,1)->Range->ParagraphFormat->Alignment = 0; // 0= Left, 1=Center, 2=Right
// -1, либо -2, -3, -4, что соответственно означает - верхний, левый, правый, нижний бордер
$table->Cell($i+1,1)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,1)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,1)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,1)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,2)->Range->Text = $item['name_e']; // можно из массива
$table->Cell($i+1,2)->Range->ParagraphFormat->Alignment = 0; // 0= Left, 1=Center, 2=Right
$table->Cell($i+1,2)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,2)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,2)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,2)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,3)->Range->Text = sprintf('%.3f',$item['amount']);
$table->Cell($i+1,3)->Range->ParagraphFormat->Alignment = 2; // 0= Left, 1=Center, 2=Right
$table->Cell($i+1,3)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,3)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,3)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,3)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,4)->Range->Text = $item['legend'];
$table->Cell($i+1,4)->Range->ParagraphFormat->Alignment = 1; // 0= Left, 1=Center, 2=Right
$table->Cell($i+1,4)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,4)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,4)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell($i+1,4)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;
$i++;
endforeach;
}
$filename = "c:/TEMP/temp.doc";
// сохраняем в указанній файл
$word->ActiveDocument->SaveAs($filename);

Пример рабочий.

(Отредактировано автором: 11 Августа, 2011 - 14:58:18)

 
 Top
Александр Щ
Отправлено: 11 Ноября, 2011 - 07:28:14
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Добрый день! Очень хороший пример.
Вопрос 1: в этом примере мы отрисовываем каждую ячейку с четырёх сторон:
$table->Cell(1,1)->Borders->Item(-1)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-2)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-3)->LineStyle=$word->Options->DefaultBorderLineStyle;
$table->Cell(1,1)->Borders->Item(-4)->LineStyle=$word->Options->DefaultBorderLineStyle;

А если ячеек очень много. Можно задать параметры бордюра один раз для всей таблицы?

Вопрос 2: Очень интересует вопрос: как объединять ячейки в таблице? Аналогично PHP: colspan, rowspan.
И ещё какими командами можно управлять парметрами страницы (Рзамер бумаги, Портрет-Альбом)?
Спасибо!
(Добавление)
Уже нашёл:
Объединение ячеек:

$rangeStart = $WTable->Cell(1,1);
$myRangeStart = $rangeStart->Range->Start();
$rangeEnd = $WTable->Cell(1,2);
$myRangeEnd = $rangeEnd->Range->End();
$myRange = $Wrd->ActiveDocument->Range($myRangeStart,$myRangeEnd);
$myRange->Cells->Merge();

Осталось разобраться как развернуть страницу из Portrait в Landscape.

(Отредактировано автором: 11 Ноября, 2011 - 08:14:06)

 
 Top
Александр Щ
Отправлено: 11 Ноября, 2011 - 10:58:04
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Разобрался:
$Wrd->Selection->Pagesetup->Orientation = 1;
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB