Основная цель: создание документов (с таблицами) в Microsoft Word с использованием PHP.
Обнаружена критическая проблема: вызов:
$document->Range->Find->Execute( ... ); // causes ERROR.
Я получаю информацию о: строке, файле, источнике:неизвестно, описание: неизвестно;
Как это сделать (операции в Microsoft Word с использованием PHP):
- Я открываю шаблон документа из файла (успех)
- Я вставляю простой текст в документ, используя
->Range->InsertAfter( "whatever text needed to be inserted" ); // (success)
- Я определяю новый объект Range:
$range = $document->Range( x, y );
- и преобразовываюДиапазон в таблицу (успех)
$Table1 = $range->ConverToTable( wdSeparateByTabs, 1, 2, 30, wdTableFormatNone, false, false, false, false, false, false, false, false, false, wdAutoFitWindow, wdWord9ListBehavior );
// with
wdSeparateByTabs = 1
wdTableFormatNone = 0
wdAutoFitWindow = 2
wdWord9ListBehavior = 1
Несмотря на то, что я передаю number_of_rows = 1 (второй параметр), таблица выглядит так, как ожидалось.
Следующий шаг, который я хочу, это заставить Word найти и заменить строки:
$rng = $Table1->Range;
$find = $rng->Find;
$find->Execute( "text to find", false, false, false, false, false, null, wdFindContinue, false, "text to be replaced with", wdReplaceAll, null, null, null, null );
Некоторая информация о системе:
- всена виртуальной машине Oracle VM VirtualBox 5.2.0
- Windows XP sp3
- Apache 2.2.6
- PHP 5.2.9
- Microsoft Office Word2002 (10.2627)
Заключительные мысли и идеи:
- , когда я комментирую раздел -> Find-> Execute (...) - все делается как положено
- Я создаю таблицу из простого текста с ячейками, разделенными символом (вкладка в моем примере), поэтому я не могу создать ячейку с несколькими строками (\ x0A) таким образом, потому что Word использует \ x0A в качестветоже разделитель (проверено);
- Мне нужно иметь ячейки с несколькими строками (разделенные \ x0A или \ x0B)
- Идея заключалась в том, чтобы вставить простой текст с помощью разделителя строк
в htmlпреобразуйте его в таблицу и замените '
' на \ x0A или \ x0B при создании таблицы - Я уверен, что могу достичь необходимой цели другим способом (способами)
- Я провел очень похожий тест с использованием C # в VisualStudioExpress2010, но все работает, как и ожидалось, я не получаю ОШИБКУ, как при использовании PHP
Что я делаю неправильно при вызове
->Range->Find->Execute(...);
вызывает ошибку?
РЕДАКТИРОВАТЬ: я не использую рамки, просто планирую Word, ифондовый PHP
$word = new COM( 'Word.Application' );
$document = $word->Documents->Add( ); //or
$document = $word->Documents->Open( 'template_file.doc' );