Форум: "Основная";
Текущий архив: 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.038 c