当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

在PB中使用OLEObject操作Excel

admin3年前 (2022-06-26)PowerBuilder5470 修订时间:2022-06-26 17:32:40

1.申明和定义(其他变量定义省略)

 OLEObject  xlapp   // EXCEL application object
 OLEObject xlwk   // EXCEL workbook object
 OLEObject xlsub   // EXCEL worksheet object
 OLEObject xlcel   // EXCEL cell object

2.连接Excel文件,ls_path为Excel路径

 xlapp = create OLEObject
 li_ret = xlapp.ConnectToObject(ls_path)
 if li_ret < 0  then
 MessageBox("ERR","")
 destroy xlapp
 end if

3.打开Excel的workbook

 ll_cnt = xlapp.Application.Workbooks.Count //获取当前workbook的个数
 xlwk = xlapp.Application.Workbooks[ll_cnt] //打开最新的一个对象,也就是上面连接后打开的excel对象(如果改文件已经打开,需特殊考虑)
 xlsub = xlwk.Worksheets[1]
 xlapp.Application.Windows(ll_cnt).Visible = true //设置对象不可视
 xlsub.Activate

4.操作Excel的sheet

 //设置单元格背景颜色
 xlsub.cells(1,1).Interior.Color = rgb(255,0,0)
 xlsub.cells(1,1).Interior.Pattern = "1"
 //设置列的filter
 xlsub.Rows("1:1").AutoFilter
 //获取Excel行数
 ll_rowcnt_xls = xlsub.UsedRange.Rows.Count
 //设置Excel列宽自动大小(随内容宽度自动变化)
 xlsub.Rows("1:" + string(ll_rowcnt_xls)).Columns.AutoFit 
 //sheet锁定, false:解锁; true:加锁
 xlsub.Cells.Locked = False

 //做一个下拉列表框,当选择DEL时候背景变成红色,选择NoAction无变化

 xlsub.Range(ls_range).Validation.Delete
 xlsub.Range(ls_range).Validation.Add("3", "1", "1", "NoAction,DEL")
 xlsub.Range(ls_range).Validation.IgnoreBlank = True
 xlsub.Range(ls_range).Validation.InCellDropdown = True
 xlsub.Range(ls_range).Validation.InputTitle = ""
 xlsub.Range(ls_range).Validation.ErrorTitle = ""
 xlsub.Range(ls_range).Validation.InputMessage = ""
 xlsub.Range(ls_range).Validation.ErrorMessage = ""
 xlsub.Range(ls_range).Validation.IMEMode(0)
 xlsub.Range(ls_range).Validation.ShowInput = True
 xlsub.Range(ls_range).Validation.ShowError = True
  xlsub.Range(ls_range).FormatConditions.Delete
 xlsub.Range(ls_range).FormatConditions.Add("1", "3", "DEL")
 xlsub.Range(ls_range).FormatConditions(1).Font.Color = rgb(255,0,0)

 //设置sheet单元格格式为文本格式

 xlsub.Cells.NumberFormatLocal = "@"

 // 设置保护,第一个参数是密码,后面的参数比较复杂,可以自己去一个一个实验

 xlsub.protect("password",true, true,true, false,false, false,false,true,true, false,true,true,false,true,false)

 //将sheet1的一列复制到sheet2中

 xlwk.Sheets("sheet1").Select()
 xlwk.Sheets("sheet1").Columns(ll_col_xls).Copy() // 要复制的列
 xlwk.Sheets("sheet2").Select()
 xlwk.Sheets("sheet2").Columns(ll_col_newsheet).Select() // 粘贴到ll_col_newsheet列前
 xlwk.Sheets("sheet2").Paste()

5.关闭Excel

 xlapp.Application.DisplayAlerts   =   False // 不提示保存等提示信息,且为不保存
 xlwk.save() 
 xlwk.Close()
 xlapp.ConnectToObject(ls_path) //从新打开一个Excel对象
 ll_cnt = xlapp.Application.Workbooks.Count
 xlwk = xlapp.Application.Workbooks[ll_cnt]
 xlapp.Application.DisplayAlerts   =   True


 // -------------------------------------------
 // 上面关闭提示了,这里要解开关闭,否则其他woekbook关闭也没提示,
 //但是直接设置为true是不可以的(见下面两行代码),必须再打开一个对象,再设置为true才可以
 //xlapp.Application.DisplayAlerts   =   False
 //xlapp.Application.DisplayAlerts   =   True
 //--------------------------------------------
 
 xlwk.close()

 xlapp.DisConnectObject()
 Destroy xlsub
 Destroy xlwk
 Destroy xlapp

 其他一些简单的操作,网上有很多很好的资料,这里只是提到一些特殊的操作,例如:下拉列表框,选择条件,设置保护等等,而这些也正是网上还不容易找到答案的。
 因为在Excel录制了宏之后,把宏放到PB里还是会出现很多问题,需要查阅资料以及自己的实验才能得出正确结果, 希望对需要的人有帮助.

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=179

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。