トップ回答者
IISのWebシステムでクライアントにExcelをダウンロードさせる方法

質問
-
Webシステムにおいて、クライアント端末にExcelファイルをダウンロードさせる機能の良い実装方法を教えてください。
以下を懸念しております。
①クライアント端末が今後Office365になっても対応できるようにしたい
②サーバ側にExcelをインストールし、サーバ側でExcelを作成し、クライアント側にダウンロードしているが、
速度が非常に遅い。
③OpenXML SDKにより、XMLファイルを書き出し、クライアント側にダウンロードさせたいが、
開発工数が大きい。
他の良い実装方法、もしくは上記懸念を改善する策があれば、ご教示ください。
2016年12月8日 13:49
回答
-
こんにちは。
①については具体的にどういった点を懸念されているのかが想像できなかったので、他2点についてのみ、私の意見を書いてみたいと思います。
②の点についてですが、基本的には避けるべきという認識です。
既にご承知されているかもしれませんが、サーバにインストールされたExcelを利用してファイルを作成することは、技術面・ライセンス面の双方で問題になりやすいので基本的には避けるべきだと私は認識しています。
この点についてオフィシャルの見解がまとまっているものがあるので、もし見たことがなければ一度ご覧になることをお勧めします。
③について、「Webシステム」がどういったテクノロジーで実装されている/する予定かが不明のため、ASP.NETと仮定して意見を書きます。
やることにもよると思うのですが、そのままOpenXML SDKを使うと工数も大きくなりがちですよね。
私は実現したい機能などに合わせて、サードパーティー製のライブラリ(有償・無償含めて)を利用することが多いです。要件に対してまずは無償利用可能なEPPlus(http://epplus.codeplex.com/)で実現できないか検討し、EPPlusで実現不可能な場合は有償コンポーネントを利用する、という流れで検討するということを私はよくやります。
きよくらならみ
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2016年12月19日 8:40
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:34
2016年12月9日 0:45 -
② についてはきよくらさんがコメントしている通り、推奨もサポートもされず実際に問題を生じやすい構成ですので、これはやめるべきでしょう。
根本的な話としては、サーバー サイドで Excel ブック(.xslx)を生成する必要が本当にあるのかも含めて検討されると良いと思います。サーバーにあるデーターをクライアントで Excel で表示したいという事であれば、クライアントの Excel からデータ接続するという方法も考えられます(そういうデータ接続を予め構成した静的な Excel ブックをダウンロードさせることはそう難しくないでしょう)。
hebikuzure
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2016年12月19日 8:40
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月9日 10:41 -
今さらながらのレスですが・・・
書式設定はできませんが、ADO.NET と ACE OleDb プロバイダを利用して Excel のブックを新規作成し、それにデータを書き込むことも可能です。
ただ、Kiyokura さんが紹介された記事「Office のサーバーサイド オートメーションについて」に "Microsoft 2007 Office system ドライバーおよび 2010 Access データベース エンジンは、Microsoft Office コンポーネントと見なされます" と書いてあって、それなりの注意が必要と思いますが。
でも、以下の記事では、JET に代えて ACE をサーバー側のアプリでも使うことを推奨しているようで、"ソリューション構築者は、(SQL のような) サーバーに Office をインストールしなくても Office ファイル形式の読み取りや書き込みをそうしたサーバー上で行えます。ただし、このドライバーをスタンドアロンのデータ ストアとして使用することは認められていません" と書いてあって、何が何だか分かりませんが、多分技術的には問題ないと思います。
Microsoft Access 2010 を使用したデータ プログラミング
https://msdn.microsoft.com/ja-jp/library/office/ff965871(v=office.14).aspxExcel ブックをどのように作って、それにどのようにデータを書き込むかの具体例については以下の記事を見てください。
ACE OleDb で Excel のブック作成
http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx- 編集済み SurferOnWww 2016年12月10日 3:47 誤字訂正
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月10日 3:45 -
クライアントに渡した Excel ブックで何がしたいのかもポイントでしょう。
印刷したいのなら、一番柔軟なのは Excel 自身の印刷機能が利用できるので Excel ブックは最適ですが、データ分析が主目的なら Excel ではなく最近なら PowerBI の方がよいかもしれません。
hebikuzure
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月10日 4:06
すべての返信
-
こんにちは。
①については具体的にどういった点を懸念されているのかが想像できなかったので、他2点についてのみ、私の意見を書いてみたいと思います。
②の点についてですが、基本的には避けるべきという認識です。
既にご承知されているかもしれませんが、サーバにインストールされたExcelを利用してファイルを作成することは、技術面・ライセンス面の双方で問題になりやすいので基本的には避けるべきだと私は認識しています。
この点についてオフィシャルの見解がまとまっているものがあるので、もし見たことがなければ一度ご覧になることをお勧めします。
③について、「Webシステム」がどういったテクノロジーで実装されている/する予定かが不明のため、ASP.NETと仮定して意見を書きます。
やることにもよると思うのですが、そのままOpenXML SDKを使うと工数も大きくなりがちですよね。
私は実現したい機能などに合わせて、サードパーティー製のライブラリ(有償・無償含めて)を利用することが多いです。要件に対してまずは無償利用可能なEPPlus(http://epplus.codeplex.com/)で実現できないか検討し、EPPlusで実現不可能な場合は有償コンポーネントを利用する、という流れで検討するということを私はよくやります。
きよくらならみ
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2016年12月19日 8:40
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:34
2016年12月9日 0:45 -
② についてはきよくらさんがコメントしている通り、推奨もサポートもされず実際に問題を生じやすい構成ですので、これはやめるべきでしょう。
根本的な話としては、サーバー サイドで Excel ブック(.xslx)を生成する必要が本当にあるのかも含めて検討されると良いと思います。サーバーにあるデーターをクライアントで Excel で表示したいという事であれば、クライアントの Excel からデータ接続するという方法も考えられます(そういうデータ接続を予め構成した静的な Excel ブックをダウンロードさせることはそう難しくないでしょう)。
hebikuzure
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2016年12月19日 8:40
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月9日 10:41 -
きよくらならみ様
ご回答ありがとうございます。説明が不足しており、申し訳ございません。
Webシステムは「ASP.NET」「C#」で構築しております。
また、現行システムが②で実装されており、OpenXML SDK、または他の実装方法に変更すべきか検討しております。
②の現行システムで以下の問題が多々発生しております。
・Webからクライアントへのダウンロード速度が遅い(5分程度)
・複数ユーザ利用時に原因不明エラーが発生する
・プログラムのバグが発生した場合、ネット上に実装事例が少なく、対処に時間を要する
・プログラムのバグが発生した場合、MSでサポートしていおらず、プレミアムサポート契約で問い合わせしなければならない
そのため、実装方法の見直しを検討しておりました。
サードパーティー製のライブラリは存じませんでした。
OpenXML SDKの実装サンプルを確認したところ、現行の実装と比べて数倍の工数がかかると思っておりましたが、
ライブラリを利用することで、大幅に実装工数を削減できそうですね。
現状の機能を網羅できるか確認し、検討させていただきたいと思います。
ありがとうございました。
2016年12月10日 2:39 -
hebikuzure様
ご回答ありがとうございます。
やはり②での実装は避けるべきなのですね。
おっしゃる通り、クライアント側でExcel表示ができればよいです。静的なExcelブックをクライアント側に配置するのも確かに1つの方法だと思います。VBAでデータ取得・データの登録を直接サーバ側DBに登録させれば、良いわけですね。そうしますと、ODBCドライバ等をクライアント側にインストールも必要ですね。
実装工数としては、OpenXML SDKより軽い気がします。両方の実現可否を確認した上で、どちらかで実装したいと思います。
ありがとうございました。
2016年12月10日 2:55 -
今さらながらのレスですが・・・
書式設定はできませんが、ADO.NET と ACE OleDb プロバイダを利用して Excel のブックを新規作成し、それにデータを書き込むことも可能です。
ただ、Kiyokura さんが紹介された記事「Office のサーバーサイド オートメーションについて」に "Microsoft 2007 Office system ドライバーおよび 2010 Access データベース エンジンは、Microsoft Office コンポーネントと見なされます" と書いてあって、それなりの注意が必要と思いますが。
でも、以下の記事では、JET に代えて ACE をサーバー側のアプリでも使うことを推奨しているようで、"ソリューション構築者は、(SQL のような) サーバーに Office をインストールしなくても Office ファイル形式の読み取りや書き込みをそうしたサーバー上で行えます。ただし、このドライバーをスタンドアロンのデータ ストアとして使用することは認められていません" と書いてあって、何が何だか分かりませんが、多分技術的には問題ないと思います。
Microsoft Access 2010 を使用したデータ プログラミング
https://msdn.microsoft.com/ja-jp/library/office/ff965871(v=office.14).aspxExcel ブックをどのように作って、それにどのようにデータを書き込むかの具体例については以下の記事を見てください。
ACE OleDb で Excel のブック作成
http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx- 編集済み SurferOnWww 2016年12月10日 3:47 誤字訂正
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月10日 3:45 -
クライアントに渡した Excel ブックで何がしたいのかもポイントでしょう。
印刷したいのなら、一番柔軟なのは Excel 自身の印刷機能が利用できるので Excel ブックは最適ですが、データ分析が主目的なら Excel ではなく最近なら PowerBI の方がよいかもしれません。
hebikuzure
- 回答としてマーク 立花楓Microsoft employee, Moderator 2016年12月22日 2:35
2016年12月10日 4:06