Главная страница
    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.48 MB
Время: 0.003 c
15-1242275651
TheEd
2009-05-14 08:34
2009.07.19
Бла, бла, что за фигня - TPageControl не отрабатывает OnChange!


2-1243338190
fox77
2009-05-26 15:43
2009.07.19
api функция цвет TBrush


15-1242636295
@!!ex
2009-05-18 12:44
2009.07.19
Реализация JumpHook на Delphi


15-1242481492
@!!ex
2009-05-16 17:44
2009.07.19
Не могу получить хэндл процесса.


4-1212148677
ShaGunRe
2008-05-30 15:57
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский