【发布时间】: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