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

Вниз

KOLComObj   Найти похожие ветки 

 
max727   (2007-06-25 17:50) [0]

Добрый день, подскажите пожалуйста, как хотя бы
запустить Excel, создать рабочюю книгу и написать пару строк
с помощью KOLComObj.pas (пишу на Delphi 6)

а то у сам уже замучился пробовать

строки
...
var
E:Variant;
begin
E:=CreateOleObject("Excel.Application");
...

компилируются, но уже в Run-time выкидывают ошибку
Exception in module KolComTest.exe at 0000010879

как правильно написать код для запуска Excel?


 
max727   (2007-06-26 18:33) [1]

Ну просветите меня кто-нить!
Не былоб нужды не стал бы засорять форум своими глупыми вопросами.
Сам ведь не смогу докапаться.


 
D[u]fa ©   (2007-06-26 18:59) [2]

OleInitia...... вызываешь перед созданием?


 
max727   (2007-06-26 19:28) [3]

теперь код выглядит так:

procedure TForm1.Button1Click(Sender: PObj);
var
E:Variant;
begin
OleUnInit;
E:=CreateOleObject("Excel.Application");
E.Application.Visible:=True;
end;

но программа все равно вываливается с ошибкой

не могли бы вы написать простенький пример вроде моего?


 
Vladimir Kladov   (2007-06-26 19:45) [4]

UnInit - это отмена Init. Английский учим, да?


 
max727   (2007-06-26 19:52) [5]

прошу прощения
день сегодня был запарный
вот и не заметил, что вместо OleInit
написал OleUnInit
теперь все работает спасибо D[u]fa

осталось пара вопросов
1. для чего нужно OleUnInit?
2. и как правильно освободить(незнаю или разрушить) пременную E,
     короче, как правильно завершить работу с Ole Automation сервером?


 
Vladimir Kladov   (2007-06-26 19:59) [6]

Это интерфейс. Уничтожается сам, так же как и вариант, если это локал, при выходе из области видимости (кажется, так). Если не локал, надо := nil делать (для варианта, что-то другое, не помню).


 
Vladimir Kladov   (2007-06-26 20:01) [7]

А, вспомнил: х := Unassigned;


 
max727   (2007-06-27 12:29) [8]

Большое спасибо!


 
max727   (2007-06-27 13:18) [9]

Попытался написать простенькую прогрмму
(такой же код на vcl прекрасно работает)
не получается ни открыть, ни добавить рабочую книгу

program XlsToDBF_v2;
{$DEFINE KOL}
uses Kol, KolComObj;

{$R *.res}
var
 Ex: Variant;
 OD: POpenSaveDialog;
begin
 OD := NewOpenSaveDialog("Open", "", DefOpenSaveDlgOptions);
 OD.Filter := "Файлы Excel|*.xls";
 if OD.Execute then
 begin
   OleInit;
   Ex := CreateOleObject("Excel.Application");
   Ex.Visible := True;
   MsgOK(OD.Filename);
   Ex.Workbooks.Open(OD.Filename);//тут вылетает ошибка
   Ex.Columns["A:A"].EntireColumn.AutoFit;
   Ex.Columns["B:B"].EntireColumn.AutoFit;
   Ex.Columns["C:C"].EntireColumn.AutoFit;
   Ex.Columns["D:D"].EntireColumn.AutoFit;
   Ex.Columns["E:E"].EntireColumn.AutoFit;
   Ex.Columns["F:F"].EntireColumn.AutoFit;
   Ex.Columns["G:G"].EntireColumn.AutoFit;
   Ex.Columns["F:F"].EntireColumn.AutoFit;
   Ex.Columns["G:G"].EntireColumn.AutoFit;
   Ex.Columns["H:H"].EntireColumn.AutoFit;
   Ex.Columns["I:I"].EntireColumn.AutoFit;
   Ex.Columns["J:J"].EntireColumn.AutoFit;
   Ex.Columns["K:K"].EntireColumn.AutoFit;
   Ex.Columns["L:L"].EntireColumn.AutoFit;
   Ex.Columns["M:M"].EntireColumn.AutoFit;
   Ex.Columns["N:N"].EntireColumn.AutoFit;
   Ex.Columns["O:O"].EntireColumn.AutoFit;
   Ex.Columns["P:P"].EntireColumn.AutoFit;
   Ex.Columns["Q:Q"].EntireColumn.AutoFit;
   Ex.Columns["R:R"].EntireColumn.AutoFit;
   Ex.Columns["S:S"].EntireColumn.AutoFit;
   Ex.Columns["T:T"].EntireColumn.AutoFit;
   Ex.Range["A1"].Select;
   Ex.Range[Ex.Selection, Ex.ActiveCell.SpecialCells(11)].Select;
   Ex.ActiveWorkbook.SaveAs(Filename := copy(OD.FileName, 1, length(OD.FileName) - 4) + ".dbf", FileFormat := 8, CreateBackup := False);
   Ex.ActiveWorkbook.Save;
   Ex.ActiveWorkbook.Close;
   Ex.Quit;
   OleUnInit;
 end;
 OD.Destroy;
