Текущий архив: 2008.02.03;
Скачать: CL | DM;
Вниз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 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.053 c