我想將DBGRID中的若干行數據寫入EXCEL中寫到這裡卻不知怎樣寫:
var ExcelApp: Variant;
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.Visible := True;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );
ExcelApp.WorkSheets[1].Activate;
以下怎樣寫
.
.
.
end;
還有就是:有沒有方法創建一個動態的EXCEL也就是不要ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );這一句,能動態生成與( 'd:\print\order.xls' )表格標頭一樣的文檔。
var ExcelApp: Variant;
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.Visible := True;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );
ExcelApp.WorkSheets[1].Activate;
以下怎樣寫
.
.
.
end;
還有就是:有沒有方法創建一個動態的EXCEL也就是不要ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );這一句,能動態生成與( 'd:\print\order.xls' )表格標頭一樣的文檔。
i, row, col : Integer;
begin
if Query1.FieldCount > 0 then
begin
Try
ExcelApplication1.Connect;
Except
ShowMessage(ExcelConError);
Abort;
end;
ExcelApplication1.Workbooks.Add(emptyParam,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet); for i:=0 to Query1.FieldCount-1 do
begin
ExcelWorkSheet1.Cells.Item[1,i+1] := Query1.Fields[i].FieldName;
end;
row := 2;
while not(Query1.Eof) do
begin
col := 1;
for i:=0 to Query1.FieldCount-1 do
begin
ExcelWorkSheet1.Cells.Item[row,col] := Query1.Fields[i].AsString;
col := col+1;
end;
Query1.Next;
row := row+1;
end; if SaveDialog1.Execute then
begin
ExcelWorkSheet1.SaveAs(SaveDialog1.FileName);
ShowMessage('成功导出数据.');
end; ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
end // if Query1.FieldCount
else
ShowMessage('没有数据.');
end;
MSExcel:Variant;
i,j,k,l:Integer;
begin
if Screen.ActiveControl.ClassName<>'TDBGrid' then
begin
Messagebox(handle,'请选择表格后再试','提示',$40);
exit;
end;
try
MSExcel := CreateOleObject('Excel.Application');
except
Application.MessageBox('不能打开 Microsoft Excel.','错误',MB_OK+MB_ICONERROR);
Exit;
end;
MSExcel.Workbooks.Add();
MSExcel.Visible:=true;
k:=TDBGrid(Screen.ActiveControl).DataSource.DataSet.RecordCount-1;
l:=TDBGrid(Screen.ActiveControl).Columns.Count-1;
for j:=0 to l do
begin
MSExcel.Workbooks[1].Sheets[1].Cells[1,j+1]:=TDBGrid(Screen.ActiveControl).Columns[j].Title.Caption;
end;
TDBGrid(Screen.ActiveControl).DataSource.DataSet.First;
for i:=0 to k do
begin
for j:=0 to l do
begin
if I = 0 then
MSExcel.Workbooks[1].Sheets[1].Columns[J + 1].ColumnWidth := TDBGrid(Screen.ActiveControl).Columns[j].Width div 6;
MSExcel.Workbooks[1].Sheets[1].Cells[i+2,j+1]:=
TDBGrid(Screen.ActiveControl).DataSource.DataSet.FieldByName(TDBGrid(Screen.ActiveControl).Columns[j].FieldName).AsString;
end;
TDBGrid(Screen.ActiveControl).DataSource.DataSet.Next;
end;
这个是一个通用的,只要activecontrol是DBGrid就可以用(MDI窗口)