2023年11月29日发(作者:)

run("") ////pb 运行记事本

run("") ////pb 运行计算器

记住 当我们用 PB导出数据到 EXCEL时,不管是用 Saveas 还是 clipboard 它输出的数

属性,在查询时主缓冲区中该列有数据,则就会导出出来 ~

用方法得到列名或其他属性也是一样的 ~及时隐藏了也可以得到

据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列

但是用 Saveas 输出数据时, 当中间的某列给隐藏时, 下次打开后它会显示在末尾的位置,

管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的 ~

也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程

序界面上看到的位置,而不会影响它在后台存储的实际位置。

但是这样会改变界面显示的位置,记住,没有改变源

如何用 PB程序在 excel 画表格边框线,如何改变文字大小

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

2 / 16

37.打印输出工作表

ut

38.工作表另为

( c: )

39.放弃存盘

=.t.

40.关闭工作簿

41.退出 Excel

先把标题放到剪贴板上,再 PASTE() EXCEL中,代码如下:

::clipboard(ls_value)

ao_(ls_col+string(1)+":"+ls_col+string(1)).select()

ao_()

/*************************************************************

下面的函数 f_excel_hb ,可以实现“将工作簿 filename_s 中的工作表 sheetname_s 以新的工作表名称 sheetname_t ,复制到工作簿

filename_t 的最后”

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

//========================================================== 2.

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

3.

4. //==========================================================

5.

6. //==========================================================

7.

8.

9. //==========================================================

10. if not fileexists(filename_s) then

11.

12. return false

13. end if

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

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

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

messagebox( '' , ' 工作簿【 ' + filename_s + ' 】(源)不存在 ' )

if not fileexists(filename_t) then 14.

messagebox( '' , ' 工作簿【 ' + filename_t + ' 】(目标)不存在 ' )

return 16. false

end if 17.

long ll_val 18.

// 声明 ole 对象 19.

oleobject ole_object_s 20.

// 创建 ole 对象 21.

ole_object_s=create oleobject 22.

// 连接到 excel 23.

ll_val = ole_object_ttonewobject( 24.

if ll_val <> 0 then 25.

messagebox( '' , 'ole 无法连接 Excel!' )

goto error 27.

"ation" )

15.

26.

28. end if

// 打开源和目标工作簿 29.

ole_object_(filename_s) 30.

ole_object_(filename_t) 31.

string ls_t 32.

ls_t = filename_t 33.

filename_s = of_splitpath(filename_s, 2) 34.

filename_t = of_splitpath(filename_t, 2) 35.

// excel 36.

ole_object_e = false 37.

ole_object_yalerts = false 38.

int n,t 39.

int li 40.

boolean isexists= false 41.

oleobject lworksheet 42.

// 判断源工作簿中的工作表是否存在 43.

try 44.

lworksheet = ole_object_oks(filename_s).sheets(sheetname_s) 45.

isexists = true 46.

47. catch ( oleruntimeerror er)

isexists = false 48.

end try 49.

if isexists= false then 50.

'' , ' 工作簿【 ' + filename_s + ' 】中工作表不存在工作表 [' + sheetname_s + ']' ) 51. messagebox(

goto error 52.

end if 53.

// 当目标工作簿中存在 sheet 名为 sheetname_t 的工作表时,为 sheetname_t 增加后缀 (1) ,然后再重复进行判断,直到表名不存在 54.

71.

72. isexists = true

73. //ole_object_e = true

74. //ole_object_yalerts = true

75. //messagebox('', '')

76. try

77. ole_object_oks(filename_t).save()

78. catch ( oleruntimeerror er2)

79. messagebox( ' 提示' , ' 无法保存工作簿【 ' + filename_t + ' ' )

80. isexists = false

81. end try

82. if not isexists then goto error

83. // 关闭工作簿

84. ole_object_oks(filename_s).close

85. ole_object_oks(filename_t).close

86. // 退 excel

87. ole_object_

88. ole_object_();

89. // 断开连接

90. ole_object_nectobject();

91. // 注销 ole 对象

92. destroy ole_object_s;

93. return true

94. error:

95. ole_object_oks(filename_s).close

96. ole_object_oks(filename_t).close

97. ole_object_

98. ole_object_();

99. ole_object_nectobject();

// 保存目标工作簿

/**********************************************************/

