procedure DataToExcel(dataset:tdataset;Str:String);
var
XLApp: Variant;
i,j: Integer;
Sheet: Variant;
Book:TBookStr;
begin
if (dataset.state=dsInactive) or (dataset.Isempty) then exit;
try
begin
dataset.DisableControls;
Book:=dataset.Book;
try
begin
XLApp:= CreateOleObject('Excel.Application');
XLApp.Visible := True;
XLApp.Workbooks.Add(ExtractFilePath(Application.ExeName)+Str);
XLApp.Workbooks[1].WorkSheets[1].Name := 'Delphi Data';
Sheet := XLApp.Workbooks[1].WorkSheets['Delphi Data'];
// for I:=1 to dataset.FieldCount do Sheet.Cells[1, i]:=dataset.Fields[i-1].FullName;
j:=2;
dataset.First;
while not dataset.eof do
begin
for i := 1 to dataset.fieldcount do
Sheet.Cells[j, i] :=dataset.FieldByName (dataset.fields[i-1].FieldName ).AsString;
j:=j+1;
dataset.next;
end;
end;
except
on E:Exception do
begin
Application.MessageBox('打开Excel出错,检测您的Excel是否已经正确的安装或者打开的模板是否存在!','错误,提示!',MB_OK+MB_ICONERROR);
dataset.EnableControls;
dataset.Book:=Book;
system.Exit ;
end;
end;
end;
finally
begin
dataset.EnableControls;
dataset.Book:=Book;
end;
end;
end;
var
XLApp: Variant;
i,j: Integer;
Sheet: Variant;
Book:TBookStr;
begin
if (dataset.state=dsInactive) or (dataset.Isempty) then exit;
try
begin
dataset.DisableControls;
Book:=dataset.Book;
try
begin
XLApp:= CreateOleObject('Excel.Application');
XLApp.Visible := True;
XLApp.Workbooks.Add(ExtractFilePath(Application.ExeName)+Str);
XLApp.Workbooks[1].WorkSheets[1].Name := 'Delphi Data';
Sheet := XLApp.Workbooks[1].WorkSheets['Delphi Data'];
// for I:=1 to dataset.FieldCount do Sheet.Cells[1, i]:=dataset.Fields[i-1].FullName;
j:=2;
dataset.First;
while not dataset.eof do
begin
for i := 1 to dataset.fieldcount do
Sheet.Cells[j, i] :=dataset.FieldByName (dataset.fields[i-1].FieldName ).AsString;
j:=j+1;
dataset.next;
end;
end;
except
on E:Exception do
begin
Application.MessageBox('打开Excel出错,检测您的Excel是否已经正确的安装或者打开的模板是否存在!','错误,提示!',MB_OK+MB_ICONERROR);
dataset.EnableControls;
dataset.Book:=Book;
system.Exit ;
end;
end;
end;
finally
begin
dataset.EnableControls;
dataset.Book:=Book;
end;
end;
end;
我想知道的是如何实现用户在dbgrid中选择某些字段来打印,
并不是所有字段都打印
然后在输出时跟据这些特定信息选择输出。复杂一点:造一个临时表,DBGrid 中各列的标题等信息都放进去,
再开个画面让用户去选择,最后跟据表内容去选择输出, 这样就有保存设置余地。