【问题标题】:Problem with Excel interop application with Office 2016Excel 互操作应用程序与 Office 2016 的问题
【发布时间】:2019-12-24 19:19:15
【问题描述】:

我在使用使用 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 已正确安装并激活,修复安装也没有解决问题。

你们中有人遇到过类似的问题吗?

【问题讨论】:

    标签: c# excel-interop


    【解决方案1】:

    解决了。

    结果是我的同事很方便地忘记提及了,因为他完全忘记了:罪魁祸首是 Kutools 插件。

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

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2013-06-09
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多