为了账号安全,请及时绑定邮箱和手机立即绑定

Excel 互操作应用程序与 Office 2016 的问题

Excel 互操作应用程序与 Office 2016 的问题

C#
Cats萌萌 2023-09-09 16:11:11
我在使用使用 Excel 互操作的应用程序时遇到问题。在 Excel 2010 和 2013 中,它工作得非常好。不幸的是,现在我的同事已经升级到 Office 2016,它不再适用。我也将很快升级,需要找到解决方案。正在做什么?单击事件会触发后台工作人员...private void btnPrep_Click(object sender, EventArgs e){    lblWorking.Visible = true;    pBar1.Visible = true;    //...    //...    bwPrep.RunWorkerAsync(args);}...依次调用方法“Xls2Xml”...private void bwPrep_DoWork(object sender, DoWorkEventArgs e){    //...    //...    foreach (var x in y)    {        var fils = di.GetFiles();        if (fils.Any(f => f.Name.Contains(".xls")))         {            bwPrep.ReportProgress(0, lang);            Xls2Xml(fils.First(f => f.Name.Contains(".xls")).FullName, dest);        }       }}...我在其中使用互操作:private void Xls2Xml(string xlsPath, string destination){    var pfad = xlsPath;    var xlapp = new XL.Application();    var wbooks = xlapp.Workbooks;    var wb = wbooks.Open(pfad);    var sheets = wb.Sheets;    XL.Worksheet sheet = sheets[1];    //...    //...    Marshal.ReleaseComObject(sheet);    Marshal.ReleaseComObject(sheets);    Marshal.ReleaseComObject(wb);    Marshal.ReleaseComObject(wbooks);    Marshal.ReleaseComObject(xlapp);}这适用于 Excel 2010 和 2013。Excel 2016 会导致 COM 错误。首先,它是 RPC_E_SERVERCALL_RETRYLATER(“应用程序繁忙”)。谷歌搜索建议我在调用后台工作人员之前添加此行:System.Threading.SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());这样做的目的是将产生的错误更改为“调用被被调用者拒绝”(RPC_E_CALL_REJECTED)。我确保引用了正确版本的 Excel 互操作和 Office 库 (1.9 / 16)。错误发生在行 上var xlapp = new XL.Application();,在此行之前没有创建 Excel 应用程序的其他实例。Excel已正确安装并激活,修复安装也没有解决问题。你们中有人遇到过类似的问题吗?
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

解决了。

事实证明,我的同事很容易忘记提及这一点,因为他完全忘记了:罪魁祸首是Kutools插件。

尽管它是之前安装的并且当时没有引起问题,但最新的 Office 更新之一肯定改变了某些行为。只需停用 Kutools 即可。


查看完整回答
反对 回复 2023-09-09
  • 1 回答
  • 0 关注
  • 53 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信