PB操作Excel详解.docx

上传人:b****5 文档编号:6360599 上传时间:2023-01-05 格式:DOCX 页数:18 大小:23.21KB
下载 相关 举报
PB操作Excel详解.docx_第1页
第1页 / 共18页
PB操作Excel详解.docx_第2页
第2页 / 共18页
PB操作Excel详解.docx_第3页
第3页 / 共18页
PB操作Excel详解.docx_第4页
第4页 / 共18页
PB操作Excel详解.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

PB操作Excel详解.docx

《PB操作Excel详解.docx》由会员分享,可在线阅读,更多相关《PB操作Excel详解.docx(18页珍藏版)》请在冰豆网上搜索。

PB操作Excel详解.docx

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文档****

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1