Pb中对Excel文件的应用

302 阅读8分钟
Oleobject     ole_object//建立OLE对象 
ole_object=create     oleobject//创建对象 
integer     li_ret 
li_ret=ole_object.connecttoobject( " ", "Excel.Application ")//建立连接 
if     li_ret <> 0     then 
//如果Excel还没有打开,则新建。 
li_ret=ole_object.ConnectToNewObject( "Excel.Application ") 
if li_ret <> 0 then 
messagebox( "OLE错误 ", "OLE无法连接!错误号: "+string(li_ret)) 
return 
end if 
ole_object.Visible=true 
end if 
pointer oldpointer//设置鼠标 
oldpointer=setpointer(HourGlass!) 
ole_object.Workbooks.Add//新建工作薄 
ole_object.Application.DisplayAlerts=False//关闭警告消息对话框,防止提示 
ole_object.Application.Workbooks.Open(as_excel_filename)//打开Excel文件 
//ole_object.Application.ActiveWorkbook.SaveAs(as_text_filename,-4158)//把打开的Excel文件另存为 
//Text文件,第二参数表示数据以制表符TAB分隔 
ole_object.Application.Quit()//退出Excel 
ole_object.activeworkbook.saved=true//放弃存盘 
ole_object.workbooks.close//关闭工作簿 
ole_object.Cells(1,1).Value=reptitle 
ole_object.Range( 'A1 ').Select 
ole_object.Selection.Font.Size=24 
ole_object.selection.HorizontalAlignment=3//水平对齐方式: 
ole_object.Range( 'A1: '+f_columname(ll_colnum)+ '1 ').Select 
ole_object.Range( 'A1: '+f_columname(ll_colnum)+ '1 ').Merge 
ole_object.Columns(i).ColumnWidth=ld_width 
ole_object.Columns(i).HorizontalAlignment=3 
ole_object.Columns(i).Borders.LineStyle=1 
ole_object.Columns(i).Font.Bold=True 
ole_object.cells(i,j).NumberFormat= "@ " 
ole_object.cells(i,j).Font.Bold=false 
ole_object.cells(i,j).value=ls_value 
OLE_MyExcel.ActiveWorkbook.Activesheet.UsedRange.Rows.Count 
Sheets.Add 
基本操作: 
Ole_object.Workbooks.add//新建一个Excel文件 
Ole_object.Workbooks.Open( "FileName ")//打开一个已存在Excel文件 
Ole_object.ActiveWorkBook.Sheets( "SheetName ").Select//选择文件中一个工作表 
Ole_object.Application.Run( "MacroName ")//运行宏 
Ole_object.Application.Visible=TRUE//Excel文件可见 
Ole_object.Application.ScreenUpdating=true//设置可见属性 
②格式设置 
Ole_object.ActiveSheet.Columns( "A:U ").AutoFit//列宽自动调整 
Ole_object.ActiveSheet.Columns( "A:Z ").ColumnWidth=6.75//列宽 
Ole_object.ActiveSheet.Rows( "1:100 ").RowHeight=12//行高 
Ole_object.Application.StandardFont= "ArialNarrow ";//设置字体 
Ole_object.Application.StandardFontSize= "8 "//设置字号 
Ole_object.ActiveSheet.Font.Size= "8 "//设置字号 
Ole_object.ActiveSheet.Font.Bold=True//粗体 
Ole_object.ActiveSheet.Font.Italic=True//斜体 
Ole_object.ActiveSheet.Font.Underline=True//下划线 
Ole_object.ActiveSheet.Font.StrikeThrough=True//删除线 
Ole_object.ActiveSheet.HorizontalAlignment=3//水平:4靠右;3居中;2靠左 
Ole_object.ActiveSheet.VerticalAlignment=2//垂直:3靠下;2居中;1靠上 
Ole_object.ActiveSheet.cells(2,1).font.name=’黑体’//设置字体 
Ole_object.ActiveSheet.cells(2,1).font.size=25//设置字体大小 
③工作区域操作: 
Ole_object.ActiveSheet.Range( "A1:Z10 ").Property=value//设置一个工作区域内的属性值 
Ole_object.ActiveSheet.Range( "A1:Z10 ").Merge//合并单元格 
Ole_object.ActiveSheet.Range( "A1:Z10 ").WrapText=False//自动换行禁止 
Ole_object.ActiveSheet.Range( "A1:Z10 ").Borders(b_type).Weight=i_val//b_type:1左边界;2右边界;3上边界;4下边界;5左上倾斜;6右上倾斜 (以上为对单元格的操作)7左边界;8上边界;9下边界;10右边界;11内部垂直边界;12内部水平边界(以上为对区域的操作)//i_val:0无边 界线;然后1,2,3。。。依次边界线加粗 
Ole_object.ActiveSheet.Range( "A1:Z10 ").Borders(b_type).linestyle=1//1与7—细实、2—细虚、4—点虚、9—双细实线 
④赋值操作 
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=“姓名” 
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=1 
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=“2003-01-01” 
Ole_object.ActiveSheet.Range( "A1:Z10 ").Cells(1,2).value=“年龄”//区域内一个单元格的赋值 
Ole_object.ActiveSheet.Range( "A1:Z1 ").Cells(1,1).value=“SUM(RC[-9]:RC[-1])” 
⑤打印属性设置 
Ole_object.ActiveSheet.pagesetup.LeftHeader= " " 
Ole_object.ActiveSheet.pagesetup.CenterHeader= " "//设置页眉 
Ole_object.ActiveSheet.pagesetup.RightHeader= " "// 
Ole_object.ActiveSheet.pagesetup.LeftFooter= " " 
Ole_object.ActiveSheet.pagesetup.CenterFooter= " "//设置页脚 
Ole_object.ActiveSheet.pagesetup.RightFooter= " " 
Ole_object.ActiveSheet.pagesetup.LeftMargin=0//设置左边距 
Ole_object.ActiveSheet.pagesetup.RightMargin=0//设置右边距 
Ole_object.ActiveSheet.pagesetup.TopMargin=2/0.035//设置顶边距为2厘米 
Ole_object.ActiveSheet.pagesetup.BottomMargin=0//设置底边距 
Ole_object.ActiveSheet.pagesetup.HeaderMargin=2/0.035//设置页眉到顶端边距2厘米 
Ole_object.ActiveSheet.pagesetup.FooterMargin=3/0.035//设置页脚到底边距为3厘米 
Ole_object.ActiveSheet.pagesetup.PrintHeadings=False 
Ole_object.ActiveSheet.pagesetup.PrintGridlines=False//设置打印单元格网线 
Ole_object.ActiveSheet.pagesetup.PrintQuality=600 
Ole_object.ActiveSheet.pagesetup.CenterHorizontally=True//设置页面水平居中 
Ole_object.ActiveSheet.pagesetup.CenterVertically=True//设置页面垂直居中 
Ole_object.ActiveSheet.pagesetup.Orientation=2//打印方向1垂直;2水平 
Ole_object.ActiveSheet.pagesetup.Draft=False 
Ole_object.ActiveSheet.pagesetup.PaperSize=9//8-A3;9-A4//设置纸张大小 
Ole_object.ActiveSheet.pagesetup.Order=1//打印次序:1先上下再左右2先左右再上下 
Ole_object.ActiveSheet.pagesetup.FitToPagesWide=1//缩放在一页中:0否;1是 
Ole_object.ActiveSheet.usedrange.copy//拷贝整个工作表 
Ole_object.ActiveSheet.cells(1,4).clearcontents//清除单元格公式 
Ole_object.ActiveSheet.printpreview//打印预览工作表 
Ole_object.ActiveSheet.printout//打印输出工作表 
Ole_object.ActiveSheet..range(“a1:e3”).copy//拷贝指定区域 
Ole_object.worksheet(“sheet2”).range(“a1”).pastespecial//粘贴 
Ole_object.ActiveSheet.rows(2).insert//在第2行之前插入一行 
Ole_object.ActiveSheet.colunms(2).insert//在第2列之前插入一列ole_object.Application.DisplayAlerts=False //关闭警告消息对话框,防止提示
ole_object.activeworkbook.sheets.Add//新增工作表 
ole_object.worksheets( "sheet3 ").activate//设活动工作表 
ole_object.worksheets( "sheet1 ").delete//删除指定工作表 
ole_object.caption= " "//修改标题 
ole_object.visible=true//显示Excel窗口 
ole_object.activeworkbook.saveas( 'C:\adm.xls ') 
ole_object.activesheet.columns(1).columnwidth=5//设置指定列的宽度(单位:字符个数) 
ole_object.activesheet.rows(1).rowheight=1/0.035//设置指定行的高度(单位:磅,设定行高为1厘米,1磅=0.035厘米) 
ole_object.worksheets(‘sheel1’).rows(18).pagebreak=1//在每18行之前插入分页符ole_object.activesheet.columns(4).pagebreak=0//在第4列之前删除分页符 
ole_object.cells(1,1).value=1//给单元格赋值 
ole_object.cells(2,1).value=2 
ole_object.cells(4,5).value= '=sum(a1,a2) ' 
ole_object.Range( 'a1:z6555 ').locked=false//单元格保护锁定 
ole_object.Range( 'a1:z6555 ').FormulaHidden=true//单元格公式隐藏 
ole_object.Application.ActiveSheet.Protect( '12345 ',true,true,true)//对活动单元格进行保护 
ole_object.Application.Activeworkbook.Protect( '12345 ',true,true)//对活动工作簿进行保护 
ole_object.Application.ActiveSheet.unProtect( '12345 ')//取消对活动单元格进行保护 
ole_object.Range( 'A1:c1 ').Select//选取范围 
ole_object.Range( 'A1:d4 ').Merge//合并单元格 
ole_object.Selection.Font.Size=24 
ole_object.Columns(1).Font.Bold=True 
ole_object.selection.HorizontalAlignment=3//水平 
ole_object.Columns(1).ColumnWidth=10//设置列宽 
ole_object.Range( 'a1:d4 ').borders().weight=4//设置边框线宽 
ole_object.Range( 'a1:d4 ').borders().linestyle=1//设置边框样式 
ole_object.ActiveSheet.name= "xzm " 
ole_object.workSheet( 'sheet2 ').name= "xzm "//修改当前工作表名称 
ole_object.activeworkbook.ActiveSheet.name= "xzm " 
//ole_object.Application.Quit() 
ole_object.disconnectobject()//取消连接 
destroyole_object//删除对象


