【问题标题】:COMException 0x800A03EC when setting axis title设置轴标题时出现 COMException 0x800A03EC
【发布时间】:2011-01-26 15:21:18
【问题描述】:

通过 COM 互操作将数据导出到 excel 时,尝试设置 AxisTitle.Text 属性时出现错误(代码 0x800A03EC)。这只发生在一台装有 Windows 7 x64 Professional 和 Excel 2003 的特定计算机上。我已经在各种不同的 PC(包括 Win7 x64 Professional + Excel 2003)上进行了尝试,但无法在任何其他计算机上重现该错误。

private static void setAxisTitle(_Chart tChart, string aszTimeUnit)
    {
        Axis tAxis = (Axis)tChart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
        try
        {
            tAxis.HasTitle = true;
            tAxis.AxisTitle.Text = "Messwert [um/m]";
            tAxis = (Axis)tChart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);
            tAxis.HasTitle = true;
            tAxis.AxisTitle.Text = string.Format("Zeit [{0}]", aszTimeUnit);
        }
        catch (Exception aEx)
        {
            cLogger.ErrorFormat("error setting axis title for time unit '{0}' on Axis '{1}'", aszTimeUnit, tAxis.AxisTitle);
            cLogger.Error("error stack trace:", aEx);
            throw;
        }
    }

有人知道如何解决这个难题吗?

编辑: 关于不同文化的话题: OS 和 Excel 具有相同的文化。 但是,我(认为我)确实使用以下代码处理了可能由此产生的任何问题:

 static Excel2007Export()
    {
        Microsoft.Office.Interop.Excel.Application tExcel = new Application();
        cSystemCulture = Thread.CurrentThread.CurrentCulture;
        cExcelCulture = new CultureInfo(tExcel.LanguageSettings.get_LanguageID(
            Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI));

        try
        {
            Thread.CurrentThread.CurrentCulture = cExcelCulture;
            int tVersion;
            bool tParseSucceded = Int32.TryParse(tExcel.Version.Substring(0, tExcel.Version.IndexOf('.')), out tVersion);

            // 12 is the first version with .xlsx extension
            if (tVersion >= 12)
                cDefaultExtension = ".xlsx";
            else
                cDefaultExtension = ".xls";

        }
        catch (Exception aException)
        {
            cLogger.Debug("error retrieving excel version.", aException);
            cLogger.Error("error retrieving excel version.");
        }
        finally
        {
            Thread.CurrentThread.CurrentCulture = cSystemCulture;
        }
    }

【问题讨论】:

  • 这是一个非常糟糕的 Excel 错误,可能意味着很多事情。你可以用谷歌搜索“Excel 错误 1004”,但是会有很多东西需要挖掘。将机器从第 4 层的窗口中取出也可以。祝你好运。
  • @Hans: ROFL :-) +1 直接回答
  • 两台机器上的服务包相同?
  • 日本。相同的服务包。 excel 版本号完全相同,Win7 启用所有升级

标签: c# .net excel com excel-2003


【解决方案1】:

当调用进程在办公室安装方面具有不同的文化时,有时会发生此错误。如果这是您的情况,您可以更改调用线程文化以匹配 Excel 文化,如下所示:

CultureInfo MyCulture = new CultureInfo("en-US"); // 你的文化在这里 Thread.CurrentThread.CurrentCulture = 我的文化;

这可能会解决问题。

【讨论】:

  • 嗨,我想我已经排除了这个。我会用一些代码更新这个问题。请在那里看看。
  • 不是很专业,但我认为尝试重新安装 Excel 可以解决问题。
  • 嗯。好的。由于这种情况发生在客户的 PC 上,因此重新安装 Excel 不是解决方案
【解决方案2】:
For Each Obj As Excel.ChartObject In xlsSheet.ChartObjects()
    ' Obj.Copy()
    If Obj.Name.ToString = "Chart gainloose" Then
        Obj.Chart.ChartArea.Copy()

    End If
    ' Console.WriteLine(Obj.Name)
    ' Console.WriteLine(Obj.TopLeftCell.Row.ToString & " : " & Obj.TopLeftCell.Column.ToString)
Next

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2020-02-24
    相关资源
    最近更新 更多