2011-01-26 2 views
1

При экспорте данных в excel через COM Interop Я получаю сообщение об ошибке (код 0x800A03EC) при попытке установить свойство AxisTitle.Text. Это происходит ТОЛЬКО на одном конкретном компьютере с Windows 7 x64 Professional и Excel 2003. Я пробовал его на разных компьютерах (включая Win7 x64 Professional + Excel 2003), но не могу воспроизвести эту ошибку на любой другой машине.COMException 0x800A03EC при настройке оси title

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

Это очень дерьмовая ошибка Excel, которая может означать много вещей. Вы можете Google «Ошибка Excel 1004», но будет много трещин, чтобы копать. Выбрасывание машины из 4-го окна также работает. Удачи. –

+0

@ Hans: ROFL :-) +1 для этого прямого ответа – yas4891

+0

Те же пакеты обновлений на обеих машинах? – code4life

ответ

1

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

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

Возможно, это может решить проблему.

+0

Привет, я думаю, что я вынес это решение. Я обновлю вопрос с помощью некоторого кода. Пожалуйста, смотрите там. – yas4891

+0

Не так профессионально, но я думаю, что попытка переустановки Excel может решить проблему. –

+0

Хм. ОК. Поскольку это происходит на ПК клиента, переустановка Excel не является решением – yas4891

0
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