2023年11月29日发(作者:)PB调用EXCEL的操作不失为一种好的报表输出方式 收藏

对于较为中国化的报表,虽然后dw这个坚强后盾,但是也难不住繁复疲劳的应对。

不过我们可以知道,数据的输出,都是居于table的栏位或者计算字段。只是很多统计的模式和展现模式不同。

我在一年前作完一个系统,可是客户几乎隔三差五有新的东东要输出报表。终于我发现。让客户先在excel里弄好,然后再写程序来输出也是一个不错的方法。关键是,客户给的东西不必要再进自己的系统,所以数据不会发生什么问题。如果本身软件有任何问题,那能从excel里的写的结果很容易看得出来。虽然写excel表格要花很多时间,但是减少了输入导入和输出的一些麻烦。

转载excel操作大全:

powerbuilder操作excel命令大全(例子的有些地方不对!)

2006-12-04 16:43

1.创建Excel对象

eole=CREATEOBJECT(′ation′)



2.添加新工作簿







3.设置第3个工作表为激活工作表



eets(″sheet3″).Activate



4.打开指定工作簿



(″c:″)



5.显示Excel窗口



e=.t.



6.更改Excel标题栏



n=″VFP应用程序调用Microsoft Excel″



7.给单元格赋值



(1,4).value=XM(XM为数据库字段名)



8.设置指定列的宽度(单位:字符个数)



s(1).ColumnWidth=5



9.设置指定行的高度(单位:磅)



(1).RowHeight=1/0.035



(设定行高为1厘米,1磅=0.035厘米)



10.在第18行之前插入分页符



eets(″Sheet1″).Rows(18).PageBreak=1



11.在第4列之前删除分页符



s(4).PageBreak=0



12.指定边框线宽度(Borders参数如下)



(″b3:d3″).Borders(2).Weight=3



13.设置四个边框线条的类型



(″b3:d3″).Borders(2).LineStyle=1



(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)



14.设置页眉



Header=″报表1″



15.设置页脚



Footer=″第&P页″



16.设置页眉到顶端边距为2厘米



Margin=2/0.035



17.设置页脚到底边距为3厘米



Margin=3/0.035



18.设置顶边距为2厘米



gin=2/0.035



19.设置底边距为4厘米



Margin=4/0.035



20.设置左边距为2

厘米



rgin=2/0.035



21.设置右边距为2厘米



argin=2/0.035



22.设置页面水平居中



Horizontally=.t.



23.设置页面垂直居中



Vertically=.t.



24.设置页面纸张大小(1-窄行8 5 11 39-宽行14 11)



ize=1



25.打印单元格网线



ridlines=.t.



26.拷贝整个工作表







27.拷贝指定区域



(″A1:E2″).Copy



28.粘贴



eet(″Sheet2″).Range(″A1″).PasteSpecial



29.在第2行之前插入一行



(2).Insert



30.在第2列之前插入一列



s(2).Insert



31.设置字体



(2,1).=″黑体″



32.设置字体大小



(1,1).=25



33.设置字体为斜体



(1,1).=.t.



34.设置整列字体为粗体



s(1).=.t.



35.清除单元格公式



(1,4).ClearContents



36.打印预览工作表



review



37.打印输出工作表



ut



38.工作表另为



(″c:″)



39.放弃存盘



=.t.



40.关闭工作簿







41.退出Excel







42 合并



string worksheet,beginRowcol,EndRowCol



(worksheet).Range(BeginRowCol ":" EndRowCol).Select

(worksheet).Range(BeginRowCol ":" EndRowCol).Merge



43 sheet改名

(olename).select

(olename).name=newname



MyOLE=Create OLEObject

ConnectErr=tToNewObject ("ation")

e=false

//打开指定的XLS文件激活workbooks

(FilePath)

//对XLS文件进行了改动以后,在关闭该文件时是否需要向用户提出警告。

yAlerts = False



if isnull(MyOLE) then return -1 ;

if ConnectErr <0 then

choose case ConnectErr

case -1

messagebox('错误提示messagebox("错误提示","服务器不能装载选择的文件")

case -9

messagebox("错误提示","其他错误")

end choose

return -1

end if



///////////////////////////////////////////////////////////////////////////////

oleobject xlApp //声明Excel应用程序对象

xlApp = Create OLEObject

OLEObject xlsub1,xlsub2,xlsub3,obook1,obook2,xlsub4,obook3

ret = tToNewObject( "" ) //打开自动化对象 应为 "ation"



if ret < 0 then



MessageBox("Connect to Excel Failed !",string(ret))



return



//操作第一个excel文件



string ls_file3="C:"

obook3=(ls_file3) //打开文件



xlsub4 = eets[1] //激活第一页



//对单元格赋值



[c,3].Value = string(mdecimal(r,'rs'))

[c,5].Value = string(mdecimal(r,'yp'))

[c,6] = string(mdecimal(r,'jc'))

[c,7] = string(mdecimal(r,'hy'))

[c,8] = string(mdecimal(r,'zl'))



//合并一个excel文件



string ls_ran

ls_ran = "B6:M"+string(ld_1+1)

obook1 = (ls_file2)

xlsub1 = eets[1]

(ls_ran).Copy() //把所选内容复制到内存中





e = false

xlsub2 = ()

= "分类汇总"

(ls_ran).PasteSpecial() //把上一个文件内容粘过来

//加入分类汇总

eets("分类汇总").Activate()



integer a[6]

a={8,9,10,11,12,13}

(ls_ran).Select()

al(3,-4157,a, True, False, True)

(1).Insert()

[1,1] = left(gs_shuqi,4)+"年"+right(gs_shuqi,2)+"月份"

[1,1].="宋体"

[1,1].=22

("A1:M1").Select()

()

ntalAlignment = 2



()

()

(is_docname)

()

()

()

nectObject()





//



public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);

//==========================================================

// 合并两个工作簿中的某个工作表

//==========================================================

// 作者:yyoinge 2011-10-12 18:00

//==========================================================

// 将工作簿filename_s中的工作表sheetname_s以新的

// 工作表名称sheetname_t,复制到工作簿filename_t的最后

//==========================================================

if not fileexists(filename_s) then

messagebox('d if

if not fileexists(filename_t) then

messagebox('作表前面





而上述函数复制工作表的方法为:

[cpp] view plaincopy



int li

setnull(li)

ole_object_oks(filename_s).Sheets(sheetname_s).copy(li, ole_object_oks(filename_t).Sheets(long(ole_object_oks(filename_t).))) //将源工作表复制到目标工作簿的最后1个工作表后面





这边需要对copy方法进行说明,在VBA中,工作表复制的写法为:

[cpp] view plaincopy



Sheets("工作表名称").Copy Before := Sheets(1) //将工作表“工作表名称”复制到第1个工作表前面

Sheets("工作表名称").Copy After := Sheets(1) //将工作表“工作表名称”复制到第1个工作表后面







而在pb中对应的写法为:

[cpp] view plaincopy



int li setnull(li)

Sheets("工作表名称").Copy(Sheets(1), li) //将工作表“工作表名称”复制到第1个工作表前面

Sheets("工作表名称").Copy(li, Sheets(1)) //将工作表“工作表名称”复制到第1个工作表后面