delphi 表格数据导出到excel

procedure TfrmMain.xGridDataToExcel(mGrid: TStringGrid; pTitle, SePTitle,
pTail, pStrCols: string);
var
i,j:integer;
strlist:Tstringlist;
str,Filename:string;
h,k:integer;
Excelid: OleVariant;
s: string;
v,sheet,range:variant;
icol,irow:integer;
nCols:integer;
nCurrCol:integer;
nCurrRow:integer;
begin
excelSaveto.Title:='请选择需要导出到的目标文件';
if excelSaveto.Execute = false then exit;
Filename:=trim(excelSaveto.FileName);
nCols := 0;
for j:=0 to mGrid.ColCount - 1 do begin
      if mGrid.ColWidths[j]>0 then nCols := nCols + 1;
end;
if nCols = 0 then begin
      showmessage('没有数据,无法导出!');
      exit;
end;
//导出到excel表格
try
    Excelid := CreateOLEObject('Excel.Application');
except
    Application.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
    Exit;
end;
Excelid.Visible := false;
//Excelid.Visible := true;
Excelid.WorkBooks.Add;
//Excelid.WorkBooks[1].WorkSheets[1].Name := pTitle;
Sheet := Excelid.Workbooks[1].WorkSheets[1];
//标题
sheet.cells[1, 1] := pTitle;
sheet.range[sheet.cells[1, 1],sheet.cells[1,nCols]].Select; //选择该列
Excelid.selection.HorizontalAlignment := $FFFFEFF4;                               //居中
Excelid.selection.MergeCells := True;
//小标题
nCurrRow := 2;
if SePTitle <> '' then begin
    Sheet.Cells[2,1] := SePTitle;
    sheet.range[sheet.cells[2, 1],sheet.cells[2,nCols]].Select; //选择该列
    //Excelid.selection.HorizontalAlignment := $FFFFEFF4;                               //居中
    Excelid.selection.MergeCells := True;
    //表体(包括表头)
    nCurrRow := 3;
end;

for i:=0 to mGrid.RowCount-1 do begin
    nCurrCol := 1;
    for j:=0 to mGrid.ColCount-1 do begin
      if mGrid.ColWidths[j]>0 then begin
        if pos(','+inttostr(j)+',', ','+pStrCols+',')<>0 then begin //导出为字符串格式
          Sheet.Cells[nCurrRow,nCurrCol].NumberFormatLocal := '@';
          Sheet.Cells[nCurrRow,nCurrCol] := mGrid.Cells[j,i];
        end else begin
          Sheet.Cells[nCurrRow,nCurrCol] := mGrid.Cells[j,i];
        end;
        nCurrCol := nCurrCol + 1;
      end;
    end;
    nCurrRow := nCurrRow + 1;
end;
//表尾文字
Sheet.Cells[nCurrRow,1] := pTail;
sheet.range[sheet.cells[nCurrRow, 1],sheet.cells[nCurrRow,nCols]].Select; //选择该列
Excelid.selection.HorizontalAlignment := $FFFFEFF4;                               //居中
Excelid.selection.MergeCells := True;
try
    sheet.cells[1,1].Select;
    Excelid.Workbooks[1].SaveAs(FileName);
    Excelid.Workbooks[1].close;
    Excelid.Quit;
except
    Excelid.Quit;        //有时写完后立即退出,但写进程还占用着该文件,不允许退出,所以这里再退出一次
end;                   //实际上就是设一点点延迟,
Excelid := Unassigned;
end;

posted @ 2011-12-10 20:39  wmymtx  阅读(715)  评论(0编辑  收藏  举报