COMException 0x800A03EC при установке заголовка оси - PullRequest
1 голос
/ 26 января 2011

При экспорте данных в Excel с помощью COM-взаимодействия возникает ошибка (код 0x800A03EC) при попытке установить свойство AxisTitle.Text. Это происходит ТОЛЬКО на одном конкретном компьютере с Windows 7 x64 Professional и Excel 2003. Я пробовал его на различных компьютерах (включая 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;
        }
    }

Кто-то понял, как решить эту дилемму?

EDIT: На тему разных культур: И ОС, и 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;
        }
    }

Ответы [ 2 ]

1 голос
/ 26 января 2011

Эта ошибка иногда возникает, когда вызывающий процесс имеет другую культуру в отношении установки в офисе.Если это ваш случай, вы можете изменить культуру вызывающих потоков так, чтобы она соответствовала культуре Excel, например:

CultureInfo MyCulture = new CultureInfo ("en-US");// ваша культура здесь Thread.CurrentThread.CurrentCulture = MyCulture;

Это может решить проблему.

0 голосов
/ 06 июня 2012
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
...