You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi OleContainer操作MS Word粘贴命令在高版本报错求助

解决方案:Delphi操作Word 2016+时RPC调用失败问题

针对你在Delphi 10.2中使用OLE操作Word 2016及更高版本时出现的"The remote procedure call failed"和"RPC server is unavailable"错误,以下是几种可行的解决方向:

1. 改用Range对象替代Selection进行粘贴

直接使用Selection.Paste可能因Word上下文切换导致RPC异常,改用当前选中区域的Range对象执行粘贴操作更稳定:

var
  WordRange: OleVariant;
begin
  // 获取当前选中区域的Range
  WordRange := dm.WordApp.Selection.Range;
  // 执行粘贴
  WordRange.Paste;
end;

2. 优化剪贴板图片格式的设置方式

直接用Clipboard.Assign(vBmp)生成的剪贴板格式在高版本Word中兼容性不佳,尝试用CF_DIB格式手动设置剪贴板:

var
  vBmp: TBitmap;
  hDIB: THandle;
begin
  vBmp := iAssinatura.Picture.Bitmap;
  Clipboard.Open;
  try
    // 将Bitmap转为DIB格式句柄
    hDIB := vBmp.ReleaseHandle;
    Clipboard.SetAsHandle(CF_DIB, hDIB);
  finally
    Clipboard.Close;
  end;
end;

3. 确保Word应用实例的正确初始化

高版本Word对后台实例的RPC调用限制更严格,确保Word实例可见且正确创建:

if not Assigned(dm.WordApp) then
begin
  dm.WordApp := CreateOleObject('Word.Application') as _Application;
  // 设置为可见,避免后台运行导致的RPC问题
  dm.WordApp.Visible := True;
  // 新建或打开文档确保ActiveDocument存在
  dm.WordApp.Documents.Add;
end;

4. 检查权限与进程上下文

  • 避免以管理员权限运行你的Delphi程序,除非Word也以管理员权限启动(权限不匹配会导致RPC调用失败)
  • 关闭可能占用剪贴板的其他程序,确保剪贴板状态正常

5. 添加短延迟避免剪贴板同步问题

复制到剪贴板后,给系统一点时间完成剪贴板数据同步,再执行粘贴:

vBmp := iAssinatura.Picture.Bitmap;
Clipboard.Assign(vBmp);
// 添加短延迟
Sleep(150);
dm.WordApp.ActiveDocument.ActiveWindow.Selection.Paste;

内容的提问来源于stack exchange,提问作者Renato Braz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:45:49