質問
さて、これが理にかなっているかどうか見てみましょう。
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には機能が含まれる場合があります テキストと互換性がない(タブ 区切り)。維持しますか この形式のワークブック?
- この形式を維持するには、 互換性のない機能があれば、クリックします はい。
- 機能を保持するには、[いいえ]をクリックします。 最新のExcelでコピーを保存する10 形式。
- 失われる可能性のあるものを確認するには、をクリックします ヘルプ。
[いいえ]をクリックして、現在のExcel形式として保存すると、プログラムは正常に動作します。
だから、これはいくつかのクレイジーな古いExcel形式で保存されていると思いますか?
質問は次のようになります:
- Excelのバージョンを確認する方法 これを保存しましたか?
- どのように現在の状態で解析できますか 状態?
- -または-プログラムで新しいバージョンとして保存できますか?
それが明確であることを願っています...ありがとうございます。
解決
サードパーティのアプリによって生成されたXLSファイルは、実際にはExcel形式ではないようです。実際には、拡張子が.xlsのタブ区切りテキストファイルである可能性があります。
テキストエディタで開いてみてください。
タブ区切りの場合、OleDBアダプターを捨てて、標準のテキストファイルとして開く/解析することができます。
他のヒント
生成されたファイルの形式が将来変更される可能性がある場合(サードパーティアプリをアップグレードする場合など)、 Officeプライマリ相互運用機能アセンブリ。これらは、Excelによって生成されたファイルのバージョンまたは形式を読み込みます。欠点は、サーバーにOfficeをインストールする必要があることです。
iは問題を解決しました。 Excelファイルは、MS EXCEL 2007の「97-2003として保存」ではなく、MS EXCEL 2003で生成する必要があります。 そのため、任意のソースからファイルをダウンロードする必要があります。次に、データを手動でシートにコピーします。うまくいきました。