Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.19;
Скачать: CL | DM;

Вниз

Работа с таблицами в Word   Найти похожие ветки 

 
Александр ©   (2009-05-27 11:43) [0]

Добый день. Уважаемые Мастера подскажите в чём проблема. Когда Word визуализирован перед выполнением приведённого ниже фрагмента, всё работает, но достаточно Word спрятать и программа вываливается с ошибкой о недопустимости оператора WordApplication1.Selection.Cells.Merge. Как с этим справиться? Спасибо.

WordApplication1.Selection.Paragraphs.Alignment:=wdAlignParagraphLeft;
WordApplication1.Selection.Font.Size:=12;
DefaultTableBehavior:=wdWord9TableBehavior;
AutoFitBehavior:=wdAutoFitFixed;
Unit_:=wdCell;
Count:=1;
WordApplication1.ActiveDocument.Tables.Add(WordApplication1.Selection.Range,2,5, DefaultTableBehavior,AutoFitBehavior);
WordApplication1.Selection.TypeText("№№ п/п");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Наименование ");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Проводимые операции");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Количество");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Примечание");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("1");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("2");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("3");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("4");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("5");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Две и более");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("блокирование");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Ликвидация");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Работы не проводились");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
WordApplication1.Selection.TypeText("Всего");
WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 Count:=4;
 WordApplication1.Selection.MoveLeft(Unit_,Count,EmptyParam);
 Unit_:=wdLine;
 RouteDocument:=wdExtend;
 Count:=4;
 WordApplication1.Selection.MoveUp(Unit_,Count,RouteDocument);

 WordApplication1.Selection.Cells.Merge;

 WordApplication1.Selection.TypeText(IntToStr(i));
 Count:=1;
 Unit_:=wdCell;
 WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 Unit_:=wdLine;
 Count:=4;
 WordApplication1.Selection.MoveDown(Unit_,Count,RouteDocument);
 WordApplication1.Selection.Cells.Merge;
 WordApplication1.Selection.TypeText(kodif.FieldByName("text").AsString);
 Count:=1;
 Unit_:=wdCell;
 WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.TypeText(IntToStr(rab[1]));
 for m:=1  to 5 do
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.TypeText(IntToStr(rab[2]));
 for m:=1  to 5 do
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.TypeText(IntToStr(rab[3]));
 for m:=1  to 5 do
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.TypeText(IntToStr(rab[4]));
 for m:=1  to 5 do
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 WordApplication1.Selection.TypeText(IntToStr(DTP.RecordCount));
 WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
 if i mod 5=0 then
   begin
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
   RouteDocument:=wdPageBreak;
   WordApplication1.Selection.InsertBreak(RouteDocument);
   WordApplication1.ActiveDocument.Tables.Add(WordApplication1.Selection.Range,2,5, DefaultTableBehavior,AutoFitBehavior);
   WordApplication1.Selection.TypeText("1");
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
   WordApplication1.Selection.TypeText("2");
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
   WordApplication1.Selection.TypeText("3");
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
   WordApplication1.Selection.TypeText("4");
   WordApplication1.Selection.MoveRight(Unit_,Count,EmptyParam);
   WordApplication1.Selection.TypeText("5");
   end;
 kodif.Next;

 end;
//сохранение документа
FileName:=ExtractFilePath(Application.ExeName)+’1.doc’;
WordDocument1.SaveAs(FileName);
ShowMessage("Всего: "+IntToStr(all));
//WordApplication1.Visible:=True;
//WordApplication1.Disconnect;


 
MsGuns ©   (2009-05-27 11:50) [1]

ИМХО, манера VBS при программировании на паскале - моветон ;)


 
Александр ©   (2009-05-27 12:00) [2]

MsGuns. Возможно. Но, если требуется готовый документ в Word_е? Можно, конечно выгрузить из базы в текстовый файл и вручную переносить в шаблон в Word, но получаемая таблица - это 5-15 листов. Долго придётся сидеть.


 
KilkennyCat ©   (2009-05-27 12:23) [3]


