在PB中使用OLEObject操作Excel
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里还是会出现很多问题,需要查阅资料以及自己的实验才能得出正确结果, 希望对需要的人有帮助.