PowerBulider数据窗口转MicroSoft Execl、Word程序源代码

word|程序|数据|源代码

PowerBulider数据窗口转MicroSoft Execl、Word程序源代码 
一、f_cncharnum函数 f_cncharnum.srf
$PBExportHeader$f_cncharnum.srf
$PBExportComments$得到字符串中汉字或者双字节的个数
global type f_cncharnum from function_object
end type

forward prototypes
global function integer f_cncharnum (string aString)
end prototypes

global function integer f_cncharnum (string aString);
//函数名: f_cncharnum
//用途: 返回一个字符串中汉字的个数
//输入: aString - string, 给定的字符串
//返回值: li_num - Integer, 给定的字符串中汉字的个数
//注意: 1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的系统此函数无效!
// 2. 若汉字串含有非汉字字符,如图形符号或ASCII码,则这些非汉字字符将保持不变.
//例如: li_ret = f_cncharnum("摆渡人ferryman") li_ret = 3

string ls_ch //临时单元
string ls_SecondSecTable //存放所有国标二级汉字读音
integer li_num = 0 //返回值
integer i,j

For i = 1 to Len(aString)
ls_ch = Mid(aString,i,1)
If Asc(ls_ch) >= 128 then //是汉字
li_num++
i = i+1
End if
Next

Return li_num

end function

二、PBToExcel函数f_outputtoexcel_new.srf

$PBExportHeader$f_outputtoexcel_new.srf
global type f_outputtoexcel_new from function_object
end type

forward prototypes
global function integer f_outputtoexcel_new (datawindow adw)
end prototypes

global function integer f_outputtoexcel_new (datawindow adw);
//函数名:f_outputtoexcel_new
//输入: adw - datawindow,指定的数据窗口
//返回值: Integer
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject

integer li_ret

li_ret = ole_object.ConnectToObject("","Excel.Application")
IF li_ret <> 0 THEN
//如果Excel还没有打开,则新建。
li_ret = ole_object.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
MessageBox('OLE错误','OLE无法连接!错误号:' + string(li_ret))
return 0
end if
ole_object.Visible = True
END IF

pointer oldpointer

oldpointer = SetPointer(HourGlass!)

ole_object.Workbooks.Add

long ll_colnum,ll_rownum
string ls_value

string ls_objects,ls_obj,ls_objs[],ls_objtag[]
long ll_pos,ll_len,ll_num = 0

ls_objects = trim(adw.Describe('datawindow.Objects'))

do while (pos(ls_objects,"~t") > 0)
ll_pos = pos(ls_objects,"~t")
ll_len = ll_pos - 1
ls_obj = left(ls_objects,ll_len)
if (adw.Describe(ls_obj + '.type') = 'column' or &
adw.Describe(ls_obj + '.type') = 'compute') and &
(adw.Describe(ls_obj + '.band') = 'detail') and (ls_obj <> "asd") then
ll_num += 1
ls_objs[ll_num] = ls_obj
ls_objtag[ll_num] = adw.Describe(ls_obj + '.tag')
end if
ls_objects = right(ls_objects,len(ls_objects) - ll_pos)
loop

//得到数据窗口数据的列数与行数(行数应该是数据行数 + 1)
ll_colnum = ll_num
ll_rownum = adw.rowcount() + 1

string ls_colname
integer i,j,k
for i = 1 to ll_colnum
//得到标题头的名字
ls_value = ls_objtag[i]
ole_object.cells(1,i).value = ls_value
next

string column_name
for i = 2 to ll_rownum
for j = 1 to ll_colnum
column_name = ls_objs[j]
if adw.Describe(column_name + '.type') = 'column' then
ls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i - 1)+")")
end if
if adw.Describe(column_name + '.type') = 'compute' then
ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i - 1)+")")
end if
ole_object.cells(i,j).value = ls_value
next
next

SetPointer(oldpointer)

ole_object.disconnectobject()
DESTROY ole_object

return 1
end function

三、PBToWord函数f_outputtoword_new.srf

$PBExportHeader$f_outputtoword_new.srf
global type f_outputtoword_new from function_object
end type

forward prototypes
global function integer f_outputtoword_new (datawindow adw)
end prototypes

global function integer f_outputtoword_new (datawindow adw);
//函数名:f_outputtoword_new
//输入: adw - datawindow,指定的数据窗口
//返回值: Integer
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject

