使用 worksheet.save() 保存 Excel 文件时出错
本文关键字:Excel 文件 出错 保存 worksheet save 使用 | 更新日期: 2023-09-27 17:55:19
错误是:
HRESULT的例外:0x800A03EC。
我曾经经历过。我在编写 Excel 工作表时打开了 Excel 文件。因此,我通过假设文件打开直到完成保存操作来解决它。
这只是一个猜测,但它在过去引起了我的悲伤......
excel(也许还有其他办公产品)中存在一个错误,在使用英语以外的其他区域性调用方法时会给出此错误代码。
处理这个问题的正确方法是改变文化:
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
try {
// use excel here
} finally { // restore culture
Thread.CurrentThread.CurrentCulture = oldCulture;
}
我写了一个类来帮助解决这个问题。您可以按如下方式使用它:
using(new RunInCulture.English) {
// use excel here
}
这是代码:
public class RunInCulture : IDisposable
{
CultureInfo _oldCulture;
public RunInCulture(string culture)
: this(CultureInfo.GetCultureInfo(culture))
{
}
public RunInCulture(CultureInfo culture)
{
_oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = culture;
}
public static RunInCulture Invariant
{
get
{
return new RunInCulture(CultureInfo.InvariantCulture);
}
}
public static RunInCulture English
{
get
{
return new RunInCulture("en-US");
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing)
Thread.CurrentThread.CurrentCulture = _oldCulture;
}
~RunInCulture()
{
Dispose(false);
}
}
public class EnglishCulture : RunInCulture
{
public EnglishCulture()
: base("en-US")
{
}
}
我解决了这个问题,改变了我引用需要保存的工作簿的方式。
方式 1
var wkb = excelInstance.Workbooks[1];
wkb.SaveAs(targetReportPath);
// This works
方式 2
excelInstance.ThisWorkbook.SaveAs(targetReportPath);
// This fails...