К списку форумов К списку вопросов
VB:как узнать что кроется за константой?
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. В прошлом сообщении я наврал. Первый параметр отвечат за тип выборки (символ,слово, строка и т.д.) второй за кол-во элементов, третий выбирать "с шифтом" или "без". Хотя думаю врятли кого-нибудь еще угораздит связываться в Вордом через пхп.

К списку вопросов на форуме Веб-дизайн

>>