Delphi生成多Sheet的Excel文件

Delphi生成多Sheet的Excel文件的代码。

 

----------------------------------------

 

uses ComObj;

//生成Excel表格头信息。//by JRQ 20091205
procedure CreatExcelTitle(ExlApp: OleVariant; SheetName: string);
var Range: OleVariant;
begin
    ExlApp.Cells[1, 1].Value := '序号';   //第一行第1列
    ExlApp.Cells[1, 2].Value := '档号';   //第一行第2列
    ExlApp.Cells[1, 3].Value := '题名';
    ExlApp.Cells[1, 4].Value := '起始日期';
    ExlApp.Cells[1, 5].Value := '终止日期';
    ExlApp.Cells[1, 6].Value := '保管期限';
    ExlApp.Cells[1, 7].Value := '密级';

    Range := ExlApp.WorkSheets[SheetName].Range['A1:G1']; //单元格从A2到M2 Range.Merge; //合并单元格
    Range.Rows.RowHeight := 25; //设置行高
    Range.HorizontalAlignment := 3; //水平对齐方式

    Range.Columns[1].ColumnWidth := 6;  //序号
    Range.Columns[2].ColumnWidth := 20; //档号
    Range.Columns[3].ColumnWidth := 60; //题名
    Range.Columns[4].ColumnWidth := 12; //起始日期
    Range.Columns[5].ColumnWidth := 12; //终止日期
    Range.Columns[6].ColumnWidth := 8;  //保管期限
    Range.Columns[7].ColumnWidth := 8;  //密级
end;


//数据集保存到Excel文件。by JRQ 20091205
function SaveToExcel(aFileName: string; aNum:string; aQry: TADOQuery): Boolean;
var
   isExist: Boolean;
   Row, i: Integer;
   ExcelApp, WorkBook, WorkSheet: OleVariant;
   SheetName, tmpSheetName: string;
begin
  Result := False;
  isExist := False;

  //判断磁盘上是否已经存在Excel文件。
  if FileExists(aFileName) then
     isExist := True;

  SheetName := '数据目录'+aNum; //第i个Sheet

  try
    ExcelApp := CreateOleObject('Excel.Application'); //首先创建 Excel 对象,使用ComObj:

    if isExist then
       ExcelApp.WorkBooks.Open(aFileName)   //打开已存在的工作簿
    else
       WorkBook := ExcelApp.WorkBooks.Add;  //新增一个工作簿

    for i := 1 to ExcelApp.WorkSheets.Count do
      begin
        tmpSheetName := ExcelApp.WorkSheets[i].Name;

        //如果有同名的Sheet,则删除之。
        if tmpSheetName = SheetName then
          begin
            //ExcelApp.WorkSheets[SheetName].Activate; //设置一个活动的Sheet
            //ExcelApp.WorkSheets[SheetName].Delete;   //删除

            ShowMessage('“' + SheetName + '”已经存在。请检查确认!');
            ExcelApp.ActiveWorkBook.Saved := True; //放弃保存
            ExcelApp.WorkBooks.Close; //关闭工作簿:

            if not VarIsEmpty(ExcelApp) then
              ExcelApp.Quit;

            Result := False;
            Exit;
          end;
      end;

    WorkSheet := ExcelApp.WorkSheets.Add; //新建一个Sheet
    ExcelApp.Visible := False;
    WorkSheet.Name := SheetName; //Sheet名称
    ExcelApp.WorkSheets[SheetName].Activate;
  except
    ShowMessage('创建 Excel 对象异常,生成Excel文件失败。请确认您的计算机是否安装了 Microsoft Office Excel 程序!');
    ExcelApp.Quit;
    Exit;
  end;

  CreatExcelTitle(ExcelApp, SheetName);
  Row := 1;

  try
    aQry.First;
    while not aQry.Eof do
      begin
        //写文件Excel
        Row := Row + 1;
        WorkSheet.Cells[Row, 1].Value := IntToStr(Row - 1); //'序号' ;
        WorkSheet.Cells[Row, 2].Value := aQry.FieldByName('KEYWORD').AsString;      //'档号'
        WorkSheet.Cells[Row, 3].Value := aQry.FieldByName('TITLE').AsString;        //'题名'
        WorkSheet.Cells[Row, 4].Value := aQry.FieldByName('ZRZ').AsString;          //'责任者'
        WorkSheet.Cells[Row, 5].Value := aQry.FieldByName('RECORDDATE').AsString;   //'日期'
        WorkSheet.Cells[Row, 6].Value := aQry.FieldByName('BGQX').AsString;         //'保管期限'
        WorkSheet.Cells[Row, 7].Value := aQry.FieldByName('MJ').AsString;           //'密级'
        WorkSheet.Cells[Row, 8].Value := aQry.FieldByName('CONTROLID').AsString;    //'划控'
        aQry.Next;
        application.ProcessMessages;
      end;

    try
      ExcelApp.WorkSheets['Sheet1'].Activate; //设置一个活动的Sheet
      ExcelApp.WorkSheets['Sheet1'].Delete;   //删除
      ExcelApp.WorkSheets['Sheet2'].Activate;
      ExcelApp.WorkSheets['Sheet2'].Delete;
      ExcelApp.WorkSheets['Sheet3'].Activate;
      ExcelApp.WorkSheets['Sheet3'].Delete;
    except
    end;

    if isExist then
    begin
      if not ExcelApp.ActiveWorkBook.Saved then
        ExcelApp.WorkBooks[1].Save;
    end
    else
      ExcelApp.WorkBooks[1].SaveAs(aFileName, 56); //fileformat:=56 -- Office Excel 97-2003 format
  finally
     //删除后重命名
     //tmpFileName := aFileName;
     //Delete(tmpFileName,Pos(ExtractFileExt(aFileName),aFileName),Length(ExtractFileExt(aFileName)));
     //tmpFileName:=tmpFileName+'_tmp'+ExtractFileExt(aFileName);
     //ExcelApp.ActiveSheet.SaveAs(tmpFileName,56); //fileformat:=56 -- Office Excel 97-2003 format
     {
     try
       if FileExists(aFileName) then
          DeleteFile(aFileName);

       RenameFile(tmpFileName, aFileName);
     except
     end;
     }

    ExcelApp.WorkBooks.Close; //关闭工作簿
    if not VarIsEmpty(ExcelApp) then
       ExcelApp.Quit;
    ExcelApp := Unassigned;
  end;
  Result := True;
end;

 

----------------------------------------

 

                                      by  JRQ 

                                2009/12/05 南京

posted @ 2009-12-31 21:59  程序员的那些  阅读(3979)  评论(0编辑  收藏  举报