1

クライアントは、Excel ファイルを Excel の HTML 形式で取得します (この形式で届きます。誰もそれを制御することはできません)。次に、ファイル内のデータに基づいてレポートを実行する必要があります。ADO.NET (OleDbReader) を使用すると、「外部ファイルが予期された形式ではありません」という例外が発生します。

データを通常の Excel 形式に変換すると、問題なく読み込まれます。しかし、これは彼らが取らなければならない余分なステップを課すことになり、彼らは最高の時でもコンピューターの知識があまりないため、実際には解決策ではありません.

私が思いついた唯一の解決策は、Excel オートメーションを使用して新しいスプレッドシートを作成し、同じデータを入力して、代わりにそれを読み取ることでした。しかし、ADO.NET はディスク上のファイルからしか読み取れないようです。もちろん、ファイルを保存して、使い終わったら削除することもできます (動作することを確認済みです)。しかし、私は彼らのファイルシステムをいじるという考えには不快です。だから私の最初の質問は - メモリ内の Excel ワークシートから DataTable を埋める方法はありますか?

さらに、自動化を使用したビジネス全体が好きではありません。それは信じられないほど遅いです。DataTable を埋めなくても、操作には 30 秒以上かかります。したがって、それを遅くする解決策は、何の役にも立たないでしょう。それは私の 2 番目の質問に私をもたらします - 私がここでしようとしていることを達成するためのより良い方法はありますか?

4

2 に答える 2

1

HTML Agility Packをお試しください:http://www.codeplex.com/htmlagilitypack

同様のシナリオで使用します。私の場合:...

  • 誰かがExcelからクリップボードにテーブルを貼り付けました
  • HTMLテキストを取得する
  • HTML Agilityを使用して、TABLE、TR、TH、TDタグを検索します
  • そしてそれからDataTableを構築します

私の場合、HTMLがディスクに永続化されることはありません。

于 2008-12-25T20:41:48.173 に答える
0

「ExcelのHTML形式」とはどういう意味かわかりません。最近のバージョンのExcelにはXMLファイル形式があり、Excelはテーブルを含むHTMLファイルを開いてワークシートに変換できますが、特定のExcelHTML形式を知りません。

Excel Automationを使用したソリューションに関しては、メモリにワークシートがあれば、Value2プロパティを使用してオブジェクトの2次元配列に値を取得し、それを使用してDataTableを構築できます。そうすることで、自動化(Excelプロセスを作成する必要がある)を使用する最初のオーバーヘッドに加えて、それほど多くのオーバーヘッドが追加されるとは思いません。

もっと良い方法はありますか?任意のHTMLの解析は簡単ではありませんが、受け取ったファイルの形式が一貫している場合は、それらを解析できる可能性があります。

于 2008-11-28T20:26:27.240 に答える