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

时间:2011-05-06 08:57:28

标签: c# asp.net excel

错误是:

  

HRESULT的异常:0x800A03EC。

3 个答案:

答案 0 :(得分:0)

我曾经历过这一次。我正在编写Excel工作表时打开Excel文件。所以,我通过将文件打开直到完成保存操作来解决它。

答案 1 :(得分:0)

这只是猜测,但过去让我感到悲伤......

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")
    {
    }
}

答案 2 :(得分:0)

我解决了这个问题,改变了我引用需要保存的工作簿的方式。

方式1

var wkb = excelInstance.Workbooks[1];
wkb.SaveAs(targetReportPath);
// This works

方式2

excelInstance.ThisWorkbook.SaveAs(targetReportPath);
// This fails...