PB操作Excel详解.docx
《PB操作Excel详解.docx》由会员分享,可在线阅读,更多相关《PB操作Excel详解.docx(18页珍藏版)》请在冰豆网上搜索。
![PB操作Excel详解.docx](https://file1.bdocx.com/fileroot1/2023-1/5/54ea29aa-3da4-4e3a-b5d7-55f67d77e6bc/54ea29aa-3da4-4e3a-b5d7-55f67d77e6bc1.gif)
PB操作Excel详解
run("notpad.exe")////pb运行记事本
run("calc.exe")////pb运行计算器
记住:
当我们用PB导出数据到EXCEL时,不管是用Saveas还是clipboard它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列属性,在查询时主缓冲区中该列有数据,则就会导出出来~
用方法得到列名或其他属性也是一样的~及时隐藏了也可以得到
当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~
也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。
但是这样会改变界面显示的位置,记住,没有改变源
如何用PB程序在excel画表格边框线,如何改变文字大小
1.创建Excel对象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add
3.设置第3个工作表为激活工作表
eole.Worksheets(″sheet3″).Activate
4.打开指定工作簿
eole.Workbooks.Open(″c:
\temp\ll.xls″)
5.显示Excel窗口
eole.visible=.t.
6.更改Excel标题栏
eole.Caption=″VFP应用程序调用MicrosoftExcel″
7.给单元格赋值
eole.cells(1,4).value=XM(XM为数据库字段名)
8.设置指定列的宽度(单位:
字符个数)
eole.ActiveSheet.Columns
(1).ColumnWidth=5
9.设置指定行的高度(单位:
磅)
eole.ActiveSheet.Rows
(1).RowHeight=1/0.035
(设定行高为1厘米,1磅=0.035厘米)
10.在第18行之前插入分页符
eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1
11.在第4列之前删除分页符
eole.ActiveSheet.Columns(4).PageBreak=0
12.指定边框线宽度(Borders参数如下)
ole.ActiveSheet.Range(″b3:
d3″).Borders
(2).Weight=3
13.设置四个边框线条的类型
eole.ActiveSheet.Range(″b3:
d3″).Borders
(2).LineStyle=1
(其中Borders参数:
1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:
1与7-细实、2-细虚、4-点虚、9-双细实线)
14.设置页眉
eole.ActiveSheet.PageSetup.CenterHeader=″报表1″
15.设置页脚
eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″
16.设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035
17.设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035
18.设置顶边距为2厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035
19.设置底边距为4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035
20.设置左边距为2厘米
veole.ActiveSheet.PageSetup.LeftMargin=2/0.035
21.设置右边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035
22.设置页面水平居中
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.
23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.
24.设置页面纸张大小(1-窄行851139-宽行1411)
eole.ActiveSheet.PageSetup.PaperSize=1
25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines=.t.
26.拷贝整个工作表
eole.ActiveSheet.UsedRange.Copy
27.拷贝指定区域
eole.ActiveSheet.Range(″A1:
E2″).Copy
28.粘贴
eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial
29.在第2行之前插入一行
eole.ActiveSheet.Rows
(2).Insert
30.在第2列之前插入一列
eole.ActiveSheet.Columns
(2).Insert
31.设置字体
eole.ActiveSheet.Cells(2,1).Font.Name=″黑体″
32.设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Size=25
33.设置字体为斜体
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.
34.设置整列字体为粗体
eole.ActiveSheet.Columns
(1).Font.Bold=.t.
35.清除单元格公式
eole.ActiveSheet.Cells(1,4).ClearContents
36.打印预览工作表
eole.ActiveSheet.PrintPreview
37.打印输出工作表
eole.ActiveSheet.PrintOut
38.工作表另为
eole.ActiveWorkbook.SaveAs(″c:
\temp\22.xls″)
39.放弃存盘
eole.ActiveWorkbook.saved=.t.
40.关闭工作簿
eole.Workbooks.close
41.退出Excel
eole.quit
先把标题放到剪贴板上,再PASTE()到EXCEL中,代码如下:
:
:
clipboard(ls_value)
ao_object.range(ls_col+string
(1)+":
"+ls_col+string
(1)).select()
ao_object.activesheet.Paste()
/*************************************************************
下面的函数f_excel_hb,可以实现“将工作簿filename_s中的工作表sheetname_s以新的工作表名称sheetname_t,复制到工作簿filename_t的最后”
1.public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);
2.//==========================================================
3.// 合并两个工作簿中的某个工作表
4.//==========================================================
5.// 作者:
yyoinge 2011-10-12 18:
00
6.//==========================================================
7.// 将工作簿filename_s中的工作表sheetname_s以新的
8.// 工作表名称sheetname_t,复制到工作簿filename_t的最后
9.//==========================================================
10.if not fileexists(filename_s) then
11. messagebox('','工作簿【' + filename_s + '】(源)不存在')
12. return false
13.end if
14.if not fileexists(filename_t) then
15. messagebox('','工作簿【' + filename_t + '】(目标)不存在')
16. return false
17.end if
18.long ll_val
19.//声明ole对象
20.oleobject ole_object_s
21.//创建ole对象
22.ole_object_s=create oleobject
23.//连接到excel
24.ll_val = ole_object_s.connecttonewobject("excel.application")
25.if ll_val <> 0 then
26. messagebox('','ole无法连接Excel!
')
27. goto error
28.end if
29.//打开源和目标工作簿
30.ole_object_s.workbooks.open(filename_s)
31.ole_object_s.workbooks.open(filename_t)
32.string ls_t
33.ls_t = filename_t
34.filename_s = of_splitpath(filename_s, 2)
35.filename_t = of_splitpath(filename_t, 2)
36.//隐藏excel
37.ole_object_s.visible = false
38.ole_object_s.displayalerts = false
39.int n,t
40.int li
41.boolean isexists=false
42.oleobject lworksheet
43.//判断源工作簿中的工作表是否存在
44.try
45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)
46. isexists = true
47.catch( oleruntimeerror er)
48. isexists = false
49.end try
50.if isexists=false then
51. messagebox('','工作簿【' + filename_s + '】中工作表不存在工作表[' + sheetname_s + ']')
52. goto error
53.end if
54.//当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀
(1),然后再重复进行判断,直到表名不存在
55.isexists = true
56.do while isexists
57. try
58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)
59. isexists = true
60. sheetname_t += '
(1)'
61. catch( oleruntimeerror er1)
62. isexists = false
63. end try
64.loop
65.//进行工作表合并(移到目标工作簿的最后)
66.//int li
67.setnull(li)
68.ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))
69.//重命名工作表
70.ole_object_s.workbooks(filename_t).sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t
71.//保存目标工作簿
72.isexists = true
73.//ole_object_s.visible = true
74.//ole_object_s.displayalerts = true
75.//messagebox('', '')
76.try
77. ole_object_s.workbooks(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_s.workbooks(filename_s).close
85.ole_object_s.workbooks(filename_t).close
86.//退出excel
87.ole_object_s.workbooks.close
88.ole_object_s.Application.quit();
89.//断开连接
90.ole_object_s.disconnectobject();
91.//注销ole对象
92.destroy ole_object_s;
93.return true
94.error:
95.ole_object_s.workbooks(filename_s).close
96.ole_object_s.workbooks(filename_t).close
97.ole_object_s.workbooks.close
98.ole_object_s.Application.quit();
99.ole_object_s.disconnectobject();
100.destroy ole_object_s;
101.return false
102.
103.
104.end function
/**********************************************************/
/*函数名称:
uf_dwsaveas_excel
功能:
将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。
参数:
datawindowdatawin,为用户要导出数据窗口的数据窗口控件名
返回值:
integer1,success;-1,error
流程描述:
(原程序)先用saveas()倒出为excel文件,再替换表头为中文名
(新程序)直接用saveasAscii()倒出为excel文件
原因:
为提高程序的可读性作了少量的修改(如:
增加注释、改变排版风格等)
*/
/**********************************************************/
/***************以下程序将导出为EXCEL文档******************/
integerli_rtn,ii,li_asc
stringls_name,ls_pathname
booleanlb_exist
ifdatawin.RowCount()<1then
MessageBox("提示信息","请先检索数据再导出至Excel!
")
return-1//error
endif
li_rtn=GetFileSaveName("保存文件",ls_pathname,ls_name,"xls","Excel文件(*.xls),*.xls")
ifli_rtn=1then
lb_exist=FileExists(ls_pathname)
IFlb_existTHEN
li_rtn=MessageBox("保存",ls_pathname+"已经存在,是否覆盖?
",Exclamation!
YesNo!
)
endif
ifli_rtn=1then
//当文件存在用户选择覆盖,或是文件本就不存在时。
注意变量li_rtn
li_rtn=datawin.SaveAsAscii(ls_pathname)
ifli_rtn=1then
MessageBox("提示信息","导出数据成功!
")
return1
else
MessageBox("错误信息","导出数据失败!
")
return-1//error
endif
else
return-1//error
endif
else
return-1
endif
//在程序中调式没有问题,可以把数据窗口原样的输出,包括中英文,如果你用这个函数导出来的
也是乱码的话,可能是你的操作系统有问题了
函数SaveAsAscii()用法:
()函数。
它允许输出数据窗口的可视部分为文本格式,组、交叉报表、计算域等被保存为输出数据的一部分。
在很多的情况下,我们需要将书局窗口中的数据保存为其他应用程序的格式(比如:
MSExcel,Word,email等).为此Powerbuilder提供了SaveAs函数,然而使SaveAs保存数据窗口为Execl格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形、交叉报表、计算域等等都被丢弃,它仅仅保存了数据窗口buffer中的数据。
为了输出交叉报表、组、和计算域等等可视的数据,PowerBuilder6.5(afterbuild444)提供了新的函数解决这些缺陷,它是:
SaveAsAscii()函数。
它允许输出数据窗口的可视部分为文本格式,组、交叉报表、计算域等被保存为输出数据的一部分。
下面讨论该函数:
描述:
将数据窗口或数据存储中的内容保存为ASCII文本文件
适用于:
数据窗口和DataStore对象
符号:
dwcontrol.SaveAsAscii(filename{,separatorcharacter{,quotecharacter{,lineending}}})
其中:
dwcontrol位数据窗口或DataStore的名字
filename:
要保存的文件名;
separatorcharacter(optional):
分割各个数据的字符串,缺省为tab
quotecharacter(optional):
包围值的字符串,缺省为空;
lineending(optional):
放在每行末尾的字符串,缺省为回车character(~r~n)
下面的例子显示将数据窗口中的数据保存到文件monthly.txt,每个数据以'|'分割
dw_4.saveasascii("monthly.txt","|")
在数据之间使用分割符是比较好的注意,因为缺省的tab字符可能会在导入excel时出问题。
在导入Excel时他会提示您,您数据中使用何种分割符。
为了导入到Excel,只需在中Excel打开文件,您可能会看到一个wizard窗口定义正确的分割符即可。
下例显示一个用saveasascii()函数导出的文件,使用SaveAs函数时是不可能有如此结果的。
PB的dw导出到excel文件(使用saveasascii)
PB编程收集2007-07-1711:
01:
29阅读264评论0 字号:
大中小 订阅
PB的dw导出到excel文件(使用saveasascii)
/**********************************************************/
/*函数名称:
uf_dwsaveas_excel
功能:
将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。
参数:
datawindowdatawin,为用户要导出数据窗口的数据窗口控件名
返回值:
integer1,success;-1,error
流程描述:
先用saveasAscii()倒出为excel文件,再替换表头为中文名
设计人:
yanhui2003年11月
修改人:
叶文林2004.4.8
原因:
为提高程序的可读性作了少量的修改(如:
增加注释、改变排版风格等)*/
/**********************************************************/
/***************以下程序将导出为EXCEL文档****