1、PB操作Excel详解run(notpad.exe) /pb 运行记事本run(calc.exe) /pb 运行计算器记住 :当我们用 PB导出数据到 EXCEL时,不管是用 Saveas 还是 clipboard 它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列属性,在查询时主缓冲区中该列有数据,则就会导出出来 用方法得到列名或其他属性也是一样的 及时隐藏了也可以得到当中间的某列给隐藏时, 下次打开后它会显示在末尾的位置, 但是用 Saveas 输出数据时, 不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的 也就是说没有改变数据窗口对
2、象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。但是这样会改变界面显示的位置,记住,没有改变源如何用 PB程序在 excel 画表格边框线,如何改变文字大小1. 创建 Excel 对象eole=CREATEOBJECT(2. 添加新工作簿eole.Workbooks.addExcel.application )3. 设置第 3 个工作表为激活 工作表eole.Worksheets( sheet3 ).Activate 4打开指定 工作簿eole.Workbooks.Open( c:templl.xls ) 5显示 Excel 窗口eole
3、.visible=.t.6. 更改 Excel 标题栏eole.Caption= VFP应用程序调用 Microsoft Excel 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.Worksheet
4、s( Sheet1 ).Rows(18).PageBreak=1 11在第 4 列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012指定边框线宽度 (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细
5、虚、 4点虚、 9双细实线 )14. 设置页眉eole.ActiveSheet.PageSetup.CenterHeader= 报表 115. 设置页脚eole.ActiveSheet.PageSetup.CenterFooter= 第 P 页 16设置页眉到顶端边距为 2 厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517设置页脚到底边距为 3 厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.035 18设置顶边距为 2 厘米eole.ActiveSheet.PageSetup.TopMargin
6、=2/0.035 19设置底边距为 4 厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520设置左边距为 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.CenterVertical
7、ly=.t.24设置页面纸张大小 (1 窄行 8 5 11 39 宽行 14 11) eole.ActiveSheet.PageSetup.PaperSize=125打印单元格网线eole.ActiveSheet.PageSetup.PrintGridlines=.t. 26拷贝整个工作表eole.ActiveSheet.UsedRange.Copy27. 拷贝指定区域eole.ActiveSheet.Range( A1:E2 ).Copy 28粘贴eole.WorkSheet( Sheet2 ).Range( A1).PasteSpecial29在第 2 行之前插入一行eole.Active
8、Sheet.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.Ce
9、lls(1,4).ClearContents 36打印预览工作表eole.ActiveSheet.PrintPreview2 / 1637打印输出工作表eole.ActiveSheet.PrintOut 38工作表另为eole.ActiveWorkbook.SaveAs( c:temp22.xls ) 39放弃存盘eole.ActiveWorkbook.saved=.t. 40关闭工作簿eole.Workbooks.close41退出 Excel eole.quit先把标题放到剪贴板上,再 PASTE()到 EXCEL中,代码如下::clipboard(ls_value) ao_object.
10、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. end if29. / 打开源和目标工作簿30. ole_object_s.workbooks.open(filename_s)31. ole_object_s.workbooks.open(filename_t)32. str
11、ing ls_t33. ls_t = filename_t34. filename_s = of_splitpath(filename_s, 2)35. filename_t = of_splitpath(filename_t, 2)36. / 隐 藏 excel37. ole_object_s.visible = false38. ole_object_s.displayalerts = false39. int n,t40. int li41. boolean isexists= false42. oleobject lworksheet43. / 判断源工作簿中的工作表是否存在44. t
12、ry45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)46. isexists = true47. catch ( oleruntimeerror er)48. isexists = false49. end try50. if isexists= false then51. messagebox( , 工作簿【 + filename_s + 】中工作表不存在工作表 + sheetname_s + )52. goto error53. end if54. / 当目标工作簿中存在 sheet 名为 she
13、etname_t 的工作表时,为 sheetname_t 增加后缀 (1) ,然后再重复进行判断,直到表名不存在55. isexists = true56. do while isexists57. try58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)59. isexists = true60. sheetname_t += (1)61. catch ( oleruntimeerror er1)62. isexists = false63. end try64. loop65. / 进行工作表合并(
14、移到目标工作簿的最后)66. /int li67. setnull(li)68. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets( long (ole_ob ject_s.workbooks(filename_t).Sheets.count)69. / 重命名工作表70. ole_object_s.workbooks(filename_t).sheets( long (ole_object_s.workbooks(filename_
15、t).Sheets.count).name = sheetname_t71./ 保存目标工作簿72.isexists = true73./ole_object_s.visible = true74./ole_object_s.displayalerts = true75./messagebox(, )76.try77.ole_object_s.workbooks(filename_t).save()78.catch ( oleruntimeerror er2)79.messagebox( 提示 , 无法保存工作簿【 + filename_t + 】 )80.isexists = false81
16、.end try82.if not isexists then goto error83./ 关闭工作簿84.ole_object_s.workbooks(filename_s).close85.ole_object_s.workbooks(filename_t).close86./ 退 出 excel87.ole_object_s.workbooks.close88.ole_object_s.Application.quit();89./ 断开连接90.ole_object_s.disconnectobject();91./ 注销 ole 对象92.destroy ole_object_s;
17、93.return true94.error:95.ole_object_s.workbooks(filename_s).close96.ole_object_s.workbooks(filename_t).close97.ole_object_s.workbooks.close98.ole_object_s.Application.quit();99.ole_object_s.disconnectobject();100.destroy ole_object_s;101.return false102.103.104.end function/*/* 函数名称: uf_dwsaveas_ex
18、cel功能:将数据窗口数据导出 EXCEL文件,并将 EXCEL文件默认英文标题替换成中文。参数: datawindow datawin ,为用户要导出数据窗口的数据窗口控件名返回值: integer 1 , success ; -1 , error流程描述: ( 原程序 ) 先用 saveas() 倒出为 excel 文件,再替换表头为中文名( 新程序 ) 直接用 saveasAscii() 倒出为 excel 文件原因: 为提高程序的可读性作了少量的修改 ( 如:增加注释、 改变排版风格等 )*/*/* 以下程序将导出为 EXCEL文档 */ integer li_rtn,ii,li_as
19、cstring ls_name,ls_pathname boolean lb_existif datawin.RowCount()1 thenMessageBox( 提示信息 , 请先检索数据再导出至 Excel!) return -1/errorend ifli_rtn=GetFileSaveName( 保 存 文 件 ,ls_pathname,ls_name,xls,Excel 文 件(*.xls),*.xls)if li_rtn=1 thenlb_exist = FileExists(ls_pathname)IF lb_exist THENli_rtn = MessageBox( 保 存
20、 , ls_pathname+ 已 经 存 在 , 是 否 覆盖?,Exclamation!, YesNo!)end ifif li_rtn=1 then/ 当文件存在用户选择覆盖,或是文件本就不存在时。注意变量 li_rtn li_rtn=datawin.SaveAsAscii(ls_pathname)if li_rtn=1 thenMessageBox( 提示信息 , 导出数据成功 !) return 1elseMessageBox( 错误信息 , 导出数据失败 !) return -1/errorend if elsereturn -1/error end ifelse return -
21、1end if/ 在程序中调式没有问题,可以把数据窗口原样的输出,包括中英文,如果你用这个函数导出来的也是乱码的话,可能是你的操作系统有问题了函数 SaveAsAscii ()用法:()函数。它允许输出数据窗口的可视部分为文本格式,组、交叉报表、计算域等被保存为输出数据的一部分。在很多的情况下, 我们需要将书局窗口中的数据保存为其他应用程序的格式 (比如: MS Excel, Word, email 等). 为此 Powerbuilder 提供了 SaveAs 函数,然而使 SaveAs 保存数据窗口为Execl 格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形、交叉报表、计算域等等
22、都被丢弃, 它仅仅保存了数据窗口 buffer 中的数据。 为了输出交叉报表、 组、和计算域等等可视的数据, PowerBuilder 6.5 (after build 444) 提供了新的函数解决这些缺陷, 它是: SaveAsAscii ()函数。它允许输出数据窗口的可视部分为文本格式,组、交叉报表、 计算域等被保存为输出数据的一部分。下面讨论该函数:描述:将数据窗口或数据存储中的内容保存为 ASCII 文本文件适用于:数据窗口和 DataStore 对象符号:dwcontrol.SaveAsAscii ( filename , separatorcharacter , quotechar
23、acter , lineending )其中:dwcontrol 位数据窗口或 DataStore 的名字filename :要保存的文件名;separatorcharacter (optional) :分割各个数据的字符串,缺省为 tab quotecharacter (optional) :包围值的字符串,缺省为空;lineending (optional) :放在每行末尾的字符串,缺省为回车 character (rn)下面的例子显示将数据窗口中的数据保存到文件 monthly.txt, 每个数据以 | 分割dw_4.saveasascii(monthly.txt,|)在数据之间使用分割
24、符是比较好的注意,因为缺省的 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 )/
25、*/* 函数名称: uf_dwsaveas_excel功能:将数据窗口数据导出 EXCEL文件,并将 EXCEL文件默认英文标题替换成中文。参数: datawindow datawin ,为用户要导出数据窗口的数据窗口控件名返回值: integer 1 , success ; -1 , error流程描述:先用 saveasAscii() 倒出为 excel 文件,再替换表头为中文名设计人: yanhui2003 年 11 月修改人:叶文林 2004.4.8原因:为提高程序的可读性作了少量的修改 ( 如:增加注释、改变排版风格等)*/*/* 以下程序将导出为 EXCEL文档 */ intege
26、r li_rtn,ii,li_ascstring ls_name,ls_pathname boolean lb_existif datawin.RowCount()1 thenMessageBox( 提示信息 , 请先检索数据再导出至 Excel!) return -1/errorend ifli_rtn=GetFileSaveName( 保存文件 ,ls_pathname,ls_name,xls,Excel 文件(*.xls),*.xls)if li_rtn=1 thenlb_exist = FileExists(ls_pathname)IF lb_exist THENli_rtn = Me
27、ssageBox( 保存, ls_pathname+ 已经存在 , 是否覆盖 ?,Exclamation!, YesNo!) end ifif li_rtn=1 then/ 当文件存在用户选择覆盖,或是文件本就不存在时。注意变量 li_rtn li_rtn=datawin.SaveAsAscii(ls_pathname)if li_rtn=1 then/MessageBox( 提示信息 , 导出数据成功 !) elseMessageBox( 错误信息 , 导出数据失败 !) return -1/errorend ifelsereturn -1/error end ifelse return -
28、1 end if/* 以下程序将导出的 EXCEL英文标题替换为汉字 */ long numcols , numrows , c, rOLEObject xlapp , xlsub int retnumcols = long(datawin.Object.DataWindow.Column.Count)numrows = datawin.RowCount()/ 产生 oleobject 的实例xlApp = Create OLEObject/ 连接 ole 对象ret = xlApp.ConnectToNewObject( Excel.Sheet ) if ret 0 thenMessageBox( 连接失败 !, 连接到 EXCEL失败 , 请确认您的系统是否已经安装 EXCEL!rn&+ 错误代码 :+string(ret) return -1end if/ 打开 EXCEL文件xlApp.Application.Workbooks.Open(ls_pathname)/ 使文件可见/xlApp.Application.Visible = true/ 得到活动工作表的引用 , 改善程序性能xlsub = xlapp.Application.ActiveWorkbook.Worksheets1 string ls_colname,ls_text,ls_mo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1