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