好吧,让我们看看我是否能理解这一点。

我写了一个程序来解析 Excel 文件,它运行得很好。我使用以下命令进入文件:

string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
//this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);

这工作得很好。但是当我在实际文件上尝试它(它是由另一个程序提供给我的)时,我收到此错误:

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)

但是,我认为这就是问题所在。如果我获取该文件并使用本地 Excel 保存它,首先我会看到以下弹出窗口:

CP-ARFJN-FLAG.XLS 可能包含功能 与文本(Tab 分隔)。是否要保留 这种格式的工作簿?

  • 要保留此格式,则会留下 找出任何不兼容的功能,单击 是的。
  • 要保留功能,请单击“否”。十、在最新的Excel中保存一份副本 格式。
  • 要查看可能丢失的内容,请单击 帮助。

如果我单击“否”,然后将其另存为当前的 Excel 格式,则该程序将正常工作。

所以我假设这是以某种疯狂的旧 Excel 格式保存的?

我想我的问题是:

  • 如何判断哪个 Excel 版本 救了这个?
  • 我怎样才能在它的当前中解析它 州?
  • -或者- 我可以通过编程方式将其保存为新版本吗?

我希望这是清楚的...谢谢。

有帮助吗?

解决方案

听起来您的第三方应用程序生成的 XLS 文件可能并不是真正的 Excel 格式 - 它实际上可能是一个带有 .xls 扩展名的制表符分隔文本文件。

尝试用文本编辑器打开它并查看。

如果它是制表符分隔的,您可以放弃 OleDB 适配器并将其作为标准文本文件打开/解析。

其他提示

如果生成的文件的格式将来可能会发生变化(也许当您升级第三方应用程序时),您可能更愿意使用 办公室主要互操作程序集. 。这些将加载 Excel 生成的任何版本或格式的文件。缺点是您需要在服务器上安装 Office。

我解决了这个问题。Excel 文件应由 MS EXCEL 2003 生成,而不是由 MS EXCEL 2007“另存为 97-2003”生成。所以你必须从任何来源下载文件。然后手动将数据复制到工作表中。它对我有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top