Webアプリからエクセルを取り込むにあたっての注意点

こんな問題点があったので調べてみました。


お客さん側で「xls形式(エクセルのシート)で作成したデータをDBに取り込みたい。」
という要望があったので
.NETで作成しようと試みたのですが…


ここで問題点が発覚


サーバ側でのEXCEL処理は好ましくない。
http://support.microsoft.com/kb/257757/ja
.NET上でExcelの作成、データの取得を行なおうとした場合
Officeのオートメーション化を行う必要があります。
言い方を変えると
直接xls、もしくはxlsx形式のデータを読み取るのではなく
COMを使ってExcelを自動化して読み取る形となります。


特にここの部分(以下引用)
Office は、予期しないエラーが発生した場合、
または機能の実行に必要なパラメータが未指定になっている場合には、
ユーザーに操作内容を確認するモーダル ダイアログ ボックスが
表示されるように設計されています。
非対話型デスクトップでのモーダル ダイアログ ボックスは
閉じることができません。
これが原因となり、そのスレッドが応答しない (ハング) ままになります。
コードを工夫することで、このような状態に陥る可能性を低減することはできますが、
完全に防止することはできません。
このことだけを取り上げても、サーバーサイド環境からの
Office アプリケーションの実行は危険であり、
このような実行はサポートされません。

(ここまで)


そしてここの部分(以下引用)
技術的な問題の他にも、ライセンスの問題を考慮する必要もあります。
現在のライセンス ガイドラインでは、クライアント自身に
Office のライセンスを受けたコピーがない場合は、
サーバー上で Office アプリケーションを使用して
クライアント要求に対するサービスを提供することは
許可されません。
サーバーサイド オートメーションを使用して、
ライセンスを受けていないワークステーション
Office 機能を提供することは、使用許諾契約書 (EULA) には含まれていません。

(ここまで)


ライセンスの問題は企業さんの場合はクリアーしてるケースが大半だけど
個人だとちょときつい。
けどこのOfficeのスレッドが応答しない状態が
発生した場合には業務に支障をきたすケースがあるため
保守が必須となってしまいます。


なので…この場合は別の対応を考える必要があります。
自分は「CSV形式としてExcelのデータを変換してから、そのCSVを取り込む」
という手法に変更してもらいました。


ただ問題は…
このCSVに変換するという作業を嫌う人がいます。
その対策はどうすればいいんだろう?