library Excel;uses
ShareMem, SysUtils, Classes, Excel97, ComObj, DBTables;{$R *.RES}procedure ExportToExcel; stdcall;
var
xlApp: ExcelApplication;
AWorkbooks: Workbooks;
AWorkbook: ExcelWorkbook;
AWorksheets: Sheets;
AWorksheet: ExcelWorksheet;
ARange: Range;
i, j: Integer;
ADataSet: TTable;
begin
try
xlApp := CreateOleObject('Excel.Application') as ExcelApplication;
except
on E: Exception do
raise Exception.Create(E.Message);
end;
AWorkbooks := xlApp.Workbooks;
AWorkbook := AWorkbooks.Add(xlWorksheet4, 0);
AWorksheets := AWorkbook.Worksheets;
AWorksheet := AWorkSheets.Get_Item(1) as ExcelWorksheet;
AWorksheet.Name := 'Using Delphi to control Excel. '; AWorksheet.Activate(0);
ARange := AWorksheet.Range['C1', 'C1'];
ARange.Select;
ARange.ColumnWidth := 20;
AWorksheet.Cells.Item[1, 3].Value := 'Wish you success! '; ADataSet := TTable.Create(nil);
try
ADataSet.DatabaseName := 'DBDemos';
ADataSet.TableName := 'Country.db'; with ADataSet do
begin
Active := True; try
for i := 0 to ADataSet.FieldCount-1 do
AWorksheet.Cells.Item[3, i+1].Value := ADataSet.Fields[i].FullName; First;
i := 4;
while not Eof do
begin
Inc(i);
for j := 0 to FieldCount-1 do
AWorksheet.Cells.Item[i, j+1] := Fields[j].AsString;
Next;
end;
finally
Active := False;
end;
end;
finally
FreeAndNil(ADataSet);
end;
end;exports
ExportToExcel;begin
end.
ShareMem, SysUtils, Classes, Excel97, ComObj, DBTables;{$R *.RES}procedure ExportToExcel; stdcall;
var
xlApp: ExcelApplication;
AWorkbooks: Workbooks;
AWorkbook: ExcelWorkbook;
AWorksheets: Sheets;
AWorksheet: ExcelWorksheet;
ARange: Range;
i, j: Integer;
ADataSet: TTable;
begin
try
xlApp := CreateOleObject('Excel.Application') as ExcelApplication;
except
on E: Exception do
raise Exception.Create(E.Message);
end;
AWorkbooks := xlApp.Workbooks;
AWorkbook := AWorkbooks.Add(xlWorksheet4, 0);
AWorksheets := AWorkbook.Worksheets;
AWorksheet := AWorkSheets.Get_Item(1) as ExcelWorksheet;
AWorksheet.Name := 'Using Delphi to control Excel. '; AWorksheet.Activate(0);
ARange := AWorksheet.Range['C1', 'C1'];
ARange.Select;
ARange.ColumnWidth := 20;
AWorksheet.Cells.Item[1, 3].Value := 'Wish you success! '; ADataSet := TTable.Create(nil);
try
ADataSet.DatabaseName := 'DBDemos';
ADataSet.TableName := 'Country.db'; with ADataSet do
begin
Active := True; try
for i := 0 to ADataSet.FieldCount-1 do
AWorksheet.Cells.Item[3, i+1].Value := ADataSet.Fields[i].FullName; First;
i := 4;
while not Eof do
begin
Inc(i);
for j := 0 to FieldCount-1 do
AWorksheet.Cells.Item[i, j+1] := Fields[j].AsString;
Next;
end;
finally
Active := False;
end;
end;
finally
FreeAndNil(ADataSet);
end;
end;exports
ExportToExcel;begin
end.
利用DllProc变量 和ExitProc一样,DllProc也是一个在Systemd单元中预定义的变量。在使用DLLProc时, 必须先写好一个具有以下原型的程序: procedure DLLHandler(Reason: integer);并在library的begin..end.之间, 将这个DLLHandler程序的执行地址赋给DLLProc中, 这时就可以根据参数Reason的值分别作出相应的处理。另外注意要将Windows单元加入uses子句。示例如下: library TestDLL; ... procedure MyDLLHandler(Reason: integer); begin case Reason of DLL_Process_Attach:CoInitialize //整个DLL的初始化代码 DLL_Process_Detach: //整个DLL的善後程序 DLL_Thread_Attach: //当主叫端开始一个Thread时 DLL_Thread_Detach: //当主叫端终止一个Thread时 end; end; ... begin ... //初始化代码 DLLProc := @MyDLLHandler; MyDLLHandle(DLL_Process_Attach); end.
记得工程中添加ActiveX单元。
你在dll中使用ActiveX, 必須用 CoInitialize(nil) 先進行初始化!!!
ActiveX.CoInitialize(nil);finalization
ActiveX.CoUninitialize;我已经搞定.
谢谢.