使用 worksheet.save() 保存 Excel 文件时出错

本文关键字:Excel 文件 出错 保存 worksheet save 使用 | 更新日期: 2023-09-27 17:55:19

错误是:

HRESULT的例外:0x800A03EC。

使用 worksheet.save() 保存 Excel 文件时出错

我曾经经历过。我在编写 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...