轉摘
delphi作为一个出色的rad,强大的数据库功能是其最重要的特色之一,但是操纵困难的quickreport控件常常不能满足数据库报表的需要.如果你的报表非常复杂,或者要求灵活地改变格式,那么使用excel作为报表服务器是一个不错的选择.delphi从版本5开始提供的excel组件极大地简化了ole自动化技术的应用.不过缺漏多多的帮助文件一直是delphi最令人诟病的地方,这些新组件也不例外,本文试图对此作一较详细地介绍. 【程序编程相关:第一次接触Delphi 】 【推荐阅读:偶的第二个Delphi程序 】excel的对象模型是一个树状的层次结构,根是应用程序本身,工作簿workbook是根对象的属性对象,本文主要讨论的用于数据交换的worksheet则是工作簿的属性对象,详情参阅msoffice提供的excel vba帮助文件.在delphi中控制excel首先要与服务器程序建立连接,打开工作簿,然后与目标工作表交换数据,最后断开连接. 【扩展信息:修改XPMenu让ToolButton在】打开excel工作簿
我们的例子从一个带有tstringgrid(当然要填上一些数据)与两个按钮的主窗体开始,从控制面板的servers页签中拖一个texcelapplication控件放到窗体上.首先把connectkind设为ckrunningornew,表示如果能够检测到运行的excel实例则与其建立联系,否则启动excel.另外,如果希望程序一运行即与服务器程序建立联系,可以把autoconnect属性设为true. 与excel建立联系只要一条语句就可以了: excel . connect; 也许你已经注意到servers页签上还有其他几个excel控件,这些控件通过connectto方法可以与前面的excel联系在一起: excelworkbook1.connectto(excel . activeworkbook); excelworksheet1.connectto(excel . activesheet as _worksheet); excelworksheet2.connectto(excel . worksheets.item[sheet2] as _worksheet); 要注意,使用connectto方法前必须先打开相应的工作簿或工作表,另外这些控件在多数情况下并不会带来额外的便利,因此最好只使用一个texcelapplication. 一旦与excel服务器建立联系,就可以创建新的工作簿: var wkbook : _workbook; lcid : integer; ... lcid := getuserdefaultlcid(); wkbook := excel.workbooks.add(emptyparam, lcid); add函数的第一个参数用于定义新建工作簿所使用的模板,可以使用xlwbatchart.xlwbatexcel4intlmacrosheet. xlwbatexcel4macrosheet或者xlwbatworksheet常量,也可以是已有的xls文件名.这里的emptyparam是variants单元与定义的变量,表示使用默认的通用模板创建新工作簿. 如果打开已有的xls文档,则应把要打开的文件名作为第一个参数传递给open函数: wkbook:=excel.workbooks.open(edtdesfile.text,emptyparam,emptyparam, emptyparam,emptyparam,emptyparam,emptyparam, emptyparam,emptyparam,emptyparam,emptyparam, emptyparam,emptyparam,lcid); 要知道,所有的数据操作主要是针对活动工作表而言的,下面的语句使用一个_worksheet变量代表当前的活动单元格.如果知道工作表的名称,其中的索引号可以用工作表名代替: wksheet:=wkbook.sheets[1] as _worksheet; 完成数据交换后需要保存工作簿: excel.activeworkbook.saveas (myoutput, emptyparam,emptyparam, emptyparam, emptyparam, emptyparam, emptyparam, emptyparam, emptyparam, ... 下一页