- PR -

DataGridのデータをExcelへ出力

投稿者投稿内容
Wing
会議室デビュー日: 2002/12/15
投稿数: 12
投稿日時: 2002-12-15 23:02
初めまして。.NETに取りかかって2週間前後です。
検索結果を.Filterを使用してDataGridに表示しています。
この結果をExcelファイルとして出力したいのですが、どのようにすればいいのでしょうか?

VB.NETを使用してASP WEBアプリケーションにて制作しています。
Yuu
会議室デビュー日: 2002/12/16
投稿数: 2
投稿日時: 2002-12-16 01:50
こんにちわ

Excelファイルとして出力したい場合、エクセルのCOMオブジェクトを使用することになると思います。
VS.netなら、メニューの[プロジェクト]の参照の追加より、COMのタブを選択し、コンポーネント名Microsoft Excel8.0 オブジェクトライブラリを選択して参照を追加し、VS.netがない場合は、手動でTlbImp.exeを使って、EXCEL8.OLBからExcel.dllを作って利用できます。
あとは、ExcelVBAと同じように使用できるので、DataGridの内容をこれを使って出力すればいいように思います。
(エクセルから読めるCSV形式のファイルにすればこんなめんどくさいことはしなくていいのですがね..)
的外れなことを言っていたらすいません。
Wing
会議室デビュー日: 2002/12/15
投稿数: 12
投稿日時: 2002-12-16 13:05
>あとは、ExcelVBAと同じように使用できるので、DataGridの内容をこれを使って出力すればいいように思います。

大変申し訳ありませんが、この辺も教えて頂けないでしょうか?
Excelを扱う事が殆ど今まで無かったのでさっぱりわからなくて…。
nora
会議室デビュー日: 2002/12/16
投稿数: 13
投稿日時: 2002-12-16 20:19
確認なのですが、「Excelファイルとして出力したい」というのは、状況としてWebアプリケーションを作成している場合でしょうか?

(現在)
・サーバ側でDataGridにデータを設定してクライアントブラウザ等へ送信はできている。

(やりたいこと)
1.DataGridに表示させたデータと同内容を、Excelファイルとしてサーバ側に作成したい。(そのあとダウンロードさせたい、とか)
2.DataGridに表示させたデータと同内容を、クライアントブラウザ等へExcel形式で送信したい。

どちらでしょうか?

仮に、2の場合ですとクライアント側にExcelが必要になると思いますが、サーバ側でExcelファイルを作成せずに、直接DataGridの内容をクライアントへ送信すれば可能は可能だと思います。
リンク先を参照してください。
「Export data from datagrid to Excel」
http://www.dotnet247.com/247reference/msgs/26/132455.aspx

ただ、直接Excel形式だといって送信した場合、セルの型が保持できずに送信されてしまうようなので(文字型のセルなのに、送信先クライアントでは数値として認識されてしまう)、どうしようかな・・・というところでもあります。

#ちょっと前に同様の悩みがあって調べたものの上の現象のところで私は頓挫したままです。
#ご参考になれば。
Wing
会議室デビュー日: 2002/12/15
投稿数: 12
投稿日時: 2002-12-17 15:58
引用:

(現在)
・サーバ側でDataGridにデータを設定してクライアントブラウザ等へ送信はできている。

(やりたいこと)
1.DataGridに表示させたデータと同内容を、Excelファイルとしてサーバ側に作成したい。(そのあとダウンロードさせたい、とか)
2.DataGridに表示させたデータと同内容を、クライアントブラウザ等へExcel形式で送信したい。

どちらでしょうか?



できれば、1の方を実現したいです。
ファイルを生成させてハイパーリンクなんか張れればと、思っています。
現状もDataGridにデータを設定してクライアントブラウザ等へ送信はできています。
また、コレとは別にExcelファイルを抽出したいのですが、Excelのオブジェクトを生成するとセキュリティエラーのような物が出て…。オブジェクトが生成できない状態です。
合わせて、この問題もご存じの方がいればよろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-12-17 18:06
引用:

また、コレとは別にExcelファイルを抽出したいのですが、Excelのオブジェクトを生成するとセキュリティエラーのような物が出て…。オブジェクトが生成できない状態です。
合わせて、この問題もご存じの方がいればよろしくお願いします。


 クライアント側でエクセルオブジェクトを作成しようとするとそうなります。クライアントで実行されるコードか、サーバ側で実行されるコードか、よく見直してみてください。

 エクセルにさせたいことは、エクセルのマクロ記録機能を利用すれば、だいたいその通りに記述すればOKです。所々、型がObject型で返ってくるので、そこのところを動的に型変換してやる必要があります。
Wing
会議室デビュー日: 2002/12/15
投稿数: 12
投稿日時: 2002-12-17 22:06
引用:

 クライアント側でエクセルオブジェクトを作成しようとするとそうなります。クライアントで実行されるコードか、サーバ側で実行されるコードか、よく見直してみてください。

 エクセルにさせたいことは、エクセルのマクロ記録機能を利用すれば、だいたいその通りに記述すればOKです。所々、型がObject型で返ってくるので、そこのところを動的に型変換してやる必要があります。



レスありがとうございます。
という事は私の場合クライアント側のExcelオブジェクトを作成してしまったようですね。
ここら辺が良くわからないので、お教え願えませんでしょうか?
Dim xlApp As Object
xlApp = Server.CreateObject("Excel.Application")
このように記述しました。どう治せばサーバー側のExcelが起動しますでしょうか?

動的にObject型を変換…。と言うのも、軽く具体的に説明して頂けるとありがたいです。

IISや.NETをほとんど今まで利用した事がなかったので、本当にわからない事がいっぱいで毎日悩まされているような状態です。どうか、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-12-18 08:37
引用:

ここら辺が良くわからないので、お教え願えませんでしょうか?
Dim xlApp As Object
xlApp = Server.CreateObject("Excel.Application")
このように記述しました。どう治せばサーバー側のExcelが起動しますでしょうか?


書き方ではなく、「そのコードがサーバ/クライアントのどちらで実行されるか」が問題です。VB.NETのASP.NET Webアプリケーションですよね?ASP.NETはよくわからないのですが、クライアントで実行される(aspx内のコード?)とサーバで実行されるコード(aspx.vb内のコード?)があると思います。セキュリティーエラーは、内容をよく見ないよとわかりませんが、片方からもう片方へアクセスしているために発生していると*思われます*。


>>動的にObject型を変換…。

 例えば、「Dim xlApp As Object」ですが、正しくは「Dim xlApp As Excel.Application」です。このとき、「CreateObject」からはObject型が返ってくるので、「xlApp = CType(CreateObject..., Excel.Application)」と、変換してやります。その他、WorkBookコレクションやWorkSheetコレクションから、1つの WorkBook / WorkSheet を取り出すときも、コレクションからはObject型が返ってくるので、同じように変換して用います。


 その他、.NET Frameworkがインストールされている環境で、IE5.1以上を使うという前提であれば、Windows ApplicationをHTMLに貼り付けるという技、HTMLからEXEファイルをダウンロードさせて実行するという技、も使えます。実は私は、そのサーバ/クライアントで実行される云々が面倒そうなので、こちらで切り抜けました(ぉぃ)。

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