1、WPS表格初级教程第九章delphi操作wps表格在很多人看来,wps表格2007与Excel外观相似,并且兼容性很强,这是wps office 2007的一大特色,其实我觉得wps office 2007的最大特色、最大进步是其强大的二次开发功能。它不仅有强大的二次开发功能,而且其二次开发方法与word、excel 一样。以前我们常常见到一些管理类的软件中的一个功能,那就是数据导出到Excel,现在由于wps office 2007具有二次开发功能,我们也可以实现数据导出到wps表格了。附:在我们所设计的系列软件中,只要涉及到打印,都与wps表格有关系。在软件设计之初,我们考虑用一般的报表控
2、件的,如“水晶报表、ActiveReport 等,但这些控件的灵活性不太好,如页面设置,字体字号颜色设置,行高列宽设置等。当然,这些控件我们是能随心所欲的设计的,但设计好后就固定死了,用户是不能调整的,或调整的权限很少。为此我们多方研究,最终决定用wps表格来解决该软件的打印问题,用wps表格来作为我们的报表控件。用wps表格来做报表主要有以下优点:1.实现了导出到wps表格功能,在wps表格中,用户可以任意的排版打印,。2.实现了用wps表格套打。给用户一个wps表格文件,里面包括各种单据的样表,用户可以任意设置这些样表,包括字体字号颜色,纸张大小,页边距,行 高列宽等等,设置好后,保存。那
3、么数据导出到wps表格时,就按用户设置好的样式导出了,然后打印即可。并且实现了在不用用户参与情况,软件自动调 用用户设置的样表的样式,然后打印输出。设计过报表打印的朋友可能都知道,这个报表打印设计起来是很麻烦的,个客户一个样,程序员的很大精力都放在打印上了,并且总也不能让用户满意。但在我们这个软件中,我们将软件的打印工作交给了 wps表格与用户,与我们软件设计者没有关系了。到目前为止,没有一个客户因为打印效果不好而埋怨 我们的软件,他们都会想办法自己解决。3.数据的二次计算。软件设计人员设计的软件功能再丰富,总也有想不到的地方,这些问题如何解决?在这里,我们可以将数据导出到wps表格中后,进行
4、 二次计算,想怎么算就怎么算,想如何统计就如何统计,等于丰富了软件的功能。在这里非常感谢金山公司的员工,金山公司的员工给我们提供了很多技术支持,甚至帮我们写了些源码。下面,我将我总结的delphi操作wps表格的经验整理出来,奉献给大家,希望与大家共同进步。-、启动delphi后,新建一个应用程序。将程序中的forml的标题改为delphi操作wps表格示例。如图9T所示。图9-1:、在interface的uses中添加单元comob jo如下所示。usesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Di
5、alogs,StdCtrls,comobj;三、定义wps表格变量,此处定义为全局的,以便调用。varForml:TForml;etapp:olevariant;my workbook:OleVariant;定义金山表格的工作簿对象1WPS表格初级教程implementation四、启动wps表格在forml窗口中添加一个按钮Button 1,caption设置为标题。如图9-2所示。图9-2然后设置该按钮的单击事件。procedure TForm 1.Button 1 Cl ick(Sender:TObject);beginetapp:=c r eateoleob jec t(et.appl
6、 ic at ion*);启 动 wps 表格end;此时,运行该程序,界面如图93,点击按钮,即可启动wps表格。图93五、关闭wps表格添加一个按钮,在它的单击事件中添加如下代码。procedure TForm 1.Button2Click(Sender:TObject);begin etApp.Quit;/退出金额表格end;下面我们往窗体中添加如下按钮,并分别设置其标题,如图9-4所示。2WPS表格初级教程图9-4六、wps表格窗口的隐藏procedure TForml.Button4Click(Sender:TObject);beginetApp.Visible:=false;窗 口
7、隐藏 end;七、wps表格窗口的显示procedure TForm 1.Button4Cl ick(Sender:TObject);beginetApp.Visible:=true;窗 口显示 end;八、新建工作簿procedure TForm 1.Button9Cl ick(Sender:TObject);beginmy workbook:=etapp.Workbooks.add;添力口工作簿end;九、打开指定工作簿procedure TForm 1.Button8Cl ick(Sender:TObject);beginmyworkbook:=etapp.Workbooks.Open(
8、ExtractFilePath(ParamStr(0)+,库存管理报表.et);/打开当前目录下的 库存管理报表e 文件。end;十、指定某工作表为当前工作表procedure TForm 1.Button5Cl ick(Sender:TObject);beginetapp.Workbooks.Close;先关闭当前打开的内容etapp.Workbooks.Close(false);如果用这句代码,那么关闭是不提示是否保存myworkbook etapp.Workbooks.Open(ExtractFilePath(ParamStr(0)+库存管理报表.et);打开文件myworkbook.W
9、orkSheets原材料入库单.Activate;指定原材料进货单为当前工作表end;H、指定sheet2为当前工作表procedure TForm 1.Button6Cl ick(Sender:TObject);beginetapp.Workbooks.Close;为防止出错,先将当前文件关闭myw orkbook:=etapp.Workbooks.add;新建工作簿myworkbook.WOTkSheetst*sheet2,.Activate;将 sheet2 指定为当前工作表end;十二、往单元格中赋值procedure TForm 1.Button7Cl ick(Sender:TObj
10、ect);beginetapp.Workbooks.Close;myworkbook:=etapp.Workbooks.add;3WPS表格初级教程myworkbook.WorkSheetsfheet2*.Activate;将 sheet2 指定为当前工作表myworkbook.worksheets,sheet2,.cells 1,1.value31;往第 1 行,第 2 歹即 A1 中输入“3mywGrkbook.worksheetssheet21.cells4,2.value:=,你好,/往第 4 行,第 2 歹ij,即 B4 中输入你好end;软件运行后,如图95所示。图9-5十三、将变
11、量中的值传到wps表格中procedure TForm 1.Button 10C1 ick(Sender:TObject);vara:string;begin邢玲彩,你好,;往变量a中赋值etapp.Workbooks.Close;my workbook:=etapp.Workbooks.add;myworkbook.WorkSheetstheet2*.Activate;myworkbook.worksheets,sheet2,.cells5,2.value:=a;将变量 a 中值传于 wps 表格中end;十四、选择行procedure TForm 1.Button 12C1 ick(Sen
12、der:TObject);beginetapp.Workbooks.Close;my workbook:=etapp.Workbooks.add;myw orkbook.WorkSheetst1 sheet21.Activate;myworkbook.worksheetsTsheet21.cellsl,l.vakie=你好,;myworkbook.worksheets,sheet2,.Rowsl.select;这是选择行命令,选择了第 1 行end;4WPS表格初级教程十五、删除行procedure TForm 1.Button 13C1 ick(Sender:TObject);beginet
13、app.Workbooks.Close;my workbook:=etapp.Workbooks.add;my workbook.WorkSheetstheet?1.Activate;myworkbook.worksheetssheet2.cellsl,l.vahie:士你好,;往第 1 行,第 1 列写入你好showmessagefal单元格中输入了你好 二字,下面将删除该行!;myworkbook.Worksheets,sheet2.Rowsl.Delete;/这是删除第 1 行/删除第 1 行end;十六、procedure TForm 1.Button 14C1 ick(Sender:
14、TObject);beginetapp.Workbooks.Close;my workbook:=etapp.Workbooks.add;myworkbook.WorkSheetstheetZ*.Activate;my w orkbook.w orksheets*s heet2*.cells 1,1.valuer,你好,;myworkbook.worksheets,sheet2,.Rowsl.select;先选中一行,即明确要在哪一行前插入一行my workbook.Worksheets sheetZ.Rows 1.Insert(-4121);/这是插入行,具体为什么这样写,得问金山公司。这是
15、公司的技术员告诉我的。end;5WPS表格初级教程说明:实现套打的时候,为了保持格式的统一,常常要用到选择行、删除行、插入行这些操作。在窗体中再放入4个按钮控件,标题分别设置为“将表格中的数据导出到wps表格“用函数将数据导出到wps表格”、接打印”放入 1 个 ADOConnectionl,1 个 ADOQueryl,1 个 DataSource 1,1 个 DBGridl,将它们连接起来。“将表格中的数据套打、“直十七、将表格中的数据导出到wps表格中procedure TForm 1.Button 11 Click(Sender:TObject);vari,row,column,j:in
16、teger;beginif dbgrid 1.DataSource.DataSet.RecordCount=0 then exit;etapp.Workbooks.Close;myworkbook:=etapp.Workbooks.add;myworkbook.WorkSheets*sheet 1 1.Activate;column:=l;for j:=0 to dbgrid 1.Fie IdCount-1 dobeginIF dbgrid 1.Columnsj.Visible=true then begin对于隐藏的列,则跳过不导出。myworkbook.worksheetsfheetrj.
17、cellsfl,column.value:=dbgridl.columns.Itemsj.Title.caption;/这是导出标题column尸column+1;end;end;row:=2;dbgrid 1.DataSource.DataSet.F irst;While Not(dbgrid 1.DataSource.DataSet.Eof)do begincolumns 1;for i:=0 to dbgrid 1.Columns.Count-1 dobeginIF dbgrid 1.ColumnsI.Visible=true then begin/对于隐藏的列,则跳过不导出。myw o
18、rkbook.worksheetstheetr.cells row,column.value:=dbgridl.Columnsi.Fie Id.AsString;这是导出数据 columncolumn+1;end;end;dbgrid 1.DataSource.DataSet.Next;row:=row+l;end;showmessagef导出完毕,请在wps表格中进行编辑、排版、打印等操作!);6WPS表格初级教程end;十八、将数据导出到wps表格的函数。function SaveToet(bg:TDBGrid):boolean;vari,row,co lumnj:integer;begi
19、nif bg.DataSource.DataSet.RecordCount=0 then exit;etapp.Workbooks.Close;myworkbook:=etapp.Workbooks.add;my workbook.WorkSheets*sheetr.Activate;column:=l;for jO to bg.FieldCount-1 dobeginIF bg.Co lumnsj.Visible=truethenbeginmyw orkbook.worksheetstheetrj.cellsfl,column.value:=bg.columns.Itemsj.Title.c
20、aption;column:=column+l;end;end;rowrf;bg.DataSource.DataSet.First;While Not(bg.DataSource.DataSet.Eof)dobegincolumn:=l;for i:=0 to bg.Columns.Count-1 dobeginIF BG.ColumnsI.Visible=true thenbeginmyworkbook.worksheets*sheet I1.cells row,column.valuebg.Columnsi.Fie Id.AsString column:=column+l;end;end;
21、bg.DataSource.DataSet.Next;row:=row+l;end;showmessagef导出完毕,请在wps表格中进行编辑、排版、打印等操作!,);end;十九、调用导出wps表格函数procedure TfrmMain.Button 1 lClick(Sender:TObject);beginsavetoet(dbgridl);end;二十、打印预览procedure TFrmccpxhc x.Ndy 11c kbfClic k(Sender:TObject);beginmyworkbook.worksheets销售出库单PrintPreview();etapp.Wind
22、ow State:=$FFFFEFD4;etapp.Window State:=$FFFFEFD1;/打印预览这是最小化,这些可以从et的函数库中杳找到 这是还原,这些可以从et的函数库中查找到注:先是最小化,然后还原,那么该窗口能显示到最前面来,以便我们查看。注:这是一种技巧。end;二 H一、procedure TFrmccpxhcx.NdyllckbfClick(Sender:TObject);7WPS表格初级教程beginmyworkbook.worksheets厂销售出库单.printout。;;|直接打印end;二十二、设置打开的wps表格标题etApp:=CreateOleObj
23、ectCet.application1);et叩p.captionM由库存软件启动,最好不要关闭!如果不需要,请最小化!,;设置标题 etApp.Visible:=true;etapp.WindowState:=$FFFFEFD4;这是最小化 二十三、这是套打,对于特定的单据,我们可以用此法。我们先设置好单据的模板后,然后往里面填充数据,那么填充的数据与模板一样。procedure T frmMain.btntdCl ic k(S ender:TObjec t);varrow:integer;str:string;beginif datasourcel.DataSet.RecordCount=
24、0 then exit;if datasource2.DataSet.RecordCount=0 then exit;etapp.Workbooks.Close;myworkbook:=etapp.Workbooks.Open(ExtractFilePath(ParamStr(0)+,库存管理报表.et);/这足打开指定文件myworkbook.WorkSheets原材料入库单.Activate;myw orkbook.w orksheets/原材料入库单cells 1,1.value:=datasourcel.DataSet.Fie Id ByName(dwmc).AsString+入库单;
25、/这是设置单据的标题myworkbook.worksheets原材料入库单cells2,l.value:=L 单据号:+datasourcel.DataSet.Field By Name(,djh,).AsString+,业务员:+datasource 1.DataSet.Fie Id ByN ame(y wy).As String;myworkbook.worksheetsj原材料入库单.ceHs3,l.value=单位名称:atasourcel.DataSet.FieldByNameCdwmc.AsString;row:=5;datasource2.DataSet.First;while
26、not datasource2.DataSet.Eof dobeginmyworkbook.worksheets原材料入库单.cellsrow,l.value:=row4;/以下是输入明细内容,datasource2中是明细表中的内容。myworkbook.worksheets/原材料入库单cellsrow,2.value:=datasource2.DataSet.FieldByName(pm).AsString;myw orkbook.w orksheets/原材料入库单cells row,3.value:=datasource2.DataSet.Fie Id ByName(ggxh).As
27、String;myw orkbook.w orksheets原材料入库单cellsrow,4.value:=datasource2.DataSet.Fie Id ByName(cd).AsString;myw orkbook.w orksheets原材料入库单ceHsrow,5.value:=datasource2.DataSet.FieldByName(dw).AsString;myw orkbook.w orksheets/原材料入库单cells row,6.value:=datasource2.DataSet.Fie Id ByName(sl).AsString;myw orkbook.
28、w orksheets原材料入库单cellsrow,7.value:=datasource2.DataSet.FieldByNameCjj).AsString;myworkbook.worksheets原材料入库单cellsrow,8.value:=datasource2.DataSet.FieldByName(je).AsString;myw orkbook.w orksheets/原材料入库单cells row,9.value:=datasource2.DataSet.Fie Id ByName(ckmc).AsString;myw orkbook.w orksheets原材料入库单cel
29、lsrow0.value:=datasource2.DataSet.Fie Id ByName(b2!).AsString;datasource2.DataSet.Next;if datasource2.DataSet.Eof thenbeginmyworkbook.Worksheets原材料入库单Rowsrow+l.Delete;break;end;row:=row+l;myworkbook.WorksheetsJ 原材料入库单.Rowsrow.select;my w orkbook.Worksheets原材料入库单Ro w sow.I nsert(21);end;/删除最后一行行选择这是插
30、入一行if datasourcel.DataSet.FieldByName(,dwmc,).AsString then8WPS表格初级教程beginrow:=row+l;myworkbook.worksheets原材料入库单cellsrow,l.value:=;S主:+datasourcel.DataSet.FieklByName(b2).AsString;end;row 尸row+1;myworkbook.worksheetsfWA-.cellstrow,1.value:-datasourcel.DataSet.FieIdByNamefc.AsString;myworkbook.worksh
31、eets原材料入库单心115上0,8、111:=金额合计:+datas ource 1.DataSet.F ie Id ByN ameCJeh j*).As S tr ing+元end;见下面的实例,这是我写的一个软件的单据查询功能,单据查询出来后,可以进行单据的打印。左边是单据表,右边是单据明细表,点击菜单预览,即可将数据导出wps表格2007中。如图9-6所示。9K打即1序il出河北苗木一库存管系拢图9-6数据导出后如图9-7所示。图9-79WPS表格初级教程C单据号单管各河北衡水;XH20071223-38 业务员:吕金月的伽松下出库单1名8三明帝表头列土陵单位数量单价金领备注 一6-6
32、52条5700.:/条45表(y地址市笠件设10-492.8 8PH-1082 4PH-2030:而寤I北经理:1+:河:tta英软件务条条包话:03电话:1352002000-120018393088787 下我_.4元/条1步75元/条 http;/wwir._:;no 1vr:biu83 兀 表尾 flsoft 6格明细,厂一I最后几句话:就写到这儿吧,不写了,累了,很累了,想休息了,上面的这些内容从开始写到写到此,共用了 10多天的时间,真难以置信。上面的这些内容我没有进行一遍的检查,这里面应当有很多的错别字、语句不通的句子,请大家谅解。大家凑合着看吧,反正能看懂。关于wps表格2007的功能我仅介绍了一小部分,大部分还靠大家自己摸索。这个教程写到这儿,我暂不想写了,要回家过年去了,如果要写,明年再说吧。累了,很累了。:10