admin 管理员组

文章数量: 1087139


2024年3月6日发(作者:redis持久化用的什么)

PB数据窗口导出excel,修改第一行英文标题为中文标题,计算合计值

分类: PB 2013-11-05 13:01 712人阅读 评论(0) 收藏 举报

pb数据窗口导出excel中文标题计算合计值

数据窗口导出excel

利用(filename,Excel5!,true)方法先导出带英文标题的excel。

int li_ret

string ls_filename,ls_pathname

boolean lb_exist

if nt()=0 then

messagebox("提示","无可保存的数据!")

return;

end if

li_ret = GetFileSaveName("保存文件",ls_pathname,ls_filename,"xls","Excel文件(*.xls),*.xls")

if li_ret=1 then

lb_exist = FileExists(ls_pathname)

IF lb_exist THEN

li_ret = MessageBox("保存", ls_pathname+"已经存在,是否覆盖?",Exclamation!, YesNo!)

end if

if li_ret=1 then

li_ret = (ls_pathname,EXCEL5!, true)//此处必须为true,后面要修改第一行。

if li_ret=1 then

//修改标题头,计算合计

gf_set_title_sum(dw,ls_pathname)

messagebox('提示','保存成功!')

end if

end if

end if

2.修改第一行英文标题为中文标题,计算合计值

gf_set_title_sum(datawindow dw,string vs_filename)函数如下:

int li_ret

long ll_column,ll_num,ll_dwrowcount

long ll_xlsrowcount//excel的行数

string ls_objtag[]//标题

string ls_width[]//每列宽度

string ls_obj,ls_value

string ls_objs[]

int i,j

String ls_english = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

string ls_colname

//操作excel

Pointer oldpointer

OLEObject ole_object

ole_object = CREATE OLEObject

//修改标题头,计算合计

li_ret = ole_tToNewObject("ation")

IF li_ret <> 0 THEN

MessageBox('打开错误','无法连接EXCEL!是否已经安装了EXCEL?错误号:' +

String(li_ret))

RETURN

END IF

ole_e = false //ole应用服务是否显示

oldpointer = SetPointer(HourGlass!)

ole_(vs_filename)//打开文件

//获取标题

ll_column = Long() //取得字段总数

i = 0

FOR ll_num = 1 TO ll_column

IF BE("#"+String(ll_num)+".Visible") = "1" THEN //列标志为nun_Visible的不显示

i = i+1

ls_obj = BE("#"+String(ll_num)+".name") //字段名称的实际存储值

ls_objs[i] = ls_obj

ls_objtag[i] = BE(ls_obj + "_") //字段名称的显示值

ls_width[i] = BE(ls_obj + '.width') //每列的宽度

END IF

NEXT

//开始修改标题头

for j=1 to upperbound(ls_objtag)

ole_(1,j).value=ls_objtag[j]

next

//标题一行居中

ole_(1).HorizontalAlignment = 3//居中

//计算合计值

ll_dwrowcount=nt()//行数

ll_xlsrowcount=ll_dwrowcount+1//除了合计之外的行数

ole_(ll_xlsrowcount+1,1).value='合计'

for j=2 to ll_column

ls_colname=Mid(ls_english,j,1)//获取列名B

ole_(ls_colname+'2:'+ls_colname+string(ll_xlsrowcount)).Select//选中B2:B4

ole_(ls_colname+string(ll_xlsrowcount+1)).Activate//将B5设为活动单元格

ole_aR1C1 =

"=SUM(R[-"+string((ll_xlsrowcount+1)-2)+"]C:R[-1]C)"//计算从第二行到倒数第二行的和值

next

ole_oks(1).worksheets(1).t //自适应列宽,行的话换EntireRow

ole_oks(1).save()//保存

ole_()//退出

ole_nectobject()//断开连接

destroy ole_object//销毁连接

3.总结:

其中关于excel操作的部分代码,可以使用excel里面的宏录制功能,查看对应操作的代码。

Excel中Sum(R[-1]C:R[1]C[9])的意思:

sum是求和函数,R 表示 行;C 表示列。(当设置为R1C1引用时)

R[-1] 表示 当前行的上一行;

C 表示 当前列;

R[1] 表示 当前行的下一行;

C[9] 表示 当前列的后9列。


本文标签: 标题 是否 计算 表示 合计