Автор | Сообщение |
|
| |
Пост N: 530
Зарегистрирован: 17.06.10
|
|
Отправлено: 12.10.17 16:03. Заголовок: Вопрос по Word
Всем привет ! Можно ли задать значения ячейкам одной строки таблицы Word'a присвоив им одномерный массив (как в Excel) ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 6610
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.17 16:50. Заголовок: надо пробовать Тему..
надо пробовать Тему ты конечно же видел.
|
|
|
|
| |
Пост N: 531
Зарегистрирован: 17.06.10
|
|
Отправлено: 12.10.17 16:56. Заголовок: Видел. Просто сейчас..
Видел. Просто сейчас цейтнот
|
|
|
|
| постоянный участник
|
Пост N: 297
Зарегистрирован: 29.05.10
|
|
Отправлено: 12.10.17 17:08. Заголовок: fil пишет: Можно ...
fil пишет: [quote]` Можно . Масиив любой. Поля 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 //к правому И т.д. ....
|
|
|
|
| Администратор
|
Пост N: 3622
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.10.17 07:57. Заголовок: Через vba/ole вряд л..
Через vba/ole вряд ли. У объектов range/selection в методах insertafter/insertbefore и в свойстве Text параметр требуется только string. Больше вроде ничего нет. Можно сделать тоже самое через буфер обмена. Скопировать туда строку таблицы, посмотреть, какой там формат, и затем аналогично вставлять.
|
|
|
|
| постоянный участник
|
Пост N: 299
Зарегистрирован: 29.05.10
|
|
Отправлено: 13.10.17 11:47. Заголовок: Pasha пишет: Через ..
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
|
|
|
|
| |
Пост N: 6611
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.10.17 13:40. Заголовок: ММК пишет: Есть неб..
ММК пишет: цитата: | Есть небольшая библиотечка (с исходниками) на харборе |
| Так может её пора уже выложить ?
|
|
|
|
| Администратор
|
Пост N: 3623
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.10.17 14:12. Заголовок: Мне что-то смутно вс..
Мне что-то смутно вспоминается.. Это не класс RichText, который возник еще во времена клиппера, т.е. пришелец из 20-го века ? Он вроде бы через fread/fwrite разбирает файлы rtf как текст. Наверное делает это быстро, только это не универсальный способ.
|
|
|
|
| постоянный участник
|
Пост N: 300
Зарегистрирован: 29.05.10
|
|
Отправлено: 14.10.17 12:34. Заголовок: Pasha пишет: Мне чт..
Pasha пишет: цитата: | Мне что-то смутно вспоминается.. Это не класс RichText, который возник еще во времена клиппера, т.е. пришелец из 20-го века ? |
| Ну так память ведь хорошая! :)) Появился в одно время с TsBrows. Универсальность хорошо тогда , когда есть в ней необходимость. Этот класс только формирует документы. Видимо поэтому работает на всех офисах.
|
|
|
|
| |
Пост N: 532
Зарегистрирован: 17.06.10
|
|
Отправлено: 18.10.17 15:32. Заголовок: В некую строку докум..
В некую строку документа вставляю текст (2 т.строк) oWrd:Selection:Range():Text:=buf дабы потом выдедить этот текст и ковертировать его в таблицу. Все работает. Однако если какая-либо строка текста шире страницы, то она она разорачивается и занимает уже две или более строк. Т.о. втавляемый на станицу текст занимает не 2т. строк, а больше и я не полностью его выделяю. Как образом можно выдеить весть текст ?
|
|
|
|
| Администратор
|
Пост N: 3624
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.10.17 10:16. Заголовок: 2 т.строк это 2 тыся..
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()
|
|
|
|
| |
Пост N: 533
Зарегистрирован: 17.06.10
|
|
Отправлено: 19.10.17 13:35. Заголовок: Спасибо, Паша ! Попр..
Спасибо, Паша ! Попробую.
|
|
|
|
|
| |
Пост N: 534
Зарегистрирован: 17.06.10
|
|
Отправлено: 19.10.17 15:54. Заголовок: Не подскажешь еще, к..
Не подскажешь еще, как выделить диапазон в таблице ?
|
|
|
|
| Администратор
|
Пост N: 3625
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.10.17 08:10. Заголовок: Сначала надо получит..
Сначала надо получить объект таблица: 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() не проверял, но судя по доке, должно работать.
|
|
|
|
| |
Пост N: 535
Зарегистрирован: 17.06.10
|
|
Отправлено: 20.10.17 10:52. Заголовок: oWrd:Range(oTb:Item(..
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
|
|
|
|
| |
Пост N: 536
Зарегистрирован: 17.06.10
|
|
Отправлено: 20.10.17 11:16. Заголовок: Вот так заработало ..
Вот так заработало 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()
|
|
|
|
| Администратор
|
Пост N: 3626
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.10.17 14:43. Заголовок: Вроде бы поддерживае..
Вроде бы поддерживается синтаксис для доступа к коллекции как к массиву, т.е. вместо oTb:Item(2):Rows:Item(2):Cells:Item(1):Range:Start можно oTb[2]:Rows[2]:Cells[1]:Range:Start
|
|
|
|