Раньше Excel Interop был надежным инструментом. Сегодня это просто не будет работать.
Я понимаю, что HRESULT чрезвычайно универсален и предоставляет очень мало контекста. Я рассмотрел другие вопросы, которые я суммирую:
Файлы были повреждены.
В файлах использовался английский язык за пределами США.
В среде разработки он работал нормально, но в
серверная среда.
Ничего из этого не применимо. Файл не поврежден. Прекрасно открывается в Excel. Он использует американский английский язык. Это не работает даже в среде разработки. Недавно мы перешли на использование Office 365 ProPlus, но я нашел документацию, в которой говорится, что текущее взаимодействие должно работать с Office 365. Я использую версию 15.0.0.0 DLL взаимодействия с этим кодом. Я использую Windows 10.0.17134 и Visual Studio 2017 Pro версии 15.8.8. Это консольное приложение, предназначенное для .NET Framework 4.6.1.
using System;
using System.IO;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
namespace DERPA_Test
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
string templateFilename = "template.xlsx";
if (File.Exists(templateFilename))
{
try
{
xlApp = new Excel.Application();
object misValue = Missing.Value;
xlWorkBook = xlApp.Workbooks.Open(templateFilename);
// Exception thrown here in the Open.
// Also tried this. It didn't work either.
// xlWorkBook = xlApp.Workbooks.Open(templateFilename, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
}
}
Вот еще более простой пример. Создайте файл CSV с именем «test.csv», содержащий:
"Заголовок 1", "Заголовок2"
«Данные 1», «Данные 2»
using Excel = Microsoft.Office.Interop.Excel;
namespace DERPA_Test
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open("test.csv");
}
}
}
Это то же самое поведение.