PB操作Excel详解.docx

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

PB操作Excel详解.docx

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

PB操作Excel详解.docx

PB操作Excel详解

run("notpad.exe")////pb运行记事本

run("calc.exe")////pb运行计算器

记住:

当我们用PB导出数据到EXCEL时,不管是用Saveas还是clipboard它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列

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

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

当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~

也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。

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

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

1.创建Excel对象

eole=CREATEOBJECT′(

2.添加新工作簿eole.Workbooks.add

Excel.application′)

3.设置第3个工作表为激活工作表eole.Worksheets(″sheet3″).Activate4.打开指定工作簿

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=59.设置指定行的高度(单位:

磅)eole.ActiveSheet.Rows

(1).RowHeight=1/0.035

(设定行高为1厘米,1磅=0.035厘米)10.在第18行之前插入分页符

eole.Worksheets(″Sheet1″).Rows(18).PageBreak=111.在第4列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=0

12.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range(″b3:

d3″).Borders

(2).Weight=313.设置四个边框线条的类型

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.03518.设置顶边距为2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519.设置底边距为4厘米

eole.ActiveSheet.PageSetup.BottomMargin=4/0.035

20.设置左边距为2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522.设置页面水平居中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″).Copy28.粘贴

eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial

29.在第2行之前插入一行eole.ActiveSheet.Rows

(2).Insert30.在第2列之前插入一列

eole.ActiveSheet.Columns

(2).Insert31.设置字体

eole.ActiveSheet.Cells(2,1).Font.Name=″黑体″

32.设置字体大小eole.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体eole.ActiveSheet.Cells(1,1).Font.Italic=.t.34.设置整列字体为粗体eole.ActiveSheet.Columns

(1).Font.Bold=.t.35.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表eole.ActiveSheet.PrintPreview

 

2/16

37.打印输出工作表eole.ActiveSheet.PrintOut38.工作表另为

eole.ActiveWorkbook.SaveAs(″c:

\temp\22.xls″)39.放弃存盘

eole.ActiveWorkbook.saved=.t.40.关闭工作簿eole.Workbooks.close

41.退出Exceleole.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的最后”

28.

endif

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

30.ole_object_s.workbooks.open(filename_s)

31.ole_object_s.workbooks.open(filename_t)

32.stringls_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.intn,t

40.intli

41.booleanisexists=false

42.oleobjectlworksheet

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

44.try

45.lworksheet=ole_object_s.Workbooks(filename_s).sheets(sheetname_s)

46.isexists=true

47.catch(oleruntimeerrorer)

48.isexists=false

49.endtry

50.ifisexists=falsethen

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

52.gotoerror

53.endif

54.//当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀

(1),然后再重复进行判断,直到表名不存在

55.isexists=true

56.dowhileisexists

57.try

58.lworksheet=ole_object_s.Workbooks(filename_t).sheets(sheetname_t)

59.isexists=true

60.sheetname_t+='

(1)'

61.catch(oleruntimeerrorer1)

62.isexists=false

63.endtry

64.loop

65.//进行工作表合并(移到目标工作簿的最后)

66.//intli

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(oleruntimeerrorer2)

79.

messagebox('提示','无法保存工作簿【'

+filename_t+

'】')

80.

isexists=false

81.

endtry

82.

ifnotisexiststhengotoerror

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.

destroyole_object_s;

93.

returntrue

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.

destroyole_object_s;

101.

returnfalse

102.

103.

104.

endfunction

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

/*函数名称:

uf_dwsaveas_excel

功能:

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

参数:

datawindowdatawin,为用户要导出数据窗口的数据窗口控件名

返回值:

integer1,success;-1,error

流程描述:

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

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

原因:

为提高程序的可读性作了少量的修改(如:

增加注释、改变排版风

格等)

*/

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

/***************以下程序将导出为EXCEL文档******************/integerli_rtn,ii,li_asc

stringls_name,ls_pathnamebooleanlb_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_rtnli_rtn=datawin.SaveAsAscii(ls_pathname)

ifli_rtn=1then

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

")return1

else

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

")return-1//error

endifelse

return-1//errorendif

elsereturn-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):

分割各个数据的字符串,缺省为tabquotecharacter(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文档******************/integerli_rtn,ii,li_asc

stringls_name,ls_pathnamebooleanlb_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_rtnli_rtn=datawin.SaveAsAscii(ls_pathname)

ifli_rtn=1then

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

")else

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

")return-1//error

endif

else

return-1//errorendif

elsereturn-1endif

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

OLEObjectxlapp,xlsubintret

numcols=long(datawin.Object.DataWindow.Column.Count)

numrows=datawin.RowCount()

//产生oleobject的实例

xlApp=CreateOLEObject

//连接ole对象

ret=xlApp.ConnectToNewObject("Excel.Sheet")ifret<0then

MessageBox("连接失败!

","连接到EXCEL失败,请确认您的系统是否已经安装EXCEL!

~r~n"&

+"错误代码:

"+string(ret))return-1

endif

//打开EXCEL文件xlApp.Application.Workbooks.Open(ls_pathname)

////使文件可见

//xlApp.Application.Visible=true

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

xlsub=xlapp.Application.ActiveWorkbook.Worksheets[1]stringls_colname,ls_text,ls_mo

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

当前位置:首页 > 经管营销 > 生产经营管理

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

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