integer li_ret

li_ret = ole_object.ConnectToObject("","word.application")
IF li_ret <> 0 THEN
//如果Word还没有打开,则新建。
li_ret = ole_object.ConnectToNewObject("word.application")
if li_ret <> 0 then
MessageBox('OLE错误','OLE无法连接!错误号:' + string(li_ret))
return 0
end if
ole_object.Visible = True
END IF

long ll_colnum,ll_rownum
constant long wdWord9TableBehavior = 1
constant long wdAutoFitFixed = 0
constant long wdCell = 12
string ls_value
pointer oldpointer

oldpointer = SetPointer(HourGlass!)

string ls_objects,ls_obj,ls_objs[],ls_objtag[]
long ll_pos,ll_len,ll_num = 0

ls_objects = trim(adw.Describe('datawindow.Objects'))

do while (pos(ls_objects,"~t") > 0)
ll_pos = pos(ls_objects,"~t")
ll_len = ll_pos - 1
ls_obj = left(ls_objects,ll_len)
if (adw.Describe(ls_obj + '.type') = 'column' or &
adw.Describe(ls_obj + '.type') = 'compute') and &
(adw.Describe(ls_obj + '.band') = 'detail') and (ls_obj <> "asd") then
ll_num += 1
ls_objs[ll_num] = ls_obj
ls_objtag[ll_num] = adw.Describe(ls_obj + '.tag')
end if
ls_objects = right(ls_objects,len(ls_objects) - ll_pos)
loop

//得到数据窗口数据的列数与行数(行数应该是数据行数 + 1)
ll_colnum = ll_num
ll_rownum = adw.rowcount() + 1

ole_object.Documents.Add()
ole_object.ActiveDocument.Tables.Add(ole_object.Selection.Range, ll_rownum, ll_colnum)

string ls_colname
integer i,j,k

for i = 1 to ll_colnum
//得到标题头的名字
ls_value = ls_objtag[i]
ole_object.Selection.TypeText(ls_value)
for k = 1 to f_cncharnum(ls_value)
ole_object.Selection.TypeBackspace()
next
ole_object.Selection.MoveRight(wdCell)
next

adw.setredraw(false)
ole_object.Selection.MoveLeft(wdCell)
string column_name
for i = 2 to ll_rownum
for j = 1 to ll_colnum
column_name = ls_objs[j]
if adw.Describe(column_name + '.type') = 'column' then
ls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i - 1)+")")
end if
if adw.Describe(column_name + '.type') = 'compute' then
ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i - 1)+")")
end if
ole_object.Selection.MoveRight(wdCell)
ole_object.Selection.TypeText(ls_value)
for k = 1 to f_cncharnum(ls_value)
ole_object.Selection.TypeBackspace()
next
next
next
adw.setredraw(true)

constant long wdFormatDocument = 0

SetPointer(oldpointer)
//保存新建的文档
if messagebox("保存","文档已经成功完成,是否保存?",Question!,YesNo!) = 1 then
string docname, named
integer value

value = GetFileSaveName("选择文件",docname, named, "DOC","Doc Files (*.DOC), *.DOC")

IF value = 1 THEN
ole_object.ActiveDocument.SaveAs(docname, 0,False,"",True,"",False,False,False, False,False)
end if

end if
//断开OLE连接
Ole_Object.DisConnectObject()
Destroy Ole_Object

return 1
end function

时间: 2024-12-03 21:34:38

PowerBulider数据窗口转MicroSoft Execl、Word程序源代码的相关文章

深入了解Pb的数据窗口

PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具,自问世以来深受开发人员的好评.Datawindow是PB中获取专利技术的控件,它对数据的处理方法相当简洁,数据窗口能处理各种显示格式.进行报表打印,对复杂的嵌套报表同样处理自如. 数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好,在运行时将所要的数据从数据库服务器上下载到客户机上处理,然后将更改后的数据进行提交(Commit)或回滚(Roll

深入了解PowerBuilder的数据窗口

PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具,自问世以来深受开发人员的好评.Datawindow是PB中获取专利技术的控件,它对数据的处理方法相当简洁,数据窗口能处理各种显示格式.进行报表打印,对复杂的嵌套报表同样处理自如. 数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好,在运行时将所要的数据从数据库服务器上下载到客户机上处理,然后将更改后的数据进行提交(Commit)或回滚(Roll

pb-PB的数据窗口中怎样选中一列?

问题描述 PB的数据窗口中怎样选中一列? 我做的是一个图书馆信息管理系统,我想在数据窗口中把读者信息中的"在校"的一列都变成"毕业" 的字样,这怎么实现啊! 解决方案 用sql语句,直接指定列名就可以了. 解决方案二: [PB]-数据窗口其他PB数据窗口中多行选中程序PB 数据窗口对象

将pb数据窗口保存为完整的Excel表格

在很多的情况下,我们需要将书局窗口中的数据保存为其他应用程序的格式(比如: MS Excel, Word, email 等).为此Powerbuilder提供了SaveAs函数,然而使SaveAs保存数据窗口为Execl格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形.交叉报表.计算域等等都被丢弃,它仅仅保存了数据窗口buffer中的数据.为了输出交叉报表.组.和计算域等等可视的数据, PowerBuilder 6.5 (after build 444) 提供了新的函数解决这些缺陷,它

将DW数据窗口导出为EXCEL文件的方法(整理)

excel|数据 本文为摘自CSDN论坛帖子收集整理后汇总版本: ---2004年9月3日整理 ---原贴见: http://community.csdn.net/Expert/topic/3328/3328715.xml?temp=8.050799E-04 鉴于现在很多朋友询问 pb 数据导出到excel 中的问题,导出去后格式和数据类型不对了,自己写了几个用户对象,希望能抛砖引玉,加强技术交流,得到大家的支持. 1. nvo_excel 只要是两个接口函数导出数据存储的数据,可以定义 exc

深入了解PB数据窗口数据录入的处理机制

作者:达通兴电脑科技公司(www.study01job.com) 郭宝利 和数据窗口控件打交道都是通过编辑控件进行的.在数据窗口中录入数据.修改数据,实际上是在修改单元上的编辑控件中的内容.当编辑控件移动到另外单元上之前,要对编辑控件中的数据进行校验,如果能通过字段的校验规则,就保存到字段中.编辑控件是可以移动的,需要编辑哪个单元,编辑控件就移动到哪个单元上,接受输入或者修改. 对于熟悉Microsoft Excel的人来说,编辑控件可以看成是Excel网格中的单元格.当用户在一个单元格中输入一

PB数据窗口多表更新的实现

PowerBuilder的数据窗口对象是其特有的智能对象,其封装性好.功能强大.表现形式丰富多样,为此,许多MIS开发人员对PowerBuilder推崇备至,将其视为首选开发工具. 一般情况下,一个数据窗口只能更新一个数据库表,但在MIS开发过程中,我们经常遇到这种情况:一个数据窗口中由两个或更多个数据库表作为数据源,并需要对其进行录入或修改,如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题.笔者在某管理信息系统的开发过程中,尝试了几种双表更新的解决方法,选出一种比较好的方案,以

PB中数据窗口的精确页面打印技术

1.引言 自PowerBuild4.0问世以来,以其简洁高效的集成开发环境.强大的数据窗口技术.(几乎)无所不能的数据库访问能力,越来越受到编程人员的青睐.据Sybase自己的统计,目前全球有60万程序员和系统分析人员在使用他们的Powerbuilder和S-designer,进行各种类型的应用程序开发.最新发布的PowerBuilder6.0族系列开发工具,直接支持ActiveX技术.ServerPush技术,对分布式计算模型的定义更加明确,实现更为简便,并可以利用数据窗口直接生成HTML格式

解决“Microsoft Office Word已停止工作”的问题

系统更新了几个补丁,提示重启,因为当时正在工作,就没有立即重启,开着WORD,后来出去一会儿,回来后发现已经自动重启了,打开WORD发现有两个保存的文件,打开一个继续工作,也不记得是保存的时候还是关闭的时候发现提示 OFFICE WORD已停止工作,鉴于MS软件的特点,我就重新打开呗,发现打不开了.那就用打开并修复呗,这次打开是打开了,但是故障依旧. 前几天有个朋友,Word出现了异常的故障.因为那个朋友是做办公室工作的,所以经常会用到一些办公方面的软件.在使用了很多次Word以后,他的Word