作者:万重

 

使用VBA可以随心所欲地操作Excel。同样,使用Delphi也能完全控制Excel的所有功能。下面,我们以一个例子来入手吧。

    在窗口Form1上面加入组件5Button1Checkbox组件,在Uses中加入Comobj单元,在Private加入下面的私有变量:

    private

    v:Variant;

    Sheet: Variant;

    {Private declarations}

    在单击事件中加入如下代码:

    procedure TForm1.Button1Clic{Sender:TObject};

    begin//打开EXCEL新建文件

    try

    v:= CreateOleObject('Excel.Application');

    v.Visible := CheckBox1.Checked;//是否显示EXCEL

    v.Workbooks.Add;//新建EXCEL文件

    v.Workbooks[1].WorkSheets[1].Name:= '电脑报';//第一页标题

    v.Workbooks[1].WorkSheets[2].Name = '编程乐园';

    v.Workbooks[1].WorkSheets[3].Name = '都来看呀';

    // Sheet:= v.Workbooks[1].WorkSheets['DELPHI演示'];//等效下面的语句

    Sheet:= v.Workbooks[1].WorkSheets[1];

    Sheet.Cells[1,1]='好看';//单元格内容

    Sheet.Cells[1,2]='确实';

    Sheet.Cells[2,1]='我喜欢';

    Except//错误处理

    Showmessage('初始化Excel失败,可能没装Excel,或者其他错误;请重起再试。);      v.DisplayAlerts := false;//是否提示存盘

    v.Quit;//退出EXCEL

    exit;

    end;

    Application.Restore;

    Application.BringToFront;

    end;

    其中,Comobj中包含了用来检索OLE的对象和向它传发命令的例程,第一行代码启动Excel,Excel这时是不可见的,只是在后台运行,所以第二行代码根据CheckBox1.Checked来确定是否显示EXCEL运行界面。如果要需要打开本身存在的EXCEL文件,则用v.Workbooks.Open(OpenDialog1.FileName);代替v.Workbooks.Add;就可以了。

    Sheet对象是很多页的集合,其他的Workbooks是工作簿的集合,WorkSheets对象是工作表的集合,Charts对象是图表的集合。

    //EXCEL文档格式设置

    procedure TForm1.Button5Click(Sender: TObject);

    var

    Range: Variant;

    begin

    if OpenDialog1.Execute then

    begin

    try

    v:= CreateOleObject('Excel.Application');

    v.Visible := CheckBox1.Checked;

    v.Workbooks.Open(OpenDialog1.FileName);

    Range := v.Workbooks[1].WorkSheets[1].Range['A2:G2'];//单元格从A2M2

    Range.Merge; //合并单元格

    Range.Rows.RowHeight := 50; //设置行高

    Range.Borders.LineStyle := 1; //加边框

    Range.Columns[2].ColumnWidth := 12; // 设置列宽

    Range.FormulaR1C1 := '合并区';

    Range.HorizontalAlignment := 3;//xlCenter(水平对齐方式) 

    Range.VerticalAlignment := 2;//xlCenter(垂直对齐方式) 

    Range.Characters.Font.Name := '宋体'; //字体

    Range.Characters.Font.FontStyle: = '加粗';

    Range.Characters.Font.Size := 15;

    Range.Characters.Font.OutlineFont := False;//是否有下划线

    Range.Characters.Font.ColorIndex := 0;//xlAutomatic//颜色

    except

    //出错处理,同Button1;

    end;

    end;

    end;

    //EXCEL打印页面设置及打印预揽

    procedure TForm1.Button4Click(Sender: TObject); 

    begin

    if OpenDialog1.Execute then

    begin

    try

    v:= CreateOleObject('Excel.Application'); 

    v.Visible := CheckBox1.Checked;

    v.Workbooks.Open(OpenDialog1.FileName); 

    Sheet:=v.Workbooks[1].WorkSheets[1];

    Sheet.PageSetup.PrintTitleRows :='$1:$3'; //页眉

    Sheet.PageSetup.PrintTitleColumns := '';

    Sheet.PageSetup.LeftFooter := '; 注:页脚'+' 总共&N'+'--&P'; //页脚

    Sheet.PageSetup.LeftMargin := 30; //设置边距

    Sheet.PageSetup.RightMargin := 30;

    Sheet.PageSetup.TopMargin := 30;

    Sheet.PageSetup.BottomMargin := 50;

    //Sheet.PageSetup.PrintQuality := 400; //分辨率根据打印机确定 

    Sheet.PageSetup.CenterHorizontally := True;//是否水平居中

    Sheet.PageSetup.CenterVertically := True; //是否垂直居中

    Sheet.PageSetup.Orientation := 2; //横向打印

    Sheet.PageSetup.Draft := False; //非草稿模式

    //Sheet.PageSetup.FirstPageNumber := xlAutomatic;

    Sheet.PageSetup.BlackAndWhite := True;//黑白稿

    Sheet.PageSetup.Zoom := 100; //缩放

    sheet.PrintPreView; //打印预览

    except

    //出错处理

    end;

    end;

    end;

    最后就是要关闭Excel了。在创建了Excel Application对象后,调用它的Quit方法完成关闭事件。

    //关闭EXCEL并退出

    procedure TForm1.Button3Click(Sender: TObject);

    begin

    try

    If not varIsEmpty(v) then

    begin

    // 如果需要在关闭前确定是否存盘,加入:

    // v.DiaplayAlert:=true; //确定存盘

    // v.DiaplayAlert:=false;//不存盘,直接退出

    v.WorkBooks[1].Close(True, 'C:\untitled.xls');//取文件名退出

    v.quit;

    end;

    finally

    Close;

    end;

    end;

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

 

 

Delphi编程中使用Excel

作者: 穆永

 

在数据库应用软件的开发过程中,经常需要把数据转换成Excel文件,让用户做进一步的数据处理。而Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?

  在Microsoft Office软件中有一种内嵌的编程语言,即VBA,它是VB的子集。利用它你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等(关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Office的安装目录下的VBAXL8.hlp帮助文件中找到)。另一方面,Microsoft Office软件中的宏能以VBA代码的形式记录下你的操作过程。因此借助宏操作可以很轻松地实现某一功能,并把这些代码稍作修改嵌入到你的软件中。但是VBA的一个缺点是:它必须在Microsoft Office平台上才能运行。因此,只有把VBA代码嵌入到Delphi中,才能实现用Delphi操作Excel

  下面举例说明这种调用方法。

  Unit excel;

  interface

  uses

  Windows,Messages,SysUtils,Classes,Graphics,

  Controls,Forms,Dialogs,StdCtrls,ComObj;{ComObj是操作OLE对象的函数集}type TForm1=

  class(TForm) 

  Button1: TButton;

  procedure Button1Click(Sender:TObject); 

  private

  {Private declarations}

  public

  {Public declarations}

  end;

  var

  Form1:TForm1;

  implementation

  {$R *.DFM}

  procedure TForm1.Button1Click(Sender: TObject); 

  var

  eclApp,WorkBook:Variant;{声明为OLE Automation对象}

  xlsFileName:string;begin

  xlsFileName:='ex.xls';

  try

  {创建OLE对象:Excel Application WorkBook}

  eclApp:=CreateOleObject('Excel.Application'); 

  WorkBook:=CreateOleobject('Excel.Sheet'); 

  except

  ShowMessage('您的机器里未安装Microsoft Excel.'); 

  Exit;

  end;

  try

  ShowMessage('下面演示:新建一个XLS文件,并写入数据,最后关闭它'); 

  workBook:=eclApp.workBooks.Add;

  eclApp.Cells(1,1):='字符型';

  eclApp.Cells(2,1):='Excel文件';

  eclApp.Cells(1,2):='Money';

  eclApp.Cells(2,2):=10.01;

  eclApp.Cells(1,3):='日期型'eclApp.Cells(2,3):=Date;

  WorkBook.saveas(xlsFileName); 

  WorkBook.close;

  ShowMessage('下面演示:打开刚创建的XLS文件,并修改其中的内容。然后,由用户决定是否保存。'); 

  WorkBook:=eclApp.workBooks.Open(xlsFileName); 

  eclApp.Cells(2, 1):='Excel文件类型';

  if MessageDlg(xlsFileName+'文件已被修改,是否保存?',mtConfirmation,[mbYes,mbNo ],0)= mrYes then

  WorkBook.save

  else

  workBook.Saved: = True;{放弃修改}

  WorkBook.Close;

  eclApp.Quit;//退出Excel Application

  {释放VARIANT变量}

  eclApp:=Unassigned;

  except

  ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误'); 

  WorkBook.close;

  eclApp.Quit;

  {释放VARIANT变量}

  eclApp=Unassigned;

  end;

  end;

  end.

  了解上述操作过程后,我们可以很容易地将数据库中的数据转换成Excel文件了。