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

Вниз

Работа с таблицами в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1242636295
@!!ex
2009-05-18 12:44
2009.07.19
Реализация JumpHook на Delphi


11-1203694121
Алексей К.
2008-02-22 18:28
2009.07.19
Не удаётся получить объект Sender в обработчике...


2-1242918381
Alex_C
2009-05-21 19:06
2009.07.19
Парсинг HTML


2-1243330944
fs
2009-05-26 13:42
2009.07.19
access violation при закрытии приложения (DLL)


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский