Форум: "Базы";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизСложный отчет в формате RTF Найти похожие ветки
← →
Opilki_Inside © (2004-05-26 18:06) [0]Есть программа, она формирует отчет, который состоит скажем из 200 листов. Отчет содежрит в себе кучу разных таблиц (название талблицы, шапка, итого)...
Проблема такая: иногда название таблицы остается на одной странице, а содержимое улетает на другую, или графа "итого" переходит на следующию страницу...
Как этого избежать? Может кто сталкиволся с этим?
Причем надо сделать это всё с помощью компонентов с открытым кодом, или же вовсе руками на уровне тегов RTF...
Может можно как-то узновать на какой странице расположено то или иное слово? Например, с помощью вызова preview...
И вообще, куда копать?
← →
Jeer © (2004-05-26 18:23) [1]В сторону разработчика этой программы.
← →
Opilki_Inside © (2004-05-27 18:12) [2]блин! в этом вопрос и состит.. разработчик-то - Я !
Может кто подскажет, чем вы пользуитесь при создании отчетов?
← →
KADAN © (2004-05-28 07:26) [3]есть такой тег \page - перенос на следующую страницу (или "разрыв страницы" как его называет ворд)
← →
Курдль © (2004-05-28 09:49) [4]
> Может можно как-то узновать на какой странице расположено
> то или иное слово?
Узновать это можно только подготовив графический образ отчета, причем с учетом того принтера, на котором предполагается печать отчета. Средствами RTF это сделать нельзя.
Но все это легко делается отчетными инструментами "...Report".
Можно еще управлять вордом через COM, но получать вразумительные данные от него гораздо сложнее, чем передавать. Однако чуть более умные люди таблицы делают на Ёкселе.
← →
Opilki_inside (2004-05-30 17:46) [5]есть такой тег \page - перенос на следующую страницу (или "разрыв страницы" как его называет ворд)
Я в курсе, только как мне узнать когда нужно на следующую страницу переносить, а когда не надо?
Можно еще управлять вордом через COM, но получать вразумительные данные от него гораздо сложнее, чем передавать. Однако чуть более умные люди таблицы делают на Ёкселе.
Не, такое не подойдет... Всё работает под Windows TSE, а клиентские машины на Линуксах... "Ёксель" и MS Word использовать нельзя...
Просто я думал, может в RTF есть какой-нибудь тег который делает так, что бы выделенные слова могли находиться только на одной странице... или что-то в этом духе...
← →
YurikGl © (2004-05-30 20:07) [6]Не знаю, поможет ли, но я приведу код формирования документа, где формируются таблицы. Причем, название таблицы не отрывается от самой таблицы, а сама таблица не разрывается, если есть возможность. Ключевые строчки я выделил.
Проверено Word2000, WordXP.
Используются компоненты от Office2000
Надеюсь ничего не забуду икод
отобразится корректно
W1.Connect;
W1.Visible:=true;
par:=1;
tabl:=0;
inc(par);
W1.ActiveDocument.Range(EmptyParam,EmptyParam).InsertAfter(заголовок+#13);
W1.ActiveDocument.Paragraphs.Item(par).Range.Select;
W1.Selection.Font:=WF1.Duplicate;
W1.Selection.ParagraphFormat.KeepWithNext:=-1;
W1.Selection.ParagraphFormat.SpaceAfter:=14;
inc(par);
inc(tabl);
DSwap.First;
W1.ActiveDocument.Range(EmptyParam,EmptyParam).InsertAfter("Столбец1"+#9+"Столбец2"+#9+"Ðåäàê&# 246;èÿ"+#9+"Íàèìåíîâàíèå"+#9+"Êîë&# 232;÷åñòâî");
W1.ActiveDocument.Paragraphs.Item(par).Range.Select;
W1.Selection.Font:=WF2.Duplicate;
W1.Selection.ConvertToTable(EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,Empt yParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
par:=par+6;
if DSwap.RecordCount>0 then begin
Repeat
if DSwap.Fields[0].value=null then st:=""
else st:=DSwap.Fields[0].value;
if DSwap.Fields[2].value=null then st:=st+#9+""
else st:=st+#9+DSwap.Fields[2].value;
if DSwap.Fields[3].value=null then st:=st+#9+""
else st:=st+#9+DSwap.Fields[3].value;
if DSwap.Fields[4].value=null then st:=st+#9+""
else st:=st+#9+DSwap.Fields[4].value;
if DSwap.Fields[5].value=null then st:=st+#9+""
else st:=st+#9+IntToStr(DSwap.Fields[5].value);
W1.ActiveDocument.Range(EmptyParam,EmptyParam).InsertAfter(ConvertString(st)+#13);
W1.ActiveDocument.Paragraphs.Item(par).Range.Select;
W1.Selection.Font:=WF3.Duplicate;
W1.Selection.ConvertToTable(EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,Empt yParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
par:=par+6;
DSwap.Next;
until DSwap.Eof;
end else begin
W1.ActiveDocument.Range(EmptyParam,EmptyParam).InsertAfter(""+#9+""+#9+""+#9+""+#9+""); //Если записей в таблице нет - добавляем пустую строку
W1.ActiveDocument.Paragraphs.Item(par).Range.Select;
W1.Selection.Font:=WF3.Duplicate;
W1.Selection.ConvertToTable(EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,Empt yParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
par:=par+6
end;
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(1).Width:=round(1.76*100000/3527);
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(2).Width:=round(3.53*100000/3527);
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(3).Width:=round(2.47*100000/3527);
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(4).Width:=round(5.68*100000/3527);
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(5).Width:=round(2.25*100000/3527);
TableLineSet;//Процедурка, которая прорисовывает все границы таблицы
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(3).Select;
W1.Selection.ParagraphFormat.Alignment:=wdAlignPageNumberCenter;
W1.ActiveDocument.Tables.Item(tabl).Columns.Item(5).Select;
W1.Selection.ParagraphFormat.Alignment:=wdAlignPageNumberCenter;
W1.Selection.ParagraphFormat.KeepWithNext:=-1;
← →
Opilki_Inside © (2004-05-31 22:15) [7]Я идею понял. Только у меня код немного подклюкивает, красный фонарь иногда вылетает....
Можно немного поподробнее?
← →
YurikGL © (2004-05-31 22:17) [8]Что именно?
Где красный фонарь вылетает?
← →
Opilki_Inside © (2004-06-01 10:36) [9]Спасибо огромное! Всё заработало!
Даже после конвертации в RTF, таблица отображется так как я хотел, осталось только найти какие теги за что отвечают, а это уже дело времени!
Еще раз спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c