c# - Excel 互操作工作表副本引发异常 HRESULT : 0x800A03EC

标签 c# excel interop excel-interop

我在使用 Interop 复制 Excel 2003 中的工作表时遇到问题。该代码适用于 30-40 个副本,然后抛出异常“HRESULT 异常:0x800A03EC”。以下测试代码已包含一个补丁,如 http://support.microsoft.com/kb/210684/en-us 中所建议的那样,但没有成功。 有谁知道这个的任何解决方法? 提前致谢

using Excel = Microsoft.Office.Interop.Excel;

private void button2_Click(object sender, EventArgs e)
    {
        string template_path = @"c:\temp\template.xlt";
        string filename = @"c:\temp\testxl1.xls";
        if (File.Exists(filename))
            File.Delete(filename);

        object missing = System.Reflection.Missing.Value;

        System.Globalization.CultureInfo my_culture = System.Threading.Thread.CurrentThread.CurrentCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

        Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
        xlapp.Visible = true;
        xlapp.UserControl = true;

        Excel.Workbook xlwb = xlapp.Workbooks.Add(template_path);

        xlwb.SaveAs(@filename,
            missing, missing, missing, missing, missing,
            Excel.XlSaveAsAccessMode.xlNoChange,
            missing, missing, missing, missing, missing);


        Excel.Worksheet xlws = xlwb.Worksheets["diario"] as Excel.Worksheet;

        int copies = 200;

        for (int i = 0; i < copies; i++)
        {
            #region Patch kb/210684

            if (copies % 10 == 0)
            {                    
                xlwb.Close(true, missing, missing);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlwb);
                xlwb = null;

                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlws);
                xlws = null;

                Application.DoEvents();

                xlwb = xlapp.Workbooks.Open(@filename, 0,
                    missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                xlws = xlwb.Worksheets["diario"] as Excel.Worksheet;

            }

            #endregion

            xlws.Copy(System.Reflection.Missing.Value, xlwb.Worksheets.Count);
        }

        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlws);
        xlws = null;

        xlwb.Close(true, missing, missing);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlwb);
        xlwb = null;

        xlapp.Quit();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp);
        xlapp = null;

        System.Threading.Thread.CurrentThread.CurrentCulture = my_culture;
    }

最佳答案

我唯一能找到的是,当本地计算机未设置为美国英语时,异常可能是 Excel LCID 问题。

http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15

http://support.microsoft.com/kb/320369/en-us

关于c# - Excel 互操作工作表副本引发异常 HRESULT : 0x800A03EC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072629/

相关文章:

c# - 将文本拖到 C# 应用程序图标上以启动应用程序

c# - Sys.WebForms.PageRequestManager pageLoaded事件缓存函数?

c# - 我如何处理不想等待的异步任务?

sql-server - 带有来自变量的动态 ConnectionString 的 SSIS 2012 Excel 源

vba - 有没有一种方法可以在不使用 select 的情况下向图表中的点添加标注标签?

java - 从 Java 代码使用弗雷格列表

c# - 为非托管代码提供托管控制句柄 - 访问冲突

c# - 为什么大图像的内存没有在 GetTotalMemory 或 CLRProfiler 中注册

excel - 为什么 Visual Basic 编辑器将科学计数法转换为末尾带有 # 的数字?

c# - SetWindowsHookEx(WH_KEYBOARD) 仅产生第一个事件、顺序事件