> Можно, конечно выгрузить из базы в текстовый файл

Если это допустимо, то допустим и RTF.


 
Александр ©   (2009-05-27 12:40) [4]

KilkennyCat. Допустимо и в PL SQL выполнять по одному запросу и вручную заполнять таблицу в Word_е. Но это ведь абсурд. Так можно договориться и до калькуляторов, счётов и просто клочка бумаги с авторучкой. Задача как раз и стоит в том, чтобы автоматически заполнять таблицу в Word_е из базы данных. У меня большинство отчётов требуют выдавать в таблицах Word или Excel. Отчётов много, а исполнителей двое. Вручную не успеть.


 
KilkennyCat ©   (2009-05-27 12:54) [5]

Это понятно. С екселем не скажу, но отчет ворда вполне заменит ртф, ибо ртф легко читается вордом. Я, например, использую компонент EkRTF - легко, просто и быстро, на шаблонах.
С екселем можно работать нативно, у tmssoftware есть компонентик, но и он, и несколько других, что я пользовал, были тормознутые. Правда, это было несколько лет назад, может сейчас шустрее.
Но метод работы через офисные приложения - это, на мой взгляд, бяка. Хотя бы потому, что привязывается к офису.


 
Александр ©   (2009-05-27 12:58) [6]

KilkennyCat. Но тогда, если можно, ссылку на компонент.


 
Vitaliy_____   (2009-05-27 13:12) [7]

У меня как-то были подобные проблемы с объединением ячеек. Деталей сейчас не могу сказать, не помню. Но решение было такое:
Запоминал те ячейки, где надо объединить (в динамический массив, т.к. их количество заранее неизвестно было), а ПОТОМ, после заполнения таблицы выставлял merge:

arg1:=wdCell; // тип OleVariant, разумеется, везде
arg2:=1; // Или сколько ячеек вправо - я думаю с выделением разберешься
for i:=0 to Length(MergeArr)-1 do begin
   t1.Cell(MergeArr[i].X,MergeArr[i].Y).Range.Select; // t1-таблица ворда
   WD.Selection.MoveEnd(arg1,arg2);
   WD.Selection.Cells.Merge;
  end;


 
Andy BitOff ©   (2009-05-27 13:47) [8]

Работайте через Range, не надо никаких Select могут возникнуть проблемы на пустом месте.
WhereTable1End := WordApp.ActiveDocument.Tables.item(4);
myRange := WordApp.ActiveDocument.Range(WhereTable1End.Cell(i + CurrLine, 1).Range.Start, (IDispatch(WhereTable1End.Cell(i + CurrLine, WhereTable1End.Columns.Count).Range) as RangeDisp).End_);
myRange.Cells.Merge;
myRange.ParagraphFormat.Alignment := wdAlignParagraphLeft;
myRange.Cells.Shading.BackgroundPatternColor := panLineBgrColor.Color;
WhereTable1End.Cell(i + CurrLine, 1).Range.Font.Bold := True;
WhereTable1End.Cell(i + CurrLine, 1).Range.Text := "вввв";

Первая строка через IDispatch только для того, чтобы в D7 не было проблем с ключевым словом end, можно заменить на WhereTable1End.Cell(i + 7, WhereTable1End.Columns.Count).Range.End)


 
KilkennyCat ©   (2009-05-27 13:48) [9]


> Александр © (27.05.09 12:58) [6]

http://ekrtf.code.net.ru/



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

Текущий архив: 2009.07.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
2-1243342539
jz
2009-05-26 16:55
2009.07.19
MDI формы


11-1203265400
andreil
2008-02-17 19:23
2009.07.19
7z и KOL


15-1241544646
palva
2009-05-05 21:30
2009.07.19
А чего ругаются, что Штирлица раскрасили?


15-1242419402
Юрий
2009-05-16 00:30
2009.07.19
С днем рождения ! 16 мая 2009 суббота


15-1242601996
game2345678
2009-05-18 03:13
2009.07.19
Проблема с запуском исходника приложения для работы с базами данн