要控制每列的格式,都是自己写导出的代码(速度当然和ExportGrid4ToExcel无法相比) { 将cxGrid中的数据导入 Excel 中 GridName: 需打印的DBGrid RepCapt: Excel标题 StrCol: 格式化字段为字符型的列序号 (-1-2-3-4-..10-..N..) } Procedure DBGrdToExcel(GridName: TcxGridDBTableView; RepCapt,StrCol: string); var XLApp, sheet, Range: Variant; I,J,t:Integer; begin If (GridName.DataController.DataSource = Nil) or (GridName.DataController.DataSource.DataSet = Nil) or (GridName.DataController.DataSource.DataSet.Active = False) then begin Application.MessageBox('无效的数据源或数据源未打开','提示',0); Exit; end; t := 1; XLApp:=CreateOleobject('Excel.Application'); XLApp.visible := False; XLApp.Workbooks.add(XlWBatWorkSheet); XLApp.Workbooks[1].worksheets[1].name:='BES'; Range:=XLApp.workbooks[1].Worksheets['BES'].Columns; sheet:=XLApp.Workbooks[1].worksheets['BES']; sheet.cells[t,1]:=COMPANYNAME; I:= GridName.ColumnCount-1; if I < 3 then I := 3; sheet.cells[t,I]:='Date:'+DateTimeToStr(Now); sheet.cells[t+2,I div 2] := RepCapt; sheet.cells[t+2,I div 2].Font.Color := clRed; sheet.cells[t+2,I div 2].Font.Size := 14; Sheet.cells[t+2,I div 2].Font.FontStyle := 'Bold'; Inc(t,4); For J:=1 to GridName.ColumnCount do begin if GridName.Columns[J-1].Width <= 0 then Range.Columns[J].Columnwidth := 18 else Range.Columns[J].Columnwidth := GridName.Columns[J-1].Width Div 6; sheet.cells[t,J] := GridName.Columns[J-1].Caption ; if Pos('-'+IntToStr(J)+'-',StrCol) <> 0 then Range.Columns[J].NumberFormatLocal := '@'; end; Inc(t); with GridName.DataController.DataSource.DataSet do begin First; I := 0; while not eof do begin For J:=0 to GridName.Columncount-1 do if Trim(GridName.Columns[J].DataBinding.FieldName) <> '' then sheet.cells[I+t,J+1] := FieldByName(GridName.Columns[J].Databinding.FieldName).AsString; Inc(I); Next; end; end; XLApp.visible := True; end;例:如需将Excel中的第1、3、5列设为文本列,则将过程中的参数StrCol 设为'-1-3-5-'即可
cxExportGrid4Link;
////////////////begin
ExportGrid4ToEXCEL('c:\test.xsl',cxGrid1,True,True);
end;
GARNETT2183(極品狼王)大哥,我要的是....
这是导出方法.
http://community.csdn.net/Expert/topic/4579/4579018.xml?temp=7.172793E-02
GridName: 需打印的DBGrid
RepCapt: Excel标题
StrCol: 格式化字段为字符型的列序号 (-1-2-3-4-..10-..N..) }
Procedure DBGrdToExcel(GridName: TcxGridDBTableView; RepCapt,StrCol: string);
var XLApp, sheet, Range: Variant;
I,J,t:Integer;
begin
If (GridName.DataController.DataSource = Nil) or (GridName.DataController.DataSource.DataSet = Nil) or
(GridName.DataController.DataSource.DataSet.Active = False) then
begin
Application.MessageBox('无效的数据源或数据源未打开','提示',0);
Exit;
end;
t := 1;
XLApp:=CreateOleobject('Excel.Application');
XLApp.visible := False;
XLApp.Workbooks.add(XlWBatWorkSheet);
XLApp.Workbooks[1].worksheets[1].name:='BES';
Range:=XLApp.workbooks[1].Worksheets['BES'].Columns;
sheet:=XLApp.Workbooks[1].worksheets['BES'];
sheet.cells[t,1]:=COMPANYNAME;
I:= GridName.ColumnCount-1;
if I < 3 then I := 3;
sheet.cells[t,I]:='Date:'+DateTimeToStr(Now);
sheet.cells[t+2,I div 2] := RepCapt;
sheet.cells[t+2,I div 2].Font.Color := clRed;
sheet.cells[t+2,I div 2].Font.Size := 14;
Sheet.cells[t+2,I div 2].Font.FontStyle := 'Bold';
Inc(t,4);
For J:=1 to GridName.ColumnCount do
begin
if GridName.Columns[J-1].Width <= 0 then
Range.Columns[J].Columnwidth := 18
else
Range.Columns[J].Columnwidth := GridName.Columns[J-1].Width Div 6;
sheet.cells[t,J] := GridName.Columns[J-1].Caption ;
if Pos('-'+IntToStr(J)+'-',StrCol) <> 0 then
Range.Columns[J].NumberFormatLocal := '@';
end;
Inc(t);
with GridName.DataController.DataSource.DataSet do
begin
First;
I := 0;
while not eof do
begin
For J:=0 to GridName.Columncount-1 do
if Trim(GridName.Columns[J].DataBinding.FieldName) <> '' then
sheet.cells[I+t,J+1] := FieldByName(GridName.Columns[J].Databinding.FieldName).AsString;
Inc(I);
Next;
end;
end;
XLApp.visible := True;
end;例:如需将Excel中的第1、3、5列设为文本列,则将过程中的参数StrCol 设为'-1-3-5-'即可