Как сделать таблицу в rtf формате
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Форматирование привязки типа RTF в таблице
В свойствах объектов существуют параметры, которые позволяют фиксировать не просто текст, а форматированный текст. Так называемый формат RTF . Несмотря на то, что для таких параметров можно задать формат шрифта по умолчанию, бывают ситуации, когда информация в них заносится из других документов путем копирования данных через буфер обмена. При этом остается форматирование текста как у источника. При выводе таких параметров в отчет при сохранении форматирования RTF может происходить выделение данного текста на фоне общего представления отчета. Например, текст будет выведен другим шрифтом и другим размером.
Постановка задачи
В отчете формата Word по процессу в таблице с описанием подпроцесса необходимо столбец «Комментарий» сделать таким же шрифтом, таким же размером как другие столбцы таблицы и таким же стилем абзаца. При этом оставить другое форматирование: подчеркивание, выделение, цвет и т.д.
Исходные данные
Решение описывается с момента, когда уже существует привязка типа «Список», выводящая список подпроцессов.
Рисунок 1. Привязка, выводящая список подпроцессов, в котором существует привязка с типом RTF — «Комментарий»
Рисунок 2. Вид выполненного отчета — стиль текста «Комментарий» отличен он других столбцов таблицы
Концепция решения
Необходимо обратиться к нужной таблице. Определить параметры шрифта в соседнем столбце от столбца «Комментарий» (значения из ячейки). Далее выделить столбец «Комментарий» и задать необходимые параметры шрифта.
Шаги решения
Определяем название привязки типа «Список», которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа «Список»).
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 'Вводная часть 'название закладки для привязи типа Список, формирующей нужную таблицу PodProcBookmarksName = "Подпроцессы_41fc2dd5" columnRTF = 2 'столбец в таблице, содержащий параметр RTF - "Комментарии" 'Проверка на корректность названия привязки Dim PodProcBkmOk As Boolean 'сначала считаем, что нужной закладки нет Dim Bkm As Bookmark 'переменная типа Закладка 'если искомая закладка есть среди закладок в документе For Each Bkm In ActiveDocument.Bookmarks If Bkm.Name = PodProcBookmarksName Then PodProcBkmOk = True 'отмечаем, что закладка есть 'будем работать с таблицей через закладку Set tablePodProc = Application.ActiveDocument.Bookmarks(PodProcBookmarksName).Range.Tables(1) End If Next 'Процедурная часть If PodProcBkmOk Then 'если есть необходимая закладка 'Запоминаем параметры шрифта первой ячейки после заголовка справа от поля RTF Dim Rng As Range 'здесь будет область ячейки справа от столбца RTF Set Rng = tablePodProc.Cell(2, columnRTF + 1).Range FontName = Rng.Font.Name 'запоминаем шрифт FontSize = Rng.Font.Size 'запоминаем размер 'Выделяем столбец с RTF кроме заголовка Dim RngRTF As Range 'начало и конец диапазона RngRTFStart = tablePodProc.Cell(2, columnRTF).Range.Start RngRTFEnd = tablePodProc.Cell(tablePodProc.Rows.Count, columnRTF).Range.End 'выделяем ячейки RTF ActiveDocument.Range(RngRTFStart, RngRTFEnd).Select 'Задаем шрифт текста и размер With Selection.Font .Name = FontName .Size = FontSize End With 'Форматирование абзаца Selection.ParagraphFormat = Rng.ParagraphFormat End If End Sub
Результат
Рисунок 3. Вид сформированного отчета. Параметр типа RTF имеет такой же шрифт и размер, как и остальная таблица
Как сделать таблицу в rtf формате
Разработка прикладного ПО — это, как известно, не только написание кода программ, но и проектирование печатных документов и отчетов. Практически все интегрированные среды имеют в своем составе генераторы отчетов, в той или иной степени помогающие решить эту задачу. Однако, несмотря на явные достоинства, использование генераторов отчетов имеет ряд недостатков. Они сводятся, главным образом, к невозможности вносить правки в сформированный документ, а также изменять шаблоны отчета привычными средствами, например обычным текстовым редактором.
- Создаем некий файл — шаблон документа. Там, где должна быть «шапка» (дата, номер документа и др.), используем закладки, а для основной части отчета создаем таблицу-заготовку соответствующей структуры. Пример такого шаблона приведен на рис. 1.
- Пишем программу с использованием объектной модели Word:
‘ NumStr — кол-во строк в отчете
‘ NewData (5,NumStr) — массив с данными для заполнения
‘ таблицы, заранее приведенными к символьному виду
‘ Itog — сумма, приведенная к символьному виду
‘ Pth — путь к исходному файлу
‘ Str_ndoc = «BS190»
‘ Str_name = «Петров И.И.»
.
Dim objWord As Word.Application
Dim objDoc As Word.Document
Dim objTable As Word.Table
‘ создаем объект Word
Set objWord = New Word.Application
‘ делаем его видимым — это не обязательно,
‘ но очень интересно 🙂
objWord.Visible = True
‘ открываем файл шаблона
Set objDoc = objWord.Documents.Open (Pth)
‘ делаем его активным
objDoc.Activate
‘ заполняем «шапку документа» — номер и получатель
‘ — закладки ‘ndoc’ и ‘name’ соответственно
objDoc.Bookmarks («ndoc»).Range.Text = Str_ndoc
objDoc.Bookmarks («name»).Range.Text = Str_name
‘ связывам объект с таблицей
Set objTable = objWord.ActiveDocument.Tables (1)
‘ выделяем 2-ю строку таблицы в шаблоне
objTable.Cell (2, 1).Range.Select
‘ вставляем нужное кол-во строк-1
‘ (т.к. одна уже есть в шаблоне)
If NumStr > 0 Then objWord.Selection.InsertRows (NumStr — 1)
‘ для каждой строки в каждую ячейку вставляем нужные
‘ данные из массива
For i = 1 To NumStr
For j = 1 To 5
objTable.Cell (i + 1, j).Range.Text = NewData (j, i)
Next j
Next i
- Запускаем ее в составе всего приложения и получаем результат (см. рис. 2).
- Пользователь, получив отчет в виде doc-файла, может легко внести в документ любые изменения, отправить его по электронной почте, распечатать — одним словом, распорядиться по своему усмотрению в привычной ему среде. Так же легко он может изменить и шаблон документа — для этого достаточно уметь работать в текстовом редакторе.
Но эту идиллическую картину омрачает несколько неприятных моментов. Во-первых, недостаточная гибкость приложения — если вы захотите перейти на другой редактор, то придется писать код заново. Во-вторых, приложение работает только в среде пакета MS Office, а он стоит немалых денег. Если приложение должно работать на 30-ти компьютерах предприятия, то установка на них MS Office обойдется примерно в 40 тыс. гривен — не каждый бюджет выдержит.
В то же время существует целый ряд бесплатных и достаточно полнофункциональных офисных пакетов: OpenOffice, StarOffice, EasyOffice и др. Для большинства операций, выполняемых обычно с документами, их возможностей вполне достаточно. Но возможна ли их простая и эффективная интеграция в прикладное программное обеспечение?
Решением этой проблемы может быть использование RTF-файлов. Этот формат, предложенный Microsoft как стандарт для обмена данными между текстовыми редакторами, поддерживается абсолютным большинством офисных пакетов. Сама Microsoft использует его в качестве формата, в котором данные передаются через буфер обмена между различными приложениями Windows.
Кратко об RTF
В формате RTF используются только коды, представляемые символами из наборов ASCII, MAC и PC. Помимо текста, RTF-файл содержит команды управления в читаемой форме. Документ состоит преимущественно из команд управления настройкой программы чтения. Эти команды можно разделить на управляющие слова и управляющие символы.
Управляющее слово представляет собой последовательность символов с разделителем в конце. Например, фрагмент:
…\bkmkstart ndoc…
соответствует началу закладки ndoc.
- пробел, причем этот символ относится к управляющему слову;
- цифра или дефис (). После этих символов должен следовать параметр с разделителем. В качестве разделителя может быть использован пробел или другие символы (кроме цифр и букв);
- все символы, кроме цифр и букв. Эти символы не относятся к управляющему слову.
Для задания управляющей последовательности в RTF-формате используются буквы от А до Z и от а до z, а также цифры от 0 до 9. Национальные символы к управляющей информации не относятся.
В качестве управляющих символов используются отдельные буквы. Перед каждым управляющим символом вводится обратная косая черта (\). Например, фрагмент:
…\f1\fs20…
устанавливает шрифт № 1 размером в 20 единиц.
Фрагмент RTF-файла приведен ниже. Структура его, как можно видеть, напоминает структуру HTML-документа:
\intbl\phmrg\posy371\dxfrtext180\dfrmtxtx180\dfrmtxty0\nowrap
\aspalpha\aspnum\faauto\adjustright\rin0\lin0\f1\fs20\lang1049
\langfe1049\cgrid\langnp1049\langfenp1049<\lang1033\langfe1049
\langnp1033 11\cell 12\cell 13\cell> \pard \ql \li0\ri0\widctlpar\intbl
\aspalpha\aspnum\faauto\adjustright\rin0\lin0
В RTF-формате существует возможность объединять отдельные последовательности в группы при помощи скобок:
Такие группы создаются, например, при описании сносок, колонтитулов, закладок и т.п.
- \раr — конец абзаца;
- \сеll — конец столбца;
- \row — конец строки (или таблицы);
- \*\bkmkstart \*\bkmkend — закладка. Пример: BS190;
- \pard — устанавливает стандартную настройку для абзаца;
- \intbl … \intbl — выделяет область таблицы;
- \’ — прямой ввод в текст шестнадцатеричных чисел. При сохранении кириллического текста он обычно сохраняется в шестнадцатеричной форме, например:
\'d1\'f2\'f0\'ee\'ea\'e0 ('строка')
Поскольку нас интересуют только определенные задачи, знания приведенных выше управляющих слов и символов вполне достаточно. Условимся для простоты называть управляющие слова и символы тегами.
А теперь рассмотрим алгоритмы решения трех основных задач, возникающих при создании документации.
Вставка строки на месте закладки
Пример такой закладки:
- Читаем последовательно строки входного файла (в большинстве случаев строка больше 255 символов).
- Ищем в текущей строке тег ‘\bkmkstart’.
- Если находим, то выделяем название закладки и сравниваем его с искомой.
- Если совпадает, то записываем строковую строку данных после закрывающей скобки (>).
Алгоритм реализован в виде функции In_Zakl1(pth As String, zakl As String, data As String), где pth — имя RTF-файла, zakl — имя закладки, data — строка для добавления в файл.
Добавление строк в таблицу
Предположим, нам требуется найти m-ю строку в n-той таблице и повторить ее в этой таблице p раз. Для поиска начала строки таблицы мы будем использовать тег \intbl, а для поиска конца — тег \row. Конец самой таблицы определяется по последовательности тегов \row…\pard…\par.
- Читаем последовательно строки входного файла.
- Ищем последовательность …\row…\pard…\par…\intbl… (не обязательно в одной строке) (n-1) раз. После этого мы находимся в начале нужной таблицы.
- Ищем тег \row (m-1) раз. После этого находимся перед нужной строкой таблицы.
- Ищем следующий тег \row и копируем содержимое файла от (m-1)-го до m-го тега \row (между \row и \intbl содержатся настройки строки, они нам тоже нужны).
- Вставляем после m-го тега \row скопированную нами подстроку p раз.
Следует отметить, что недостатком предложенного алгоритма является то, что он может копировать любую строку таблицы, кроме первой. Но в большинстве случаев первая строка является «шапкой» документа и копировать ее нет необходимости.
Алгоритм реализован в виде функции In_TStr (pth As String, itbl As Integer, irow As Integer, kol As Integer), где pth — имя RTF-файла, itbl — номер таблицы, irow — номер строки, kol — количество повторов строки.
Заполнение ячейки таблицы
Представим, что требуется найти k-ю ячейку в m-й строке n-й таблицы и вставить в нее текстовую строку данных. Пример таких ячеек:
- Читаем последовательно строки входного файла.
- Ищем последовательность …\row…\pard…\par…\intbl… (не обязательно в одной строке) (n-1) раз. После этого мы находимся перед нужной нам таблицей.
- Ищем тег \row (m-1) раз. После этого мы находимся в начале нужной строки таблицы.
- Ищем k-e вхождение тега \cell.
- Вставляем перед ним строку данных.
Данный алгоритм реализован в виде функции In_Tcell1(pth As String, itbl As Integer, irow As Integer, icell As Integer, ndata As String), где pth — имя RTF-файла, itbl — номер таблицы, irow — номер строки, icell — номер ячейки, data — строка для занесения в ячейку.
Программа на VisualBasic, демонстрирующая применение такой технологии и функционально идентичная программе, приведенной в начале этой статьи, выглядит так:
‘ NumStr — кол-во строк в отчете
‘ NewData (5,NumStr) — массив с данными для заполнения
‘ таблицы, заранее приведенными к символьному виду
‘ Itog — сумма, приведенная к символьному виду
‘ pth — путь к файлу
‘ Str_ndoc = «BS190»
‘ Str_name = «Петров И.И.»
Dim res As Boolean ‘ результат выполнения функций
‘ заполняем «шапку документа» — номер и получатель
‘ — закладки ‘ndoc’ и ‘name’ соответственно
res = In_Zakl1(pth, «ndoc», Str_ndoc)
res = In_Zakl1(pth, «name», Str_name)
‘ вставляем нужное кол-во строк-1
‘ (т.к. одна уже есть в шаблоне)
res = In_TStr (pth, 1, 2, NumStr — 1)
‘ для каждой строки в каждую ячейку вставляем
‘ нужные данные из массива
For i = 1 To NumStr
For j = 1 To 5
res = In_Tcell1(pth, 1, i + 1, j, NewData (j, i))
Next j
Next i
res = In_Tcell1(pth, 1, NumStr + 2, 5, Itog)
‘ проставляем сумму «Всего»
Заключение
Каковы преимущества и недостатки предложенной технологии? Начнем с достоинств. Во-первых, это более гибкая технология для формирования отчетов — даже если часть пользователей работает с OpenOffice, а часть с MS Office, программа создания отчетных документов универсальна. Во-вторых, несмотря на многоразовую перезапись файла шаблона во время работы, эта программа работает быстрее, чем связка OLE+Word. Тем более что приведенные выше алгоритмы могут совершенствоваться. Один из примеров кардинального повышения производительности приведен в листингах варианта для PascalDelphi. В-третьих, пользуясь свободным ПО, вы экономите деньги.
Теперь о проблемах. Основная из них — это недостаточная стандартизация формата RTF. Производители ПО, в целом придерживаясь единого стандарта, допускают несколько свободную трактовку частных моментов. Результат — проблемы с использованием «чужих» RTF-файлов, подготовленных в других редакторах. Например, MS Word сохраняет графические изображения внутри RTF-файла в виде последовательности шестнадцатеричных кодов, а OOWriter — как внешний файл.
Впрочем, эти проблемы решаются — стоит только приложить некоторые усилия.
- 08.12 — Разработан ИИ, который может перехватывать пароли с точностью 95 % по звуку нажатия клавиш
- 08.12 — «Роснефть» создала собственного мобильного оператора «РН-Связь»
- 08.12 — Google выпустила продвинутый ИИ-блокнот NotebookLM на нейросети Gemini Pro
- 08.12 — Британские антимонопольщики проверят отношения Microsoft и OpenAI
- 08.12 — Сети 5G не принесли обещанную технологическую революцию, но обычным пользователям пошли на пользу
- 06.12 — РСК создала для Института математики СО РАН суперкомпьютер с быстродействием 54,4 Тфлопс
- 06.12 — Рыночная капитализация Apple снова превысила три триллиона долларов
- 06.12 — «Яндекс» протестирует новую «Алису» на базе YandexGPT 2
- 06.12 — Биткоин продолжил рост и сегодня покорил $44 000
- 06.12 — «Яндекс» открыл доступ к YandexGPT API для всех пользователей
- 06.12 — Арабские учёные придумали солнечную башню, которая будет давать электричество днём и ночью
- 06.12 — Intel попала в десятку крупнейших контрактных производителей чипов — она нарастила выручку сильнее всех
- 06.12 — Япония снова попытается посадить космический аппарат на Луну 19 января
- 05.12 — В России началось создание реестра хостинг-провайдеров: не попавшим в него компаниям запретят работать с 1 февраля
- 05.12 — «Яндекс» запустил сервис «Нейростат» для отслеживания популярности искусственного интеллекта в России
- 05.12 — Учёные скрестили мемристор и память с фазовым переходом — получилась память быстрее и лучше, чем флеш
- 05.12 — NVIDIA столкнётся с рекордной выручкой и усилением конкуренции со стороны Intel и AMD в сегменте ИИ
- 05.12 — Японцы вдвое превзошли рекорд скорости передачи данных по оптоволокну — 22,9 млн гигабит в секунду
- 05.12 — IBM представила свой мощнейший квантовый процессор Heron и первый модульный квантовый компьютер
- 01.12 — ИИ станет ускорителем для восстановления рынка смартфонов — рост начнётся в 2024 году
Как сделать таблицу в rtf формате
← →
solo © ( 2004-04-27 20:09 ) [0]
Здравствуйте, подскажите, в формате .rtf предусмотрена возможность создавать таблицы? Если да, то как это сделать? Хотелось бы в RichEdit-е отображать таблицы, а потом сохранять все это дело в файл.
← →
Курдль © ( 2004-04-27 20:25 ) [1]
Есть такая фишка. RTF оперирует простенькими тэгами типа \row \cell \line и т.п. Кроме того, имеет какой-то префикс типа описания шрифтов, чарсета и т.п.
Я делал такую фишку, но найти не могу — в инете гуляют описания стандарта RTF — ищи!
← →
evvcom © ( 2004-04-28 01:05 ) [2]
Сделай что надо в Word и сохрани как rtf.
← →
solo © ( 2004-04-28 10:05 ) [3]
2 evvcom 🙂 мне такое не подходит, надо делать все программно. А кто-нибудь подскажите урл, где лежит описание формата .rtf и чтоб про таблицы было, а то у меня есть одно, так там о таблицах не говориться.
← →
evvcom © ( 2004-04-28 10:07 ) [4]
Блин! Все разжевывать надо? Сохранишь из Word, потом откроешь и посмотришь, как это получилось. По аналогии напишешь программно.
← →
solo © ( 2004-04-28 13:59 ) [5]
2 evvcom, прошу прошения, может плохо сформулировал. То что ты предлагал, я сделал в первую очередь, посмотрел, если разбираться голову сломать можно. А меня время сильно жмет, я диплом дописываю, хотелось бы уж сразу описание заиметь.
← →
Курдль © ( 2004-04-28 14:09 ) [6]
> Блин! Все разжевывать надо?
Я попробовал в Яндексе поискать по фразе «Формат Rich Text (RTF)».
Вывалилось 3276 документов, первый же из которых оказался тем, что надо: «http://blackman.wp-club.net/docum/rtf.php»
Это что, сверхзадача, которую самому проделать нельзя? 🙁
← →
ЮрийК © ( 2004-04-28 15:14 ) [7]
Сделай программно через Word, примеры ищи в MSDN.
← →
Курдль © ( 2004-04-28 15:15 ) [8]
> Сделай программно через Word
И как это должно выгдядеть?
← →
ЮрийК © ( 2004-04-28 15:21 ) [9]
В MSDN или воспользуйся поиском в интернете. Слова: Delphi, Word.Application, CreateOleObject.
и так далее, ищи примеры.
← →
Курдль © ( 2004-04-28 15:23 ) [10]
> Сделай программно через Word
> wa := CreateOleObject(«Word.Application»);
Вы бы хоть добавляли к своим категоричным советам нечто навроде «а не попробовать ли. » или «возможно я ошибаюсь, но сделать можно и так. «! Особенно когда всерьез советуете человеку удалять гланды через ж. елудок! 🙁
← →
ЮрийК © ( 2004-04-28 15:34 ) [11]
«evvcom © (28.04.04 01:05) [2]
Сделай что надо в Word и сохрани как rtf.»
Всё что можно сделать в Word ручками, можно сделать и программно. Но нужно разбираться, там много объектов. Поэтому нужно найти наиболее подходящий пример и от него плясать.
например (на СИ):
открытие Doc файла и сохранение в HTML
BOOL DocToHtml(char* fIn, char* fOut)
// Convenient values declared as ColeVariants.
COleVariant covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// Get the IDispatch pointer and attach it to the objWord object.
_Application objWord;
if (!objWord.CreateDispatch(«Word.Application»))
return ERR_WORD_RUN;
>
Documents docs(objWord.GetDocuments());
_Document doc;
doc.AttachDispatch(docs.Open(
COleVariant(fIn,VT_BSTR),
covFalse, // Confirm Conversion.
covTrue, // ReadOnly.
covFalse, // AddToRecentFiles.
covOptional, // PasswordDocument.
covOptional, // PasswordTemplate.
covFalse, // Revert.
covOptional, // WritePasswordDocument.
covOptional, // WritePasswordTemplate.
covOptional, // Format. // Last argument for Word 97
covOptional, // Encoding // New for Word 2000/2002
covTrue // Visible
) // Close Open parameters
); // Close AttachDispatch(Е)
doc.SaveAs(COleVariant(fOut,VT_BSTR), COleVariant((short)8),
covOptional, covOptional, covFalse,
covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional);
objWord.Quit(covFalse, covOptional, covOptional);
return OK;
>
← →
Курдль © ( 2004-04-28 16:37 ) [12]
> Всё что можно сделать в Word ручками, можно сделать и программно.
ЗАЧЕМ? Если Вам понадобится в программе посчитать 2*2=4, вы что, по OLE полезете к Calculator.exe? А если Ворда на компе нет?
← →
ЮрийК © ( 2004-04-28 17:08 ) [13]
Требуется не 2*2 посчитать, а таблицы создать и сохранить в RTF.
Это посерьёзнее будет.
← →
Курдль © ( 2004-04-28 17:35 ) [14]
> Требуется не 2*2 посчитать, а таблицы создать и сохранить
> в RTF.
> Это посерьёзнее будет.
У меня этот код занял ~20 строк.
← →
ЮрийК © ( 2004-04-28 17:49 ) [15]
Привели бы код в таком случае. Вместо вопроса зачем.
← →
Курдль © ( 2004-04-28 17:53 ) [16]
Если там найдется парочка ссылок на константы из других модулей — я не виноват!
//******************************************************************************
// Функция создания образа файла RTF в виде таблицы, используемой, как источник
// данных слияния (MailMerge.DataSource) в MS Word
// Принимает TStringList с записанными в него данными. Каждая строка (Strings[i])
// предтавляет собой единицу данных. Причем группа первых строк служит заголовком
// в таблице. Количество колонок в таблице определяет аргумент colCount. Общее
// количество строк в StringList должно быть кратно числу колонок. Функция
// записывает текст RTF обратно в StringList и в случае успеха, — возвращает True
//******************************************************************************
uses Classes, Windows, Forms, SysUtils;
function CreateRTF(StringList: TStringList; colCount: Integer): Boolean;
resourcestring
filePrefix = » «\fcharset204Times New Roman CYR;> «\f1\froman\fcharset0 Times New Roman;>>»#13#10″\viewkind4\uc1″#13#10;
rowPrefix = «\trowd\trgaph108\trleft-108»;
sArraySizeError = «Размер массива меньше количества колонок»;
sDivisionError = «Размер массива не делится на количество колонок»;
sError = «Ошибка»;
function CreateRTF(StringList: TStringList; colCount: Integer): Boolean;
var x, y, i, ln: Integer; s0, s, sResult: string;
begin
ln := StringList.Count;
Result := False;
try
if ln < colCount then Exception.Create(sArraySizeError);
if (ln mod colCount) > 0 then Exception.Create(sDivisionError);
sResult := filePrefix;
for y := 0 to (ln — 1) div colCount do
begin
sResult := sResult + rowPrefix;
for x := 0 to colCount — 1 do sResult := sResult + «\cellx» + IntToStr(2108 + x * 2000) + » «;
sResult := sResult + «\pard\intbl\f0\fs16 «;
for x := 0 to colCount — 1 do
begin
s0 := StringList[y * colCount + x]; s := «»;
for i := 1 to Length(s0) do
case s0[i] of
#13: s := s + «\line «;
» «..»[«,»]»..»z»: s := s + s0[i];
#128..#255: s := s + «\»»» + IntToHex(Ord(s0[i]), 2);
«\»,»»: s := s + «\» + s0[i];
end;
sResult := sResult + s + «\cell «;
end;
sResult := sResult + «\row»#13#10;
end;
sResult := sResult + «\pard\par >»;
StringList.Text := sResult;
Result := True;
except
on E: Exception do Application.MessageBox(PChar(E.Message), PChar(sError), MB_ICONSTOP);
end
end;
← →
evvcom © ( 2004-04-28 23:38 ) [17]
Ну вы, блин, даете! Я про Word заикнулся только для того, чтобы посмотреть на результат. Как Word в rtf сгенерит таблицы. Перечитайте вопрос! Я совсем не намекал на то, чтобы через OLE лезть в Word, рисовать таблицы, а потом заставлять его все это сохранять в rtf, после чего этот rtf грузить в ReachEdit. Действительно так получается «удаление гланд через ж. елудок».
Повторяю еще раз, Word использовать только для того, чтобы увидеть какие именно и в каком порядке он сгенерирует тэги, о которых было упомянуто в [1] ответе.
Используйте для изучения готовые инструменты. Чего велосипеды изобретать?
← →
Курдль © ( 2004-04-29 10:18 ) [18]
> Повторяю еще раз, Word использовать только для того, чтобы
> увидеть какие именно и в каком порядке он сгенерирует тэги,
> о которых было упомянуто в [1] ответе.
> Используйте для изучения готовые инструменты. Чего велосипеды
> изобретать?
Согласен! Но это когда не хватает документации.
А здесь же налицо готовая спецификация по формату RTF! Чего же боле?
← →
evvcom © ( 2004-04-29 11:47 ) [19]
Очень часто работающий пример нагляднее документации. Правда, сейчас и в документациях примеров хватает. Так что .
А автор вопроса вообще замолчал, то ли разобрался, то ли ему это уже не надо. А мы тут спорим.