Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用工作表保存Excel文件时出错。save()_C#_Asp.net_Excel - Fatal编程技术网

C# 使用工作表保存Excel文件时出错。save()

C# 使用工作表保存Excel文件时出错。save(),c#,asp.net,excel,C#,Asp.net,Excel,错误是: 来自HRESULT的异常:0x800A03EC 我曾经有过这样的经历。我在编写Excel工作表时正在打开Excel文件。所以,我已经解决了这个问题,在完成保存操作之前打开文件。这只是一个猜测,但在过去它让我很伤心 excel(可能还有其他office产品)中存在一个错误,当使用英语以外的其他区域性调用方法时,会给出此错误代码 正确的处理方法是改变文化: CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture; try {

错误是:

来自HRESULT的异常:0x800A03EC


我曾经有过这样的经历。我在编写Excel工作表时正在打开Excel文件。所以,我已经解决了这个问题,在完成保存操作之前打开文件。

这只是一个猜测,但在过去它让我很伤心

excel(可能还有其他office产品)中存在一个错误,当使用英语以外的其他区域性调用方法时,会给出此错误代码

正确的处理方法是改变文化:

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

方式2


在保存之前,请提供有关您正在执行的操作的更多信息?
var wkb = excelInstance.Workbooks[1];
wkb.SaveAs(targetReportPath);
// This works
excelInstance.ThisWorkbook.SaveAs(targetReportPath);
// This fails...