使用C#parsingXLS文件的问题

好的,让我们看看我能否做出这个决定。

我有一个编写的程序parsing一个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,首先我得到这个popup:

CP-ARFJN-FLAG.XLS可能包含与文本(制表符分隔)不兼容的function。 你想保持这种格式的工作簿?

  • 要保留这种格式,不存在任何不兼容的function,请单击“是”。
  • 要保留这些function,请单击否。10以最新的Excel格式保存副本。
  • 要查看可能丢失的内容,请单击“帮助”。

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

所以我假设这是保存在一些疯狂的旧Excel格式?

我想我的问题是:

  • 我怎么能告诉Excel版本保存了这个?
  • 我怎样才能parsing它在目前的状态?
  • – 或者 – 我可以编程保存它作为一个较新的版本?

我希望很清楚…谢谢。

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

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

如果是制表符分隔,则可以将OleDB适配器放置并将其打开/parsing为标准文本文件。

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

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