- PR -

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

1
投稿者投稿内容
三流SE
会議室デビュー日: 2006/04/06
投稿数: 7
投稿日時: 2006-04-06 20:26
現在、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
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-04-06 20:30
ASP.NET、ADO.NET、および Visual Basic .NET による Excel データの取得と表示
http://support.microsoft.com/default.aspx?scid=kb;ja;311731
三流SE
会議室デビュー日: 2006/04/06
投稿数: 7
投稿日時: 2006-04-06 20:48
やはり、Excelファイルをいったんどこかのディレクトリに
配置してから作業しなければならないのでしょうか?

マルチパートで受信したExcelファイルのバイナリデータを、
いったんどこかのディレクトリに配置せずに、
メモリ内で内容を抽出をする、ということを考えているのですが、
不可能なのでしょうか・・・?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-08 22:09
別のプロセスのメモリをのぞき見ることは、あまりして欲しくないですよね。
ゲームのチートプログラムなんかでは、よくそうしていますが。

ファイルに書き出すと、何か問題がありますか?
処理が切れるわけではないので、回収は可能だと思いますけど。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-09 00:29
引用:

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

なかなか過去ログにも同様のものがなく、苦戦しております・・
(csvならあるのですが)


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

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

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-09 10:48
引用:

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

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

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


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


---

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

 この2つから、できれば Excel ブック形式ではなく、CSV 形式または XML 形式でのやりとりを薦めます。
 それができないなら、テンポラリファイルとして保存し、処理終了後に削除するという方法を薦めます。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-04-09 11:10
引用:

三流SEさんの書き込み (2006-04-06 20:48) より:
マルチパートで受信したExcelファイルのバイナリデータを、
いったんどこかのディレクトリに配置せずに、
メモリ内で内容を抽出をする、ということを考えているのですが、
不可能なのでしょうか・・・?


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

スキルアップ/キャリアアップ(JOB@IT)