Форум » [x]Harbour » Вопрос по Word » Ответить

Вопрос по Word

fil: Всем привет ! Можно ли задать значения ячейкам одной строки таблицы Word'a присвоив им одномерный массив (как в Excel) ?

Ответов - 16

Dima: надо пробовать Тему ты конечно же видел.

fil: Видел. Просто сейчас цейтнот

ММК: fil пишет: Можно . Масиив любой. Поля Dbf и т.д. Библиотека у тебя есть. Напиши , что надо - сделаю пример .... WRITE NEWCELL oRTF TEXT Ks[1] ALIGN CENTER // по центру ячейки WRITE NEWCELL oRTF TEXT OemToAnsi(Alltrim(Lrn)) ALIGN LEFT //к левому краю WRITE NEWCELL oRTF TEXT Str(ItoS,12,2) ALIGN RIGHT //к правому И т.д. ....


Pasha: Через vba/ole вряд ли. У объектов range/selection в методах insertafter/insertbefore и в свойстве Text параметр требуется только string. Больше вроде ничего нет. Можно сделать тоже самое через буфер обмена. Скопировать туда строку таблицы, посмотреть, какой там формат, и затем аналогично вставлять.

ММК: Pasha пишет: Через vba/ole вряд ли. У объектов Все проще. Есть небольшая библиотечка (с исходниками) на харборе. Под FW, особых проблем видимо и с минигуи не будет Практически все ,что надо в ворде - есть. Синтаксис стандартный.На выходе RTF. Пример: четыре колонки таблицы заполняются из фвйлика DO WHILE .NOT. EOF() If Ot->VSM=.F. WRITE NEWCELL oRTF TEXT Str(Nnp,3) ALIGN CENTER WRITE NEWCELL oRTF TEXT Alltrim(Ot->KOP) ALIGN RIGHT WRITE NEWCELL oRTF TEXT OemToAnsi(Alltrim(Ot->NP)) ALIGN LEFT WRITE NEWCELL oRTF TEXT Str(Ot->Tves,10,2) ALIGN RIGHT Nnp:=Nnp+1 EndIf SKIP ENDDO

Dima: ММК пишет: Есть небольшая библиотечка (с исходниками) на харборе Так может её пора уже выложить ?

Pasha: Мне что-то смутно вспоминается.. Это не класс RichText, который возник еще во времена клиппера, т.е. пришелец из 20-го века ? Он вроде бы через fread/fwrite разбирает файлы rtf как текст. Наверное делает это быстро, только это не универсальный способ.

ММК: Pasha пишет: Мне что-то смутно вспоминается.. Это не класс RichText, который возник еще во времена клиппера, т.е. пришелец из 20-го века ? Ну так память ведь хорошая! :)) Появился в одно время с TsBrows. Универсальность хорошо тогда , когда есть в ней необходимость. Этот класс только формирует документы. Видимо поэтому работает на всех офисах.

fil: В некую строку документа вставляю текст (2 т.строк) oWrd:Selection:Range():Text:=buf дабы потом выдедить этот текст и ковертировать его в таблицу. Все работает. Однако если какая-либо строка текста шире страницы, то она она разорачивается и занимает уже две или более строк. Т.о. втавляемый на станицу текст занимает не 2т. строк, а больше и я не полностью его выделяю. Как образом можно выдеить весть текст ?

Pasha: 2 т.строк это 2 тысячи строк ? Вместо oWrd:Selection:Range():Text:=buf можно передавать текст проще oWrd:Selection:Text:=buf Сама проблема не очень понятна, поэтому скажу, как можно заполнить таблицу по-другому 1. Подготовить текст в таком формате: cCell11+Chr(9)+cCell12+Chr(9)+...cCell1N+Chr(13)+Chr(10)+cCell21+Chr(9)+... и так далее, т.е. разделитель строк - Chr(13)+Chr(10), разделитель столбцов в строке - табуляция Скопировать его в буфер обмена. 2. Выделить всю таблицу 3. Вставить текст из буфера обмена: oWord:Selection:Paste()

fil: Спасибо, Паша ! Попробую.

fil: Не подскажешь еще, как выделить диапазон в таблице ?

Pasha: Сначала надо получить объект таблица: oTbl := oWord:Tables[ nTbl ] Затем: Вся таблица: oTbl:Range Отдельная строка: oTbl:Rows[ nRow ]:Range Диапазон в таблице: oWord:Range( oTbl:Rows( nRow1 ):Cells( nCol1 ):Range:Start, oTbl:Rows( nRow2 ):Cells( nCol2 ):Range:End ):Select() не проверял, но судя по доке, должно работать.

fil: oWrd:Range(oTb:Item(2):Rows:Item(2):Cells:Item(1):Range:Start, ; oTb:Item(2):Rows:Item(100):Cells:Item(6):Range:End):Select() Вроде все как настоящее, но не работает - ругается на Range. Error Word.Application/0 S_OK: RANGE Args: [ 1] = N 1308 [ 2] = N 15174

fil: Вот так заработало oWrd:ActiveDocument:Range(oTb:Item(2):Rows:Item(2):Cells:Item(1):Range:Start, ; oTb:Item(2):Rows:Item(100):Cells:Item(6):Range:End):Select()

Pasha: Вроде бы поддерживается синтаксис для доступа к коллекции как к массиву, т.е. вместо oTb:Item(2):Rows:Item(2):Cells:Item(1):Range:Start можно oTb[2]:Rows[2]:Cells[1]:Range:Start



полная версия страницы