异常

BUG反馈 · 123 次浏览
起飞呀,小伙 创建于 2026-07-04 19:35
异常来自 HRESULT:0x800A1098 StackTrace: 在 System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, UInt32 argErr, String message) 在 CallSite.Target(Closure , CallSite , ComObject ) 在 rhqtumo6Q8hFbw9ibm.UZkyEYqdyyKVUCV6JO.L5Fk4cJJt(Command ) 在 LPAgent.Program.xFlnyFxF5(NamedPipeConnection`2 , String )
步骤(sys:officehelper)执行失败,原因:命令返回失败,错误:异常来自 HRESULT:0x800A1098
停止动作:命令返回失败,错误:异常来自 HRESULT:0x800A1098
耗时:5ms
检测到了中止标志(OperationFailed),停止后续步骤执行。
检测到了中止标志(OperationFailed),停止后续步骤执行。
动作结束。耗时:45.0284ms

回复内容
艾米屎蛋 2026-07-06 09:07
#1

请让用户按以下顺序确认:

  1. 先打开一个含表格的 .docx/.doc,光标点进表格内
  2. 确认不是仅有 Word/WPS 启动页(必须能看到文档内容)
  3. 检查 VBA 信任设置 — 参考动作介绍中的 允许外部执行 VBA 教程
  4. WPS 用户 — 确认已安装 VBA 组件
  5. 运行动作前,让 Word/WPS 窗口处于前台(从 Quicker 面板或 Word 内触发,而非在设置面板里直接导入)

错误诊断

HRESULT:0x800A1098 对应 VBA 运行时错误 4248,含义是:

This command is not available because no document is open
(此命令不可用,因为没有打开的文档)

动作在 sys:officehelper 执行 VBA 时,会访问 SelectionActiveDocument。若 Word/WPS 进程在运行但没有打开任何文档(只有启动页/空白页),COM 层会直接抛出该错误,Quicker 显示为 0x800A1098

从日志看,步骤仅耗时 5ms 就失败,说明是在 VBA 最开头访问文档对象时立刻报错,而非表格样式处理中途出错。

该动作下的常见触发场景

场景说明
Word/WPS 已启动但未打开文档
最常见:窗口在前台,但只有开始页
从「格式设置」面板点「导入当前表格样式」
WebView 在前台,word_wps 模式可能连错目标
文档处于保护视图 / 只读预览
ActiveDocument 不可用
未开启「允许外部执行 VBA」
部分环境会表现为 COM 异常
wolfwar 14天10小时前
#2

这是一份 Quicker 动作"表格样式大师"的调试日志。核心异常在步骤4(运行C#代码 - 生成VBA代码),具体如下:


异常信息: 未将对象引用设置到对象的实例。(NullReferenceException)


异常位置:

Westwind.Scripting.CSharpScriptExecution.CompileAssemblyForExecuteMethod(String code)


关键分析:


这个异常发生在 C# 脚本的编译阶段(CompileAssemblyForExecuteMethod),而不是脚本执行阶段。说明脚本还没有跑起来,编译器自身就崩了。


对比来看,步骤0(初始化配置目录)也是运行C#代码,且同样引用了 Newtonsoft.Json,但它成功执行了(耗时18ms),并且使用了缓存的程序集。而步骤4没有出现"使用缓存的程序集"这一条,说明它是重新编译时出的错。


可能的原因:


1. 脚本过长/复杂度问题 — 步骤4的 C# 脚本非常长(约580行),包含大量 StringBuilder 拼接、嵌套的 Action/Func lambda、字典查找等。Westwind 的 Roslyn 脚本引擎在处理超长或复杂脚本时可能出现内部空引用。


2. Newtonsoft.Json 程序集引用问题 — 步骤4同样使用 Newtonsoft.Json.Linq,但"引用DLL库"参数为空。步骤0能成功可能是因为命中了缓存,步骤4是全新编译,引用解析时出了问题。


3. 潜在的语法/编码问题 — 脚本中使用了 $"..." 内插字符串、?? 运算符、Func<> 泛型委托等,如果 Quicker 使用的 Roslyn 版本较旧,某些语法可能导致编译器内部异常。


后续影响:


步骤4失败后,VBA代码没有生成(VBA代码变量为空,操作成功为 false)。动作继续往下走,步骤5检测到前台进程是 360ChromeX.exe(360浏览器),不是 Word 或 WPS,所以步骤6的条件判断为 False,跳过了应用样式。最终动作虽然正常结束(耗时约103ms),但实际上什么也没做。


建议:


可以尝试把这个超长的 C# 脚本拆分成两到三个较短的脚本步骤,或者检查 Quicker 版本(当前 1.45.5.0)是否有已知的脚本编译 bug。另外确保"引用DLL库"中正确添加了 Newtonsoft.Json 的程序集路径,避免依赖缓存命中。

回复主贴