导航
  • 全部
...

createoleobject('excel.application')报错, eolesyserror 不支持此接口

qdlover 2010-12-05 05:07:17
纠结的问题,在网上查了很久,也只碰到有人遇到类似的问题,但是没有任何解决方法。
也找过微软的技术支持,最后研究半天,给出了答复是
“由于这个不是微软产品报出来的错误,所以我们的案例库中没有记载这样的错误信息。另外vbs脚本调用Excel应用程序对象正常,所以严格来说这个问题超出了我们能够支持的范围。我会帮您继续在Internet上继续搜索这个报错,但是多数论坛没有这方面的专家进行支持所以这个报错问题通常都没有解决。”

因为程序用了很多年了,最近突然开始陆陆续续有用户(不是一个单位,是不同单位的用户都有这个问题)反映导入excle报错,后来我们看了一下,就是在调用
createoleobject('excel.application') 报错了

提示"不支持此接口"(说没装office的就不用关注这个问题了)
全部的错误提示为“Project test_excel.exe raised exception class EOleSysError with message '不支持此接口',Process stopped,Use step or Run to continue”

而且客户机器上的excel是可以正常打开的,而且用vbscript的createobject("excel.application")是可以调用excel的,就是delphi的不行。

最纠结的是,本来这些客户都用的好好的,突然有一个月就开始说这个功能有问题了,也不知道是什么问题导致的,也不知道怎么解决。

delphi现在没落了,不知道这个问题还可不可能解决啊

...全文
给本帖投票
728 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
foreverhero 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qdlover 的回复:]

unit ComObj;

function CreateOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
begin
ClassID := ProgIDToClassID(ClassName);
OleCheck(CoCreateInstance(ClassID, nil, CLSC……
[/Quote]
project options->compiler->选中use debug dcu,就可以跟踪进去了
qdlover 2010-12-21
  • 打赏
  • 举报
回复
unit ComObj;

function CreateOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
begin
ClassID := ProgIDToClassID(ClassName);
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IDispatch, Result));
end;



function ProgIDToClassID(const ProgID: string): TGUID;
begin
OleCheck(CLSIDFromProgID(PWideChar(WideString(ProgID)), Result));
end;

unit ActiveX;
{$EXTERNALSYM CLSIDFromProgID}
function CLSIDFromProgID(pszProgID: POleStr; out clsid: TCLSID): HResult; stdcall;

function CLSIDFromProgID; external ole32 name 'CLSIDFromProgID';

ole32 = 'ole32.dll';


procedure OleCheck(Result: HResult);
begin
if not Succeeded(Result) then OleError(Result);
end;


function Succeeded(Res: HResult): Boolean;
begin
Result := Res and $80000000 = 0;
end;

procedure OleError(ErrorCode: HResult);
begin
raise EOleSysError.Create('', ErrorCode, 0);
end;

可是无法断点跟到CreateOleObject里面去啊

亮剑_ 2010-12-21
  • 打赏
  • 举报
回复
应该是客户端环境原因,有可能是安装了某个非原版(精简版、绿色版。。。)的Excel所致
qdlover 2010-12-08
  • 打赏
  • 举报
回复
用户一般都不会安装什么软件的,都一直都office2003版本的,就算是换了版本也不可能不行啊

我自己的2007也可以导入啊
Oraclers 2010-12-05
  • 打赏
  • 举报
回复
是不是换了Office的版本?
qdlover 2010-12-05
  • 打赏
  • 举报
回复
也重装或者修复过office,都没用,重装系统没试过,就算可以我也不可能给全部出问题的用户都重装系统啊。
(一) 使用动态创建的方法 首先创建 Excel 对象,使用ComObj: var ExcelApp: Variant; ExcelApp := CreateOleObject( 'Excel.Application' ); 1) 显示当前窗口: ExcelApp.Visible := True; 2) 更改 Excel 标题栏: ExcelApp.Caption := '应用程序调用 Microsoft Excel'; 3) 添加新工作簿: ExcelApp.WorkBooks.Add; 4) 打开已存在的工作簿: ExcelApp.WorkBooks.Open( 'C:/Excel/Demo.xls' ); 5) 设置第2个工作表为活动工作表: ExcelApp.WorkSheets[2].Activate; 或 ExcelApp.WorksSheets[ 'Sheet2' ].Activate; 6) 给单元格赋值: ExcelApp.Cells[1,4].Value := '第一行第四列'; 7) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5; 8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米 9) 在第8行之前插入分页符: ExcelApp.WorkSheets[1].Rows.PageBreak := 1; 10) 在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0; 11) 指定边框线宽度: ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3; 1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / ) 12) 清除第一行第四列单元格公式: ExcelApp.ActiveSheet.Cells[1,4].ClearContents; 13) 设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书'; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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

手机看
关注公众号

关注公众号

客服 返回
顶部