过去,Excel Interop是可靠的工具。今天,它根本行不通。 我意识到HRESULT是非常通用的,提供的上下文很少。我研究了我将总结的其他问题:
文件已损坏。
文件使用的是非美国英语语言环境。
在开发环境中工作正常,但在 服务器环境。
这些都不适用。该文件未损坏。它可以在Excel中正常打开。它使用美国英语语言环境。即使在开发环境中也不起作用。我们最近已更改为使用Office 365 ProPlus,但是我发现文档说明当前互操作程序应与Office 365一起使用。我将此代码使用互操作DLL的15.0.0.0版本。我正在运行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;
}
}
}
}
}
这里是一个更简单的示例。创建一个名为“ test.csv”的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");
}
}
}
这具有相同的行为。