![]() |
![]() |
Cool 10.04.2004 - 15:30 |
Я все со своим Вордом... ТЗ: объединить 2 ячейки Мои действия: Для того чтобы объединить 2 ячейки надо их выделить и потом вызвать метод объединения. Для того чтобы выделить 2 ячейки, надо поставить курсор в одну, зажать шифт и нажать стрелку в направлении другой. Стало мне интересно, чем отличается просто нажать стрелку, от нажать стрелку с зажатым шифтом (двиг от выделения), с точки зрения синтаксиса кода. запускаю ворд (ручками), создаю таблицу, включаю запись макроса и выполняю операции: сдвиг курсора вправо, сдвиг курсора вправо с зажатым шифтом.(после этого надо вызвать Selectiom.Cells.Merge но это тривиально) Получаю макрос: Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend Сразу скажу, что ВБ я не знаю нифига, так что ногами не пинать. Насколько мой мозг понял, то unit,count,extend это параметры передаваемые в метод moveright причем в первом случае параметр extend установлен по умолчанию. Итак, начал я переводить в пхп это дело. wdCharacter по моим предположениям это 0 поэтому получаем: $word->Selection->MoveRight( 0, 1, 0); Зачем писать встолбик? А чтобы точно знать по мату интерпретатора в каком параметре я ошибся. Если вызвать просто MoveRight() (с параметрами по умолчанию), то это все равно что передвинуть курсор без зажатого шифта, а мне надо именно с зажатым. Получаем от пхп: Warning: Invoke() failed: Ошибка. Source: Microsoft Word Description: Неверный параметр in z:\home\localhost\www\lmis_db\word.php on line 150 150ая строка это 3тий параметр. Начал я думать, чему же равен третий параметр, и ничего умнее чем дописать в ворде в макросе Selection.TypeText Text:="lala " + wdExtend не придумал. ну и собсно выполнил этот макрос, на что получил :Run-time error '13' TypeMismatch; Вобщем... как узнать что кроется за wdExtend? Поскольку, проводя аналогию с С++, я предполагаю что это константа и за ней кроется целое число. Использовать эту константу в пхп на прямую не представляется возможным, поэтому нужно число. Или я вообще не прав с тем, что это константа\число? |
Capo 1 - 10.04.2004 - 18:17 |
WdExtend Расширяет выделенный фрагмент. Конечный результат заключается в том, что новый объект Selection состоит из диапазона от курсора ввода до конечной позиции. Если начальная позиция не соответствует местонахождению курсора ввода, результат варьируется в зависимости от параметров, переданных методу. Например, если в данный момент выделена строка и метод HomeKey вызван с перечислимыми значениями wdStory и wdExtend, то строка не включается в новый выделенный фрагмент. Если метод EndKey вызван с перечислимыми значениями wdStory и wdExtend, строка включается в выделенный фрагмент. Такое поведение отражает действие комбинацией клавиш Ctrl+Shift+Home и Ctrl+Shift+End соответственно. Следующий код перемещает курсор ввода в начало документа вызовом метода HomeKey с wdStory и wdMove. Затем выделение расширяется до конца документа вызовом EndKey с wdExtend: ---------------- Аргумент Extend принимает те же два перечислимых значения - wdMove и wdExtend. Однако для методов MoveLeft и MoveRight в аргументе Unit передаются значения перечислимого типа WdUnits. wdCharacter Перемещение в единицах символов. Это значение по умолчанию. wdWord Перемещение в единицах слов. wdCell Перемещение в единицах ячеек. Допустимо только для таблиц. wdSentence Перемещение в единицах предложений. |
Cool 2 - 10.04.2004 - 18:28 |
Теория ясна, но как воплотить ее на практике не совсем ясно. При работе с Вордом посредством пхп нельзя использовать константы (или я не допираю как). Вот строчка из мануала: rng.ParagraphFormat.Alignment = _Word.WdParagraphAlignment.wdAlignParagraphCenter Установка выравнивания по центру. В пхп эта строка выглядит так: $word->Selection->ParagraphFormat->Alignment=1; Как видно, справа стоит не какое-то предопределенное выражение, а константа. Так как мне вызвать MoveDown? Что и в какой последовательности туда передать? |
Cool 3 - 10.04.2004 - 18:37 |
Все, вопрос снялся... методом научного перебора было получено решение: $word->Selection->MoveRight(1,strlen("До окончания этого контракта меньше месяца")+2,1); т.е. первые 2 параметра в сумме дают сколько символов выбрать, третий устанавливает режим перемещения курсора. 1 - все равно что с сажатым шифтом, т.е. выделение. Capo, thx anyway |
Capo 4 - 10.04.2004 - 20:38 |
to Cool Ок... если что сорри я php почти незнаю.... на другом серверном языке я бы тебе помог в реализации.... |
Mips 5 - 12.04.2004 - 09:31 |
Cool, там, в ворде, есть такая штука как запись макроса. Вот чё выдаёт... Sub Макрос1() ' ' Макрос1 Макрос ' Макрос записан 12.04.04 Mips ' Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveDown Unit:=wdLine, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend Selection.Cells.Merge End Sub |
Cool 6 - 12.04.2004 - 15:33 |
Mips, ага, я записал такой же макрос и его уже разбирал на косточки и переводил в ПХП. проблема была в том, что я не знал чему равно wdExtend понятно что вызывается метод Selection->MoveRight(Unit,Count,Extend) но чему численно равны первый и последний параметры я не знал. Теперь знаю (метод перебора forever) P.S. В прошлом сообщении я наврал. Первый параметр отвечат за тип выборки (символ,слово, строка и т.д.) второй за кол-во элементов, третий выбирать "с шифтом" или "без". Хотя думаю врятли кого-нибудь еще угораздит связываться в Вордом через пхп. |