end.


извините за назойливость
но у меня просто не не настолько велик багаж знаний, чтоб разобраться самому (первый год работаю только что техникум закончил)

как надо правильно написать, чтоб заработало?


 
max727   (2007-06-27 15:34) [10]

и еще странность обнаружилась

заменяю в uses KOLComObj на ComObj - все работает и размер программы 78 кб

меняю обратно - компилиться , но в run-time вываливается с ошибкой на той же строчке (см выше) и размер - 81 кб

скажите, пожалуйста, почему?


 
Vladimir Kladov   (2007-06-27 16:38) [11]

Я не работал с Excel из KOL. Если посмотрите на KOLWord, то увидите, что там вообще всеё не так же, как VCL, делается.


 
max727   (2007-06-29 18:05) [12]

program HelloWorld;


uses
KOL, KOLWord;

var W:PWordDocument;

begin
W:=NewWordDocument;
W.ObjInvoke( "Add", [], nil );
W.ObjName := "Selection";
W.ObjInvoke( "TypeText", [ sParam("Hello, Wor(L)d!") ], nil );
W.ObjName := "Application";
W.ObjPropBool["Visible"]:=True;
MsgOK("По идее должен показаться ворд, но его нет!");
W.Free;
end.


что неправильно?


 
Vladimir Kladov   (2007-06-29 20:09) [13]

W.ShowErrors := TRUE;

Где искать коды ошибок, я не помню (если вообще знал).


 
ANTPro ©   (2007-06-29 23:35) [14]

> [12] max727   (29.06.07 18:05)

Вот это в VCL работало. Может поможет...
//Экспорт таблицы в Microsoft Word

procedure TDM.ExportInWord(aQuery: TZQuery);
var
 i, j, g, CountVisibleFields: Integer;
 Word, WordDocument, WordSelection, WordTable: Variant;
begin
 CountVisibleFields := 0;
 Word := CreateOleObject("Word.Application");
 Word.Visible := True;
 WordDocument := Word.Documents.Add(EmptyParam, EmptyParam);
 WordSelection := Word.Selection;

 WordDocument := Word.ActiveDocument;
 if aQuery.Active then
 begin
   if aQuery.RecordCount <> 0 then
   begin
     for i := 0 to aQuery.FieldList.Count - 1 do
       if aQuery.FieldList.Fields[i].Visible then Inc(CountVisibleFields);
     WordTable := WordDocument.Tables.Add(WordSelection.Range, aQuery.RecordCount + 1, CountVisibleFields);

     g := 1;
     for i := 0 to aQuery.FieldList.Count - 1 do
       if aQuery.FieldList.Fields[i].Visible then
       begin
         WordTable.Cell(1, g).Range.Text := aQuery.FieldList.Fields[i].DisplayLabel;
         Inc(g);
       end;
     aQuery.First;
     for i := 1 to aQuery.RecordCount do
     begin
       g := 1;
       for j := 0 to aQuery.FieldList.Count - 1 do
         if aQuery.FieldList.Fields[j].Visible then
         begin
           WordTable.Cell(i + 1, g).Range.Text := aQuery.Fields.Fields[j].AsString;
           inc(g);
         end;
       aQuery.Next;
     end;
   end;
 end;
end;



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

Форум: "KOL";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.061 c
11-1183061021
[e]Bu$ter
2007-06-29 00:03
2008.02.03
UNICODE_CTRLS и TextAlign


2-1199783028
Washington
2008-01-08 12:03
2008.02.03
Нужно преобразовать строку в комманду


10-1142943441
tower
2006-03-21 15:17
2008.02.03
Подключение в ASP СОМ обьекта сделанного в Delphi


2-1199550291
Gal'cev
2008-01-05 19:24
2008.02.03
Как создать отчёт в клеточку?


2-1199874260
Ega23
2008-01-09 13:24
2008.02.03
Версия MSOffice





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