Страница 1 из 1
Добавлено: 22 май 2004, 23:14
Naeel Maqsudov
Все действия над объектами MSOffice выполняются в Delphi совершенно аналогично VBA.
Только надо учитывать некоторые особенности синтаксиса. Наример
VBA: ...Cells(1,1)
Pascal: ...Cells[1,1]
Для работы с границами используется коллекция Borders
VBA: Ячейка.Borders(xlEdgeBottom).LineStyle = xlContinuous
Pascal: Ячейка.Borders[9].LineStyle=1
Значения констант VBA для нас в Excel.pas никто не прописал, поэтому возьмем VBA выполним макрос
Код: Выделить всё
Sub zzz()
MsgBox xlEdgeBottom & ", " & xlContinuous
End Sub
Вот откуда взялись 9 и 1
Re: Delphi and Excel
Добавлено: 24 авг 2007, 11:16
vav1lon
Такой вопрос
вот я выполняю
Код: Выделить всё
procedure ExportDBGrid(toExcel: Boolean);
var
bm: TBookmark;
col, row: Integer;
sline: string;
ExcelApp: Variant;
begin
Form1.Button3.Enabled := false;
Form1.DBGrid1.DataSource.DataSet.DisableControls;
bm := Form1.DBGrid1.DataSource.DataSet.GetBookmark;
Form1.DBGrid1.DataSource.DataSet.First;
if toExcel then
begin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheets[1].name := 'ErrorsDB';
end;
Form1.mem.Visible := false;
Form1.mem.Parent := Form1;
Form1.mem.Clear;
sline := '';
for col := 0 to Form1.DBGrid1.FieldCount-1 do
sline := sline + Form1.DBGrid1.Fields[col].DisplayLabel + #9;
Form1.mem.Lines.Add(sline);
for row := 0 to Form1.DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
sline := '';
for col := 0 to Form1.DBGrid1.FieldCount-1 do
sline := sline + Form1.DBGrid1.Fields[col].AsString + #9;
Form1.mem.Lines.Add(sline);
Form1.DBGrid1.DataSource.DataSet.Next;
end;
Form1.mem.SelectAll;
Form1.mem.CopyToClipboard;
if toExcel then
begin
ExcelApp.Workbooks[1].WorkSheets['ErrorsDB'].Paste;
ExcelApp.Visible:=true;
end;
FreeAndNil(ExcelApp);
Form1.DBGrid1.DataSource.DataSet.GotoBookmark(bm);
Form1.DBGrid1.DataSource.DataSet.FreeBookmark(bm);
Form1.DBGrid1.DataSource.DataSet.EnableControls;
end;
Все выполняется ок. он создает книгу закидывает вне мемо но
- после формирования книги вылетает ошибка
ACCESS VIOLATION AT ADDRESS 0040366A IN MODULE MYPROGS.EXE. READ OF ADDRESS 0000009
- после закрытия сформированной книги в через диспетчер задач обнаружил что у меня висит EXECL.EXE хотя я свою книгу закрыл и в трее тоже ничего нету.
Как быть...