//导出成excel时,如‘001‘可先设置对应单元格格式,再导出到对应单元格
Ole_object.range(‘a1:z99’).cells(4,5).NumberFormatLocal = "@"
Ole_object.range(‘a1:z99’).cells(4,5).values = ‘001’



PB调用EXCEL的操作不失为一种好的报表输出方式 收藏
对于较为中国化的报表,虽然后dw这个坚强后盾,但是也难不住繁复疲劳的应对。
不过我们可以知道,数据的输出,都是居于table的栏位或者计算字段。只是很多统计的模式和展现模式不同。
我在一年前作完一个系统,可是客户几乎隔三差五有新的东东要输出报表。终于我发现。让客户先在excel里弄好,然后再写程序来输出也是一个不错的方法。关键是,客户给的东西不必要再进自己的系统,所以数据不会发生什么问题。如果本身软件有任何问题,那能从excel里的写的结果很容易看得出来。虽然写excel表格要花很多时间,但是减少了输入导入和输出的一些麻烦。
转载excel操作大全:
powerbuilder操作excel命令大全(例子的有些地方不对!)
2006-12-04 16:43
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应用程序调用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.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值:17-细实、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-窄行8 5 11 39-宽行14 11)
  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
42 合并
string worksheet,beginRowcol,EndRowCol
MyOLE.ActiveWorkBook.Sheets(worksheet).Range(BeginRowCol ":" EndRowCol).Select
MyOLE.ActiveWorkBook.Sheets(worksheet).Range(BeginRowCol ":" EndRowCol).Merge
43 sheet改名
MyOLE.ActiveWorkBook.Sheets(olename).select
MyOLE.ActiveWorkBook.Sheets(olename).name=newname
MyOLE=Create OLEObject
ConnectErr=MyOLE.ConnectToNewObject ("excel.Application")
MyOLE.visible=false
//打开指定的XLS文件激活workbooks
MyOLE.application.workbooks.Open (FilePath)
//对XLS文件进行了改动以后,在关闭该文件时是否需要向用户提出警告。
MyOLE.Application.DisplayAlerts = False
if isnull(MyOLE) then return -1 ;
if ConnectErr <0 then
choose case ConnectErr
case -1
messagebox('错误提示','无效的调用')
case -2
messagebox('错误提示','类名没发现')
case -3
messagebox('错误提示','对象不能创建')
case -4
messagebox('错误提示','文件不能连接')
case -5
messagebox('错误提示','不能连接现在的对象')
case -6
messagebox('错误提示','文件无效')
case -7
messagebox("错误提示","文件不存在或已经打开")
case -8
messagebox("错误提示","服务器不能装载选择的文件")
case -9
messagebox("错误提示","其他错误")
end choose
return -1
end if
///////////////////////////////////////////////////////////////////////////////
oleobject xlApp    //声明Excel应用程序对象
xlApp = Create OLEObject
OLEObject xlsub1,xlsub2,xlsub3,obook1,obook2,xlsub4,obook3
ret = xlApp.ConnectToNewObject( "Excel.Sheet" ) //打开自动化对象  应为  "excel.application"
if ret < 0 then
        MessageBox("Connect to Excel Failed !",string(ret))
   return
