题
好吧,让我们看看我是否能理解这一点。
我写了一个程序来解析 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”生成。所以你必须从任何来源下载文件。然后手动将数据复制到工作表中。它对我有用。
不隶属于 StackOverflow