经典语录大全 点击: 2013-07-11
PB中使用OLEObject操作Excel
在PB中使用OLEObject操作Excel glave posted @ 2009年7月14日 06:15 in PB with tags PB OLE excel , 4671 阅读
在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里还是会出现很多问题,需要查阅资料以及自己的实验才能得出正确结果,
希望对需要的人有帮助.
pb操作文档表格源码
PB中打开了一个word文档怎么把图片插入到word文档里面去
myword.Selection.InlineShapes.AddPicture('C:\1.jpg',False,True) 加入的表格
ole_1.ActiveDocument.Tables.Add(ole_1.Selection.Range, ll_rownum, ll_colnum,wdWord9TableBehavior,wdAutoFitFixed)
dw2word,dw2xls
PB 数据窗口数据导出到word,excel, excel 可以自定义修改excel文档的列宽对齐方式,字体样式等
// dwsave2word 调用ole
global type gf_exportdata2word from function_object
end type
forward prototypes
global subroutine gf_exportdata2word (datawindow ad_datawindow) end prototypes
global subroutine gf_exportdata2word (datawindow ad_datawindow);string ls_filepath
ls_filepath=gf_getfilesavename()
OleObject OleObjectWord
OleObjectWord=Create OleObject
// 连接word
if OleObjectWord.ConnectToNewObject("Word.application") <> 0 then Messagebox("提示","ole连接错误!")
return
end if
OleObjectWord.visible=false //word文档在操作数据过程中是否可见 Long col_colnum,col_rownum
Constant Long wdTableBehavior=1
Constant Long wdAutoFitFixed=0
Constant Long wdCell=12
String str_value
// 得到数据窗口数据的列数和行数(行数应该是数据行数+1)
col_colnum=Long(ad_datawindow.object.datawindow.column.count) col_rownum=ad_datawindow.rowcount() + 1
// 先在word文档中画好表格
SetPointer(HourGlass!)
OleObjectWord.Documents.Add
OleObjectWord.ActiveDocument.Tables.Add(OleObjectWord.Selection.Range,&
+col_rownum,col_colnum,wdTableBehavior,wdAutoFitFixed)
string ls_colname
integer i,j,k,l
for i=1 to col_colnum
//得到标题头的名称
ls_colname=ad_datawindow.Describe('#'+string(i)+".name") + "_t" str_value=ad_datawindow.DEscribe(ls_colname+".text")
OleObjectWord.Selection.TypeText(str_value)
OleObjectWord.Selection.MoveRight(wdCell)
Next
ad_datawindow.setRedraw(false)
OleObjectWord.Selection.MoveLeft(wdCell)
SetPointer(HourGlass!)
for i=2 to col_rownum
for j=1 to col_colnum
ad_datawindow.Scrolltorow(i - 1)
ad_datawindow.SetColumn(j)
str_value=ad_datawindow.GetItemstring(i - 1,j)
if isnull(str_value) then
str_value=''
end if
OleObjectWord.Selection.MoveRight(wdCell)
OleObjectWord.Selection.TypeText(str_value)
next
next
ad_datawindow.setredraw(true)
Constant long wdFormatDocument=0
// 保存新建的文档
OleObjectWord.ActiveDocument.SaveAs(ls_filepath,0,false,"",true,"",false,false,false,false,false)
boolean lb_exist
lb_exist = FileExists(ls_filepath)
if lb_exist then
messagebox("提示","数据已经保存到"+ls_filepath)
end if
//断开ole连接
OleObjectWord.DisconnectObject()
destroy OleObjectWord
end subroutine
// dwsave2xls 调用ole
global type gf_dwsavetoexcel from function_object
end type
forward prototypes
global function integer gf_dwsavetoexcel (datawindow adw)
end prototypes
global function integer gf_dwsavetoexcel (datawindow adw); string xlsname, named
integer value
string col_del,first_del
value = GetFileSaveName("另存为", xlsname,named,"XLS","Xls Files (*.XLS), *.XLS")
if value = 1 then
adw.saveas(xlsname,Excel!,TRUE)
else
return 2
end if
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject
integer li_ret
li_ret = ole_object.ConnectToObject("","Excel.Application")
IF li_ret <> 0 THEN
li_ret = ole_object.ConnectToNewObject("Excel.Application")
IF li_ret <> 0 THEN
messagebox("OLE错误","OLE无法连接!~r~n错误号:" + string(li_ret))
Return 0
END IF
ole_object.visible = False
END IF
pointer oldpointer
oldpointer = SetPointer(HourGlass!)
ole_object.Workbooks.open(xlsname)
ole_object.WorkSheets[1].Activate
long columncount, rowscount
columncount = long(adw.object.datawindow.column.count) rowscount = adw.rowcount() + 1
string ls_colname[],ls_value
integer i,j
long handle
handle = OpenChannel("Excel", xlsname)
// 将列名转化为中文名称,即标题头名称
for j = 1 to columncount
ls_colname[j] = adw.describe("#"+string(j)+".name") ls_value = adw.describe(ls_colname[j]+"_t"+".text")
// ole_object.activesheet.cells[1,j].value = ls_value 开始的方法
SetRemote("R1C"+STRING(J), ls_value, handle)
next
datawindowchild ldw_child
long ll_found
For j = 1 To columncount
//col_del标识将要删除不可见的列
if adw.Describe("#" + String(j) + ".visible") ="0" then
IF integer(j)<27 then
//当列小于26时,excel中用A-Z表示列号{pbole操作文档大全}.
first_del = char(integer(J)+64)
else
//大于26,小于等于52列时,AA-AZ,大于52列时可能性不大未做考虑 first_del= "A"+char(integer(J)+38)
end if
col_del=col_del + first_del +":"+ first_del+", "
continue
end if
//当列可见且为下拉数据窗口时,数据值转化为显示值
If adw.Describe("#" + String(j) + ".edit.style") = 'dddw' Then
adw.GetChild( ls_colname[j], ldw_child )
PB的OLE编程
PB的OLE编程技术
OLE,全称Object Linking and Embedding,即对象链接和嵌入技术,是Windows系统中允许应用程序共享数据和程序功能的一种标准的便利方法。
在PowerBuilder中,在窗口画板上,可以放置OLE控件,把Windows系统内注册的OLE对象嵌入到界面中,该控件是被嵌入的对象的容器,用户能激活该OLE对象,调出产生它的原始服务程序,可视化编辑修改。
也能用编程的方法,在内存中创建对象,连接到服务程序,调用相应功能,设置对象的各种属性。这种方法不可视地操作对象,发送命令,并不需要在窗口中放置一个OLE控制,叫做“OLE自动化”。在这种情况下,还可以设置服务程序的可视属性为“True”,让服务程序显示在用户面前。
在PowerBuilder中,OLEObject对象类型是专门用于“OLE自动化”的。OLEObject是个动态对象类型,这意味着编译器会接受这个对象的任何属性、方法和参数列表,PowerBuilder不知道你调用的属性和方法是否有效,而是把它留给服务程序自己去判断,如果确实没有,就会在运行的时候报错。
使用OLEObject对象变量编程,少不了如下四步:
1. 声明变量,创建对象
OLEObject myoleobject
myoleobject = CREATE OLEObject
2. 连接到某个具体的OLE对象
myoleobject.ConnectToObject „ 或者{pbole操作文档大全}.
myoleobject.ConnectToNewObject „
3. 利用OLE服务器的属性和方法操作该对象
myoleobject.property = „ /* 属性 */
myoleobject.function(„) /* 方法 */
4. 断开和OLE对象的连接,销毁对象,释放内存。
myoleobject.Quit()
myoleobject.DisconnectObject()
Destroy myoleobject
这种用编程的方法操作OLE对象,应用非常普遍。本文结合三个典型的应用实例,诠释具体的编程步骤。
一、操作Word文档对象
要创建一份文件名为 contact.doc 的Word文档格式的信函,其中有四个书签: a) name1 - 寄信人名字
b) name2 – 收信人称呼
c) address1 – 寄信人地址
d) body – 信的正文
该信函要有如下内容:
Multimedia Promotions, Inc.
1234 Technology Drive
Westboro, Massachusetts
May 16, 2005
[bookmark name1]
[bookmark address1]
Dear [bookmark name2]
[bookmark body]
Sincerely,
Frank Wang
程序代码如下所示:
OLEObject o1
integer result
string ls_name, ls_addr, ls_body
contact_ltr = CREATE oleObject /* 创建对象,分配内存 */
result = o1.ConnectToNewObject("Word.Application") /* 连到服务器 */ IF result <> 0 THEN /* 检测错误 */
DESTROY contact_ltr
MessageBox("OLE 错误", "不能连到Word. 出错代码: " + Sring(result)) RETURN
END IF
o1.Documents.open("c:\contact.doc") /* 打开预定义书签的文档 */
ls_name = „ /* 人名存入变量 */
o1.Selection.goto("name1") /* 定位到书签name1 */
o1.Selection.typetext(ls_name) /* 插入人名 */
o1.Selection.goto("name2") /* 定位到书签name2 */
o1.Selection.typetext(ls_name) /* 插入人名 */
ls_addr = „ /* 地址 */
o1.Selection.goto("address1") /* 定位到书签address1 */
o1.Selection.typetext(ls_addr) /* 插入地址 */
ls_body = „ /* 正文 */
o1.Selection.goto("body") /* 定位到书签body */
o1.Selection.typetext(ls_body) /* 插入正文 */
o1.Application.printout() /* 打印 */ -
o1.Documents.close /* 关闭文档 */
o1.Quit()
o1.DisconnectObject()
DESTROY
二、操作Excel文档对象
要生成某会员管理系统的会员资料卡,卡片中有多项内容规整地组合在一起,使用PB的DataWindow技术不能制作如此复杂的业务报表,因此利用Excel画出模板,然后在PB程序中往模板的各个位置填入相应内容。程序代码如下:
„
oleobject xlApp, xlSheet
xlApp = CREATE OLEObject
xlSheet = CREATE OLEObject
string ls_current_dir, ls_report_filename
ls_current_dir = GetCurrentDirectory()
ls_report_filename = ls_current_dir + "\report\会员资料卡.xls"
If xlApp.ConnectToObject(ls_report_filename) <> 0 Then
Messagebox("OLE 错误","不能连接到相应的 Excel表格")
Return t
End If
xlSheet = xlApp.application.workbooks(1).worksheets(1)
string ls_mem_id, ls_mem_name, ls_id_card_no, ls_sex, ls_join_date string ls_join_unit_name, ls_employ_status
ls_mem_id = „ /* 会员号 */
ls_mem_name = „ /* 会员名 */
ls_id_card_no = „ /* 身份证号码 */
ls_sex = „ /* 性别 */
ls_join_date = „ /* 入会日期 */
ls_join_unit_name = „ /* 入会单位 */
ls_employ_status = „ /* 就业状况 */
xlSheet.Range("B3").Value = ls_mem_name
xlSheet.Range("E3").Value = ls_sex
xlSheet.Range("H3").Value = "'" + ls_id_card_no
xlSheet.Range("B4").Value = "'" + ls_mem_id
xlSheet.Range("E4").Value = ls_join_date
xlSheet.Range("H4").Value = ls_join_unit_name
xlSheet.Range("H6").Value = ls_employ_status
„„
xlSheet.Range("F30").Value = "打印日期:2005年05月16日')
xlApp.application.workbooks(1).saved = true /* 退出时不会提示保存 */ xlSheet.PrintOut /* 打印 */
xlApp.application.quit() /* 退出 */
xlApp.DisconnectObject() /* 断开连接 */
destroy xlApp /* 释放对象 */
destroy xlSheet /* 释放对象 */
三、操作BusinessObjects文档对象 /
利用PB程序传递参数,自动刷新、打印BusinessObjects文档。
„
OLEObject boApp,boDoc 2
boApp = CREATE OLEObject
boDoc = CREATE OLEObject /* 打开的当前活动BO文档对象 */
integer li_result
li_result = boApp.ConnectToNewObject("BusinessObjects.Application.6") string lstr_err
Choose Case li_result
case -1
lstr_err = '无效的调用'
case -2
lstr_err = '系统中没有安装 BusinessObjects.Application.6 这个类' „„
end choose
if li_result <> 0 then )
MessageBox("OLE 错误","不能连接到相应的 BO 对象 ~r~n" + lstr_err) Destroy boApp
Destroy boDoc
return
end if
boApp.Interactive = False /* 刷新报表时,不显示参数对话框 */ string ls_filename /* 报表文件名称 */
string ls_fullname /* 报表文件带路径的全名 */
string ls_savedfile /* 报表文件带路径的全名 */
integer li_print_copies /* 打印份数 */
for i = 1 to dw1.RowCount() /* 选中的行 */
ls_filename = dw1.GetItemString(i,"bo_report_name")
ls_fullname = bo_dir + '\' + ls_filename + '.rep'
ls_savedfile = bo_dir + '\today\' + ls_filename + '.rep'
li_print_copies = dw1.GetItemNumber(i,"bo_print_pages")
if FileExists(ls_fullname) then
pb调取word
//对齐方式
ole_object.Selection.ParagraphFormat.Alignment
//粗体
ole_object.Selection.Font.Bold
//字体
ole_object.Selection.Font.Name
//斜体
ole_object.Selection.Font.Italic
//下划线
ole_object.Selection.Font.Underline
//字号
ole_object.Selection.Font.Size
//前景色
ole_object.Selection.Font.Color
//建立OLEObject对象
OLEObject ole_object
ole_object=CREATE OLEObject
if ole_object.ConnectToNewObject("Word.Application")<>0 then
MessageBox('OLE错误','OLE无法连接!请确定已经安装EXCEL!')
return
END IF
//添加工作表
ole_object.Documents.Add //创建包含一定数目的空白工作表的工作簿
ole_object.visible=true
//ole_documents=ole_object.Documents(1).Activate
//插入一段文字
string s
s="我是一个学生,我在测试录制宏"
ole_object.Selection.TypeText(s)
//选择刚才插入的文字
ole_object.Selection.MoveLeft(1,len(s),1)
//把选中的文字转成14号黑体粗字
ole_object.Selection.Font.Name = "黑体"
ole_object.Selection.Font.Size = 14
ole_object.Selection.Font.Bold = True
//保存
ole_object.ActiveDocument.saveas("d:\test.doc")
//释放
Ole_Object.DisConnectObject()
Destroy Ole_Object
/*******************************************************************************
名称:gf_savetoword
描述:将数据窗口中的数据导到WORD中
参数:adw_1, 数据窗口;filename , 要导到哪个文件里面。title 标题
返回: 无
时间:2004-03-26
作者:pisa
修改:
*******************************************************************************/
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject
//连接WORD
IF ole_object.ConnectToNewObject("Word.Application") <> 0 THEN
MessageBox('OLE错误','OLE无法连接!')
return
END IF
ole_object.Visible = True
long ll_colnum,ll_rownum , li_hide = 0
constant long wdWord9TableBehavior = 1
constant long wdAutoFitFixed = 0
constant long wdCell = 12
string ls_value
string ls_colname
integer i,j
//得到数据窗口数据的列数与行数(行数应该是数据行数 + 1)
ll_colnum = Long(adw_1.object.datawindow.column.count)
ll_rownum = adw_1.rowcount() + 1
for i = 1 to ll_colnum
//得到标题头的名字,并插入表格的第一行
ls_colname = adw_1.describe('#' + string(i) + ".name") + "_t"
ls_value = adw_1.describe(ls_colname + ".text")
if ls_value = '!' then
li_hide ++
continue;
end if
next
//新建新文档
ole_object.Documents.Add("C:\WINDOWS\Application
Data\Microsoft\Templates\Normal.dot",False,0)
ole_object.selection.ParagraphFormat.Alignment = 1
ole_object.Selection.TypeText( title + '~r~n')
ole_object.selection.ParagraphFormat.Alignment = 3
ole_object.Selection.TypeText( '当前打印时间' + string(today() , 'yyyy年mm月dd日') + '~r~n')
ole_object.ActiveDocument.Tables.Add(ole_object.Selection.Range, ll_rownum, ll_colnum - li_hide,wdWord9TableBehavior,wdAutoFitFixed)
for i = 1 to ll_colnum
//得到标题头的名字,并插入表格的第一行
ls_colname = adw_1.describe('#' + string(i) + ".name") + "_t"
ls_value = adw_1.describe(ls_colname + ".text")
if ls_value = '!' then
continue;
end if
ole_object.Selection.TypeText(trim(ls_value))
ole_object.Selection.MoveRight(wdCell)
next
adw_1.setredraw(false)
ole_object.Selection.MoveLeft(wdCell)
//将数据插入表格
for i = 1 to ll_rownum - 1
for j = 1 to ll_colnum
//ls_colname = adw_1.describe('#' + string(j) + ".name") + "_t"
ls_colname =adw_1.Describe("#" + string(j) +".name")
ls_value = adw_1.describe(ls_colname + "_t.text")
if ls_value = '!' then
continue;
end if
ls_value = adw_1.Describe("Evaluate('LookUpDisplay("+ls_colname+")',"+string(i)+")")
ole_object.Selection.MoveRight(wdCell)
ole_object.Selection.TypeText(ls_value)
next
next
adw_1.setredraw(true)
ole_object.selection.movedown(5)
ole_object.selection.ParagraphFormat.Alignment = 3
ole_object.Selection.TypeText( '操作人' + s_sys_user.username + '~r~n
pb通过ole来控制excel
在开发过程中有一些复杂的报表尤其是中国式的报表,用pb的数据窗口来实现非常麻烦甚至实现不了,我们可以换一种方式通过操作excel来实现。实现的原理是先在pb脚本中检索或计算出报表中的各项数据,然后把它们一个萝卜一个坑的赋值到单元格中。pb通过ole对象来控制excel的步骤如下:
1、创建连接到excel应用的ole对象
OleObject ole_excel
ole_excel = create OleObject
If ole_excel.ConnectToNewObject("Excel.Application") <> 0 Then
MessageBox('连接到Excel错误','请确认是否已经安装了Excel!',Exclamation!) Destroy old_excel
Return
End If
2、打开指定的excle文件
ole_excel.Application.Workbooks.Open("excel文件")
3、操作excel单元格
excel单元格有一系列的操作,它们的使用格式一般如下:
ole对象.ActiveWorkBook.Sheets("工作表名").操作对象.动作或属性
读取或赋值工作表1中单元格的格式:
ole_excel.ActiveWorkBook.Sheets("工作表1").cells[1,1].value
合并工作表1中的第ll_rows_buget行的A列到I列的单元格:{pbole操作文档大全}.
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Merge,还有如下一些与合并单元格相类似的动作或属性
.HorizontalAlignment = xlGeneral //单元格的横向对齐方式
.VerticalAlignment = xlBottom //单元格的纵向对齐方式(1、2左,3居中,4右) .WrapText = True //自动换行
.Orientation = 0
AddIndent = False
ShrinkToFit = False
.MergeCells = False
设置工作表1中的第ll_rows_buget行的A列到I列的单元格四周为实现边框 ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Borders(1).LineStyle=1
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Borders(2).LineStyle=1
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Borders(3).LineStyle=1
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Borders(4).LineStyle=1
第ll_rows_buget行从A到I单元格的背景色和字体颜色设置如下:
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Interior.ColorIndex = 48 //背景色为棕黑色
ole_excel.ActiveWorkBook.Sheets("工作表
1").Range("A"+string(ll_rows_buget)+":I"+string(ll_rows_buget)).Font.ColorIndex = 3 //字体颜色为红色
有一点需要注意的是单元格的背景色和字体颜色的属性ColorIndex不能超过56,否则程序崩溃,自动退出。ColorIndex = 0 为白色,ColorIndex = 56 则接近黑色,其他颜色请自行摸索,我也不太清楚
4、保存excel文件,退出excel,并销毁ole对象
ole_excel.ActiveWorkBook.save()
ole_excel.Application.Quit()
Destroy ole_excel //注销对象
=====================================================================
最详细的使用方法请参考VBA,以下摘录常用的功能。
1.创建Excel对象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add{pbole操作文档大全}.
3.设置第3个工作表为激活工作表
eole.Worksheets(″sheet3″).Activate
4.打开指定工作簿
eole.Workbooks.Open(″c:templl.xls″)
5.显示Excel窗口
eole.visible = true
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值: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.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 = true
23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically= true
24.设置页面纸张大小(1-窄行8 5 11 39-宽行14 11)
eole.ActiveSheet.PageSetup.PaperSize=1
25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines= true
26.拷贝整个工作表
eole.ActiveSheet.UsedRange.Copy
27.拷贝指定区域
eole.ActiveSheet.Range(″A1:E2″).Copy
28.粘贴
eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial
29.在第2行之前插入一行