/* 函数名称: uf_dwsaveas_excel

功能:将数据窗口数据导出 EXCEL文件,并将 EXCEL文件默认英文标题替换成中文。

返回值: integer 1 success -1 error

( 新程序 ) 直接用 saveasAscii() 倒出为 excel 文件

参数: datawindow datawin ,为用户要导出数据窗口的数据窗口控件名

( 如:增加注释、 改变排版风 原因: 为提高程序的可读性作了少量的修改

流程描述: ( 原程序 ) 先用 saveas() 倒出为 excel 文件,再替换表头为中文名

格等 )

*/

/**********************************************************/

/*************** 以下程序将导出为 EXCEL文档 ******************/

integer li_rtn,ii,li_asc

string ls_name,ls_pathname

boolean lb_exist

if nt()<1 then

MessageBox(" 提示信息 "," 请先检索数据再导出至 Excel!")

return -1//error

end if

li_rtn=GetFileSaveName(" ",ls_pathname,ls_name,"xls","Excel

(*.xls),*.xls")

if li_rtn=1 then

lb_exist = FileExists(ls_pathname)

IF lb_exist THEN

li_rtn = MessageBox(" ", ls_pathname+" ,

?",Exclamation!, YesNo!)

end if

if li_rtn=1 then

// 当文件存在用户选择覆盖,或是文件本就不存在时。注意变量 li_rtn

li_rtn=Ascii(ls_pathname)

if li_rtn=1 then

MessageBox(" 提示信息 "," 导出数据成功 !")

return 1

else

MessageBox(" 错误信息 "," 导出数据失败 !")

return -1//error

end if

else

return -1//error

end if

else

return -1

end if

// 在程序中调式没有问题,可以把数据窗口原样的输出,包括中英文,如果你用这个函数

导出来的

也是乱码的话,可能是你的操作系统有问题了

函数 SaveAsAscii ()用法:

()函数。它允许输出数据窗口的可视部分为文本格式,组、交叉报表、计算域等被保存为

输出数据的一部分。

在很多的情况下, 我们需要将书局窗口中的数据保存为其他应用程序的格式 (比如: MS Excel,

Word, email ). 为此 Powerbuilder 提供了 SaveAs 函数,然而使 SaveAs 保存数据窗口为

buffer 中的数据。 为了输出交叉报表、 组、和计算 域等等都被丢弃, 它仅仅保存了数据窗口

build 444) 提供了新的函数解决这些缺陷, 域等等可视的数据, PowerBuilder 6.5 (after

Execl 格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形、交叉报表、计算

它是: SaveAsAscii ()函数。它允许输出数据窗口的可视部分为文本格式,组、交叉报表、

计算域等被保存为输出数据的一部分。下面讨论该函数:

描述:将数据窗口或数据存储中的内容保存为 ASCII 文本文件

适用于:数据窗口和 DataStore 对象

符号:

Ascii ( filename {, separatorcharacter {, quotecharacter {,

lineending } } } )

其中:

dwcontrol 位数据窗口或 DataStore 的名字

:要保存的文件名; filename

:分割各个数据的字符串,缺省为 tab separatorcharacter (optional)

quotecharacter (optional) :包围值的字符串,缺省为空;

lineending (optional) :放在每行末尾的字符串,缺省为回车 character (~r~n)

下面的例子显示将数据窗口中的数据保存到文件 , 每个数据以 '|' 分割

dw_ascii("","|")

在数据之间使用分割符是比较好的注意,因为缺省的 tab 字符可能会在导入 excel 时出

问题。在导入 Excel 时他会提示您,您数据中使用何种分割符。

为了导入到 Excel, 只需在中 Excel 打开文件,您可能会看到一个 wizard 窗口 定义正确的

分割符即可。下例显示一个用 saveasascii ()函数导出的文件,使用 SaveAs 函数时是不可

能有如此结果的。

PB dw导出到 excel 文件(使用 saveasascii

PB编程收集 2007-07-17 11:01:29 阅读 264 评论 0 字号:大中小 订阅

PB dw导出到 excel 文件(使用 saveasascii

/**********************************************************/

/* 函数名称: uf_dwsaveas_excel

功能:将数据窗口数据导出 EXCEL文件,并将 EXCEL文件默认英文标题替换成中文。

参数: datawindow datawin ,为用户要导出数据窗口的数据窗口控件名

返回值: integer 1 success -1 error

流程描述:先用 saveasAscii() 倒出为 excel 文件,再替换表头为中文名

设计人: yanhui2003 11

修改人:叶文林 2004.4.8

原因:为提高程序的可读性作了少量的修改 ( 如:增加注释、改变排版风格

)*/

/**********************************************************/

/*************** 以下程序将导出为 EXCEL文档 ******************/

integer li_rtn,ii,li_asc

string ls_name,ls_pathname

boolean lb_exist

if nt()<1 then

MessageBox(" 提示信息 "," 请先检索数据再导出至 Excel!")

return -1//error

end if

li_rtn=GetFileSaveName(" 保存文件 ",ls_pathname,ls_name,"xls","Excel 文件

(*.xls),*.xls")

if li_rtn=1 then

lb_exist = FileExists(ls_pathname)

IF lb_exist THEN

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

end if

if li_rtn=1 then

// 当文件存在用户选择覆盖,或是文件本就不存在时。注意变量 li_rtn

li_rtn=Ascii(ls_pathname)

if li_rtn=1 then

//MessageBox(" 提示信息 "," 导出数据成功 !")

else

MessageBox(" 错误信息 "," 导出数据失败 !")

return -1//error

end if

else

return -1//error

end if

else

return -1

end if

/********** 以下程序将导出的 EXCEL英文标题替换为汉字 *********/

long numcols , numrows , c, r

OLEObject xlapp , xlsub

int ret

numcols = long()

numrows = nt()

// 产生 oleobject 的实例

xlApp = Create OLEObject

// 连接 ole 对象

ret = tToNewObject( "" )

if ret < 0 then

EXCEL!~r~n"& MessageBox(" 连接失败 !"," 连接到 EXCEL失败 , 请确认您的系统是否已经安装

+" 错误代码 :"+string(ret))

return -1

end if

// 打开 EXCEL文件

(ls_pathname)

//// 使文件可见

//e = true

// 得到活动工作表的引用 , 改善程序性能

xlsub = eets[1]

string ls_colname,ls_text,ls_modistr,ls_col

// 取字段名更改为对应的文本 text

FOR c=1 to numcols

ls_col="#"+string(c)+".name"

ls_colname=be(ls_col)

ls_modistr=ls_colname+"_"

ls_text=be(ls_modistr)

[1,c]=ls_text

NEXT

nectObject()

Destroy xlapp

MessageBox(" 提示信息 "," 导出数据成功 !")

return 1//success

PB datawindow 导出到 excel 文件

/* 函数名称: uf_dwsaveas_excel

功能:将数据窗口数据导出 EXCEL文件,并将 EXCEL文件默认英文标题替换成中文。

参数: datawindow datawin ,为用户要导出数据窗口的数据窗口控件名

返回值: integer 1 success -1 error

流程描述:先用 saveasAscii() 倒出为 excel 文件,再替换表头为中文名

原因:为提高程序的可读性作了少量的修改 ( 如:增加注释、改变排版风格等 )*/

/**********************************************************/

/*************** 以下程序将导出为 EXCEL文档 ******************/

integer li_rtn,ii,li_asc

string ls_name,ls_pathname

boolean lb_exist

if nt()<1 then

MessageBox(" 提示信息 "," 请先检索数据再导出至 Excel!")

return -1//error

end if

li_rtn=GetFileSaveName(" 保存文件 ",ls_pathname,ls_name,"xls","Excel 文件

(*.xls),*.xls")

if li_rtn=1 then

lb_exist = FileExists(ls_pathname)

IF lb_exist THEN

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

end if

if li_rtn=1 then

// 当文件存在用户选择覆盖,或是文件本就不存在时。注意变量 li_rtn

li_rtn=Ascii(ls_pathname)

if li_rtn=1 then

//MessageBox(" 提示信息 "," 导出数据成功 !")

else

MessageBox(" 错误信息 "," 导出数据失败 !")

return -1//error

end if

else

return -1//error

end if

else

return -1

end if

/********** 以下程序将导出的 EXCEL英文标题替换为汉字 *********/

long numcols , c, r

OLEObject xlapp , xlsub

int ret

numcols = long()

// 产生 oleobject 的实例

xlApp = Create OLEObject

// 连接 ole 对象

ret = tToNewObject( "" )

if ret < 0 then

MessageBox(" 连接失败 !"," 连接到 EXCEL失败 , 请确认您的系统是否已经安装 EXCEL!~r~n"&

+" 错误代码 :"+string(ret))

return -1

end if

// 打开 EXCEL文件

(ls_pathname)

//// 使文件可见

//e = true

// 得到活动工作表的引用 , 改善程序性能

xlsub = eets[1]

string ls_colname,ls_text,ls_modistr,ls_col

// 取字段名更改为对应的文本 text

FOR c=1 to numcols

ls_col="#"+string(c)+".name"

ls_colname=be(ls_col)

ls_modistr=ls_colname+"_"

ls_text=be(ls_modistr)

[1,c]=ls_text

NEXT

nectObject()

Destroy xlapp

MessageBox(" 提示信息 "," 导出数据成功 !")

return 1//success

PB datawindow 导出到 excel 文件(支持计算列和显示格式,中国龙)

[ seeyou 发表于 2005-8-30 10:40:00 ]

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

// [PUBLIC] Function uf_data2excel u_data2word inherited from nonvisualobject

//--------------------------------------------------------------------

// 说明: 将数据倒入 excel , 支持计算列及显示格式 , 要求在题头的计算列要写 tag

//--------------------------------------------------------------------

// 参数 1:[value] datawindow adw

// 说明 : 数据窗口

//--------------------------------------------------------------------

// 返回:(INTEGER) 成功返回 1, 不成功返回 0

//--------------------------------------------------------------------

// 作者:cwl 日期: 2002.03.18

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

// 变更日志: 020515 加入对交叉表倒出的支持 ( 主要是修改了保存题头部分 )

constant integer ppLayoutBlank = 12

OLEObject ole_object

ole_object = CREATE OLEObject

integer li_ret,li_crosstab=0

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

// 题头区

long ll_headnum

string ls_head[],ls_headtag[]

// 合计区

long ll_sumnum,i=1,startpos=1,endpos,li_pos

string ls_sum[],ls_sumtag[],ls_bind,token[],list,ls_temp,ls_crosstabcol

n_cst_string lu_string //PFC string 处理对象

li_ret = ole_tToObject("","ation")

IF li_ret <> 0 THEN

// 如果 Excel 还没有打开,则新建。

li_ret = ole_tToNewObject("ation")

if li_ret <> 0 then

MessageBox('OLE 错误 ','OLE 无法连接 ! 错误号: ' + string(li_ret))

return 0

end if

ole_e = false// 不可见

END IF

if sing='4' then // 交叉表处理

Mode='true'// 将数据静态化

li_crosstab=1

end if

pointer oldpointer

// 得到对象列表

Do while ( EndPos > 0 )

token[i] = Mid(list, StartPos, EndPos - StartPos)

i ++

StartPos = EndPos + 1

EndPos= pos(list, '~t', StartPos)

LOOP

token[i] = Mid(list, StartPos)

ll_rownum=UpperBound(token)

for i=1 to ll_rownum

ls_obj = token[i]

if ls_obj='title' then messagebox('',be(ls_obj + '.type'))

if lower(be(ls_obj + '.type')) = 'column' or &

lower(be(ls_obj + '.type')) = 'compute' then

ls_bind=lower(be(ls_obj + '.band'))

if ls_bind = 'detail' then

ll_num += 1

ls_objs[ll_num] = ls_obj

if li_crosstab=0 then // 一般处理

ls_objtag[ll_num] = be(ls_obj + '_')

elseif li_crosstab=1 then // 交叉表处理

li_pos=lu__lastpos(ls_obj,'_',len(ls_obj))// 找出最后一次出现 '_' 的位置

if li_pos=0 or (not isnumber(mid(ls_obj,li_pos+1))) then // 不是交叉列

next

// 得到数据窗口数据的列数与行数(行数应该是数据行数 + 2

ll_colnum = ll_num

ll_rownum = nt() + 2

string column_name

string ls_colname

integer j,k

// 写题头

SetPointer(oldpointer)

ole_e = True

ole_nectobject()

DESTROY ole_object

return 1

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

// [PUBLIC] Function uf_getdata u_data2word inherited from nonvisualobject

//--------------------------------------------------------------------

// 说明: 得到一个数据窗口列及计算列的准确显示值

//--------------------------------------------------------------------

// 参数 1:[value] datawindow dw_1

// 说明 :

// 参数 2:[value] string col

// 说明 : 对象名

// 参数 3:[value] integer row

// 说明 :

//--------------------------------------------------------------------

// 返回:(STRING)

//--------------------------------------------------------------------

// 作者:cwl 日期: 2002.03.18

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

string ls_edittype,ls_value,ls_format

integer id

ls_edittype=lower(dw_be(col+"."))// 得到编缉风格

choose case ls_edittype

case 'ddlb','dddw'// 应该得到显示值

',"+string(row)+" )")

case else

+ "',"+string(row)+")"),ls_format)

else