Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Таблицы в .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.

wa := CreateOleObject("Word.Application");

и так далее, ищи примеры.


 
Курдль ©   (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
//******************************************************************************

unit uRTF;

interface

 uses Classes, Windows, Forms, SysUtils;

 function CreateRTF(StringList: TStringList; colCount: Integer): Boolean;

resourcestring
 filePrefix = "{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\froman"+
              "\fcharset204{\*\fname Times New Roman;}Times New Roman CYR;}{"+
              "\f1\froman\fcharset0 Times New Roman;}}"#13#10"\viewkind4\uc1"#13#10;
 rowPrefix = "\trowd\trgaph108\trleft-108";

 sArraySizeError = "Размер массива меньше количества колонок";
 sDivisionError = "Размер массива не делится на количество колонок";
 sError = "Ошибка";

implementation

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;

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]

Очень часто работающий пример нагляднее документации. Правда, сейчас и в документациях примеров хватает. Так что ...
А автор вопроса вообще замолчал, то ли разобрался, то ли ему это уже не надо. А мы тут спорим.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.044 c
4-1080639585
Kalmykov Sergei
2004-03-30 13:39
2004.05.16
Переобразование переменной.


11-1069691640
Phantom
2003-11-24 19:34
2004.05.16
Динамически создать пункты Popup-меню


1-1082970081
HarryP
2004-04-26 13:01
2004.05.16
Unicode


9-1072459859
Ландграф Павел
2003-12-26 20:30
2004.05.16
PowerDraw3 загрузка текстуры из TStream


14-1082946207
Думкин
2004-04-26 06:23
2004.05.16
С днем рождения! 26 апреля.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский