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


发布评论