#c# #asp.net #excel
#c# #asp.net #excel
Вопрос:
Ошибка заключается:
Исключение из HRESULT: 0x800A03EC.
Комментарии:
1. дайте нам больше информации о том, что вы делаете перед сохранением?
Ответ №1:
Я испытал это однажды. Я открывал файл Excel, когда писал свой лист Excel. Итак, я решил ее, отложив открытие файла до завершения операции сохранения.
Ответ №2:
Это всего лишь предположение, но в прошлом это огорчало меня…
В 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")
{
}
}
Ответ №3:
Я решил эту проблему, изменив способ ссылки на книгу, которую необходимо сохранить.
Способ 1
var wkb = excelInstance.Workbooks[1];
wkb.SaveAs(targetReportPath);
// This works
Способ 2
excelInstance.ThisWorkbook.SaveAs(targetReportPath);
// This fails...