QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

Excelファイル内容をサーバ側で読み込む処理について

現在、ASP.net(VB)でWeb開発を行っております。
(開発ツール:WebMatrix)

エクセルファイルの入力内容を、直接DBに登録するような
処理を考えているのですが、
なかなか過去ログにも同様のものがなく、苦戦しております・・
(csvならあるのですが)

実現させたい処理内容
----------------------------------------------------------------------------
1.クライアント側で、あるフォーマットに沿ったデータ一覧のExcelファイルを
  Webブラウザよりアップロードする
2.アップロードされたファイルをサーバ側で読み込み、
  入力データのチェックを行い、エラーでなければブラウザに内容を表示する
3.ユーザが登録ボタンを押下すると、内容をDBへ登録する
----------------------------------------------------------------------------

 例)登録データ.xls

 -----------------
  |A |B |C |D |E |
 -----------------
 1|あ|い|う|え|お|
 -----------------
 2|か|き|く|け|こ|
 -----------------
 3|さ|し|す|せ|そ|
 -----------------

1、3は想像がつくのですが、
2の、Excelファイルからデータをサーバ側で読み込むという処理が、
実現可能かどうかで悩んでいます。

過去ログ等検索したのですが、このような動作に行き当たらず
投稿させて頂きました。
ご教授の程、よろしくお願い致します。

(動作環境 )
Windows2000Server
.NET Framework1.1

質問者:三流SE

回答

やはり、Excelファイルをいったんどこかのディレクトリに
配置してから作業しなければならないのでしょうか?

マルチパートで受信したExcelファイルのバイナリデータを、
いったんどこかのディレクトリに配置せずに、
メモリ内で内容を抽出をする、ということを考えているのですが、
不可能なのでしょうか・・・?

投稿者:三流SE

編集 履歴 (0)

別のプロセスのメモリをのぞき見ることは、あまりして欲しくないですよね。
ゲームのチートプログラムなんかでは、よくそうしていますが。

ファイルに書き出すと、何か問題がありますか?
処理が切れるわけではないので、回収は可能だと思いますけど。

投稿者:Jitta

編集 履歴 (0)

三流SEさんの書き込み (2006-04-06 20:26) より:

なかなか過去ログにも同様のものがなく、苦戦しております・・

(csvならあるのですが)

そもそも、表示させるのが目的ならばデータだけあれば良いわけですよね。
つまり、普通は CSV で十分であり、Excel Book 形式である必要はないわけです。

クライアント側でもう 1 処理かませて、CSV として扱って 'あげて' 頂けないでしょうか?

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

じゃんぬねっとさんの書き込み (2006-04-09 00:29) より:

そもそも、表示させるのが目的ならばデータだけあれば良いわけですよね。

つまり、普通は CSV で十分であり、Excel Book 形式である必要はないわけです。

クライアント側でもう 1 処理かませて、CSV として扱って 'あげて' 頂けないでしょうか?

 複数シート定義されていると、ちょっとやっかいかも。
 私のところでは、マクロを作って、すべてのシートを1つの CSV ファイルとして吐き出すようにしました。

---

 負荷によりますが、メモリ上でする場合、ワーカープロセスが再起動すると、“ファイル”が処理中に消えてしまうことになります。
 また、オフィスシステムは、ユーザーが対話的に使用することを前提に作られています。

 この2つから、できれば Excel ブック形式ではなく、CSV 形式または XML 形式でのやりとりを薦めます。
 それができないなら、テンポラリファイルとして保存し、処理終了後に削除するという方法を薦めます。

投稿者:Jitta

編集 履歴 (0)

三流SEさんの書き込み (2006-04-06 20:48) より:

マルチパートで受信したExcelファイルのバイナリデータを、

いったんどこかのディレクトリに配置せずに、

メモリ内で内容を抽出をする、ということを考えているのですが、

不可能なのでしょうか・・・?

プログラマーの立場からすると、種々の API はファイル入出力ではなく、せめてストリーム渡しにしてほしいものですね。昔から、使わなければならない API の引数に FILE* pFile や char* pFilename しかないとガッカリしてしまいます。メモリー渡しで、しかもチャンクに分割してやりとりできるのが一番いいと思います。
しかし、Excel は、Excel.Application も ADO, ADO.NET や ODBC のドライバーも、ファイルでしか渡せないように見えます。
諦めて、一時ファイルのファイルの格納場所や命名規則をいかに工夫するかしかないでしょう。.NET は良く知りませんが、普通は一時ファイルやファイル名を生成する API があるので、それを使うことになります。
あと、使い終わったファイルをいつ消すかなども悩むところです。

投稿者:unibon

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。