求助:PB调用excel报错,急

kong_chan 2007-06-18 05:18:23
OLEObject oTable
Integer li_Return

oTable = Create OLEObject
li_Return = oTable.ConnectToNewObject("Excel.Application")
If li_Return < 0 Then
MessageBox(报错信息)
Return
End If
oTable.WorkBooks.Open(文件名) //此处报错


报错信息为:Error calling external object function open
...全文
723 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
will03 2007-08-07
  • 打赏
  • 举报
回复
请问楼主,怎样解决的??
liaomingyan520 2007-08-07
  • 打赏
  • 举报
回复
出现这种情况原因:

因为你是用CONNCETTONEWOBJECT来新建的一应用服务,所以不用oTable.WorkBooks.Open(文件名)这一句,但要加上这句ole_object.Workbooks.Add
kong_chan 2007-06-19
  • 打赏
  • 举报
回复
路径没有问题,是执行报错,编译没问题
kong_chan 2007-06-19
  • 打赏
  • 举报
回复
已解决,谢谢
wenthuang 2007-06-19
  • 打赏
  • 举报
回复
将我写的代码给你看看,在我的机器上执行通过的:


//功能:将数据导成excel文件
//参数:ac_filename =>默认保存的excel文件名
// adw_datawindow =>数据窗口对象
// ac_title =>标题(空字符串则无标题)
// an_top =>从第an_top行开始粘贴主数据(已包括列标题),前an_top-1行给大标题
// abln_line =>主数据是否划线
//返回:0=>失败,1=>成功
//作者:我是小木鱼(Lag) Email:lag_sy@163.com
//备注:为了增加标题等修饰而未采用saveas()直接保存为excel文件,因其不释放。
// 也未采用循环之类的方法,因其速度太慢。

string str_tmp
long lng_rows,lng_columns
integer int_result
pointer oldpointer
oleobject myoleobject

//得到保存路径
int_result = GetFileSaveName("另存为",ac_filename, str_tmp, "xls","Excel文件 (*.xls),*.xls" )
if int_result<>1 then return 0
if FileExists(ac_filename) then
if not FileDelete(ac_filename) then
messagebox('提示','文件『'+ac_filename+'』已被打开或被其它文件所使用,请先将其关闭! ')
return 0
end if
end if

//设置鼠标状态
oldpointer = SetPointer(HourGlass!)

//先将数据复制到剪贴板上
adw_datawindow.saveas('',Clipboard!,true) //包含标题 //该方法不对,因其字符型数据如001会自动转换成数值型1,这里只作测试用而已****************************

//初始化OLE对象
myoleobject = CREATE OLEObject
int_result = myoleobject.ConnectToNewObject("excel.Application")
IF int_result<>0 then return -3

myoleobject.workbooks.Add() //增加工作簿

//粘贴数据
str_tmp="A"+string(an_top)
myoleobject.Range(str_tmp).Select() //从第N行开始粘贴主要数据(前N-1行给大标题)
myoleobject.ActiveSheet.Paste()

//得到相应的范围,好画线用
lng_rows=myoleobject.worksheets(1).UsedRange.Rows.Count //行数(相对)
lng_columns=myoleobject.worksheets(1).UsedRange.Columns.Count //列数(相对)
if lng_columns>256 then lng_columns=256

//画线
if abln_line then
str_tmp="A"+string(an_top)+":"+wf_pbtoexcel_columnrc(lng_columns)+string(lng_rows+an_top - 1)
myoleobject.Range(str_tmp).Select()
myoleobject.Selection.Borders(1).LineStyle = 1 //左边
myoleobject.Selection.Borders(2).LineStyle = 1 //右边
myoleobject.Selection.Borders(3).LineStyle = 1 //上边
myoleobject.Selection.Borders(4).LineStyle = 1 //下边
end if

//生成大标题
if an_top>1 and len(ac_title)>0 then
myoleobject.Cells(1,1).Value=ac_title
str_tmp="A1:"+wf_pbtoexcel_columnrc(lng_columns)+"1"
myoleobject.Range(str_tmp).Select()
myoleobject.selection.Merge() //合并单元格
myoleobject.selection.HorizontalAlignment =3 //中间对齐
myoleobject.selection.Font.name = "宋体" //字体
myoleobject.selection.Font.size = "12" //大小
myoleobject.selection.Font.Bold =True //加粗
//myoleobject.selection.NumberFormat ="@XXX" //格式
//myoleobject.Range("A3").Formula="=MAX(A1,A2)" //将最大值送入A3单元格
//myoleobject.Columns(1).ColumnWidth=60 //列的宽度
end if

//保存
myoleobject.activeworkbook.saveas(ac_filename)

//退出
myoleobject.activeworkbook.close()
myoleobject.Application.quit
myoleobject.DisConnectObject()
DESTROY myoleobject

//恢复鼠标状态
SetPointer(oldpointer)

messagebox('提示','数据导出成功! ')

return 1
wenthuang 2007-06-19
  • 打赏
  • 举报
回复
应当是对象oTable并没有包含OPen这个函数
leniz 2007-06-18
  • 打赏
  • 举报
回复
会不会是路径写的有问题. 是编译错,还是执行错?

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