//操作第一个excel文件
string ls_file3="C:\mytest.xls"
obook3=xlApp.Application.Workbooks.Open(ls_file3) //打开文件
xlsub4 = xlapp.Application.ActiveWorkbook.Worksheets[1] //激活第一页
//对单元格赋值
xlsub4.cells[c,3].Value = string(mydata.getitemdecimal(r,'rs'))
xlsub4.cells[c,5].Value = string(mydata.getitemdecimal(r,'yp'))
xlsub4.cells[c,6] = string(mydata.getitemdecimal(r,'jc'))
xlsub4.cells[c,7] = string(mydata.getitemdecimal(r,'hy'))
xlsub4.cells[c,8] = string(mydata.getitemdecimal(r,'zl'))
//合并一个excel文件
string ls_ran
ls_ran = "B6:M"+string(ld_1+1)
obook1 = xlApp.Application.Workbooks.Open(ls_file2)
xlsub1 = xlapp.Application.ActiveWorkbook.Worksheets[1]
xlsub1.Range(ls_ran).Copy()        //把所选内容复制到内存中

xlApp.Application.Visible = false
xlsub2 = obook3.Worksheets.add()
xlsub2.name = "分类汇总"   
xlsub2.Range(ls_ran).PasteSpecial() //把上一个文件内容粘过来
//加入分类汇总
obook3.Worksheets("分类汇总").Activate()
integer a[6]
    a={8,9,10,11,12,13}
    xlsub2.Range(ls_ran).Select()
    xlApp.Application.Selection.Subtotal(3,-4157,a, True, False, True)
xlsub2.Rows(1).Insert()
xlsub2.cells[1,1] = left(gs_shuqi,4)+"年"+right(gs_shuqi,2)+"月份"
xlsub2.Cells[1,1].Font.Name="宋体"
xlsub2.Cells[1,1].Font.Size=22
xlsub2.Range("A1:M1").Select()
xlApp.Application.Selection.Merge()
xlApp.Application.Selection.HorizontalAlignment = 2
oBook1.save()
oBook3.Save()
oBook3.Saveas(is_docname)
oBook1.close()
oBook3.close()
xlApp.Application.quit()
xlApp.DisConnectObject()