none
ASP.NETを使用してのExcelファイルダウンロードのやり方について RRS feed

  • 質問

  • はじめまして、宜しくお願いいたします。

    ASP.NETで、SQL Serverからデータ取得した結果をExcelファイル形式で作成してダウンロードを行えるようにしようとしているのですが。

    StringBulder型の変数にどんどんSQL取得データを追加していくようにしているのですが、ダウンロードしたファイルは「Exce」ファイル形式でダウンロードされていますが、テキストで開いても文字化けすることなく正常に表示されています。

    Dim test As new StringBuilder

    datacmd.commandtext = "SELET * FROM TEST"

    RS = datacmd.excequtereader

    While test

      When rs.read

               .append(RS("name"))

               .append(RS("age")).tab

        End When

    End whill

    これ以降の処理は割るれてしましましたが、実行結果を Response.Write(test)に貼り付けて出力しています。

    サンプルExcelを使用せず、サーバーにファイルを格納せずに直接出力する方法はあるのでしょうか?ご教授のほど宜しくお願いいたします。

    2015年3月25日 12:21

回答

  • > 実行結果を Response.Write(test)に貼り付けて出力しています。
    > サンプルExcelを使用せず、サーバーにファイルを格納せずに直接出力する方法はあるのでしょうか?

    「サンプルExcel」の意味が分かりませんが・・・

    今は CSV 形式のテキストファイルとしてダウンロードしているが、それを Excel 形式(.xls または .xlsx)にしたい。その際、サーバー側でファイルを作るのではなく全てメモリ上で処理したいということと理解してレスします。

    書式設定のないプレーンな Excel ファイルで良ければ ACE OleDb プロバイダ(Excel 2003 以前の .xls 形式なら OS 付属の JET も使えます)と ADO.NET を使って Excel ファイルを作成することができます。ただし、全てメモリ上で処理するということは無理っぽいですが。

    ACE については以下のページを見てください。(以下には Access 2007 と書いてありますが ACE は Excel にも使えます)

    Access 2007 の DB を利用するアプリ開発
    http://surferonwww.info/BlogEngine/post/2011/11/08/Development-of-application-which-uses-accdb-file-of-Access-2007.aspx

    DB からデータを取得して Excel ファイルを作る方法は以下のページを見てください。

    ACE OleDb で Excel のブック作成
    http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx

    なお、ACE は以下のページの「概要」のセクションの注によると "Microsoft Office コンポーネントと見なされます" とのことです。ライセンス上の問題なのか技術上の問題なのか分かりませんが、十分な検証が必要と思いますのでご注意ください。

    Office のサーバーサイド オートメーションについて
    http://support.microsoft.com/en-us/kb/257757/ja

    ACE は使いたくないもしくは書式設定もしたいということであれば、Open XML を使用するか、サーバーで使えるように開発されたサードパーティ製の製品を使うほかなさそうです。

    Open XML SDK 2.0 を使用して Excel 2010 ブックを生成する
    https://msdn.microsoft.com/ja-jp/library/office/hh180830(v=office.14).aspx

    Excel 2007 以降でよければ ClosedXML というものもあります。

    ClosedXML - The easy way to OpenXML
    http://closedxml.codeplex.com/


    #適切なフォーラムを選んで投稿するようお願いします。ASP.NET 関係であれば Visual Basic のフォーラムより ASP.NET のフォーラムの方が適切です。(フォーラムの移動は、必要があれば管理者の方がやってくれますので、質問者さんはここで質問を続けてください)
     
    #また、質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? MVC? その他?)、ご自分の環境(OS, .NET, IIS, Visual Studio のバージョン、DB サーバーとそのバージョン、ブラウザは何か、Excel のバージョンなど)に関する情報を最低書いていただけませんか?
     
    #ガイドラインも出ていますので目を通していただければと思います。
     
    フォーラムのご利用方法(質問の投稿)について
    https://social.technet.microsoft.com/Forums/ja-JP/home?forum=announceja&announcementId=587d27f8-adc8-432a-905c-81375f8a05ec

    • 回答の候補に設定 星 睦美 2015年3月31日 5:02
    • 回答としてマーク 星 睦美 2015年4月6日 4:49
    2015年3月26日 0:41
  • SQL Server Reporting Services を使えば簡単な書式ならExcel形式のファイル出力が可能です。

    Microsoft Excel へのエクスポート (レポート ビルダーおよび SSRS)

    • 回答の候補に設定 星 睦美 2015年3月31日 5:02
    • 回答としてマーク 星 睦美 2015年4月6日 4:48
    2015年3月26日 1:26

すべての返信

  • > 実行結果を Response.Write(test)に貼り付けて出力しています。
    > サンプルExcelを使用せず、サーバーにファイルを格納せずに直接出力する方法はあるのでしょうか?

    「サンプルExcel」の意味が分かりませんが・・・

    今は CSV 形式のテキストファイルとしてダウンロードしているが、それを Excel 形式(.xls または .xlsx)にしたい。その際、サーバー側でファイルを作るのではなく全てメモリ上で処理したいということと理解してレスします。

    書式設定のないプレーンな Excel ファイルで良ければ ACE OleDb プロバイダ(Excel 2003 以前の .xls 形式なら OS 付属の JET も使えます)と ADO.NET を使って Excel ファイルを作成することができます。ただし、全てメモリ上で処理するということは無理っぽいですが。

    ACE については以下のページを見てください。(以下には Access 2007 と書いてありますが ACE は Excel にも使えます)

    Access 2007 の DB を利用するアプリ開発
    http://surferonwww.info/BlogEngine/post/2011/11/08/Development-of-application-which-uses-accdb-file-of-Access-2007.aspx

    DB からデータを取得して Excel ファイルを作る方法は以下のページを見てください。

    ACE OleDb で Excel のブック作成
    http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx

    なお、ACE は以下のページの「概要」のセクションの注によると "Microsoft Office コンポーネントと見なされます" とのことです。ライセンス上の問題なのか技術上の問題なのか分かりませんが、十分な検証が必要と思いますのでご注意ください。

    Office のサーバーサイド オートメーションについて
    http://support.microsoft.com/en-us/kb/257757/ja

    ACE は使いたくないもしくは書式設定もしたいということであれば、Open XML を使用するか、サーバーで使えるように開発されたサードパーティ製の製品を使うほかなさそうです。

    Open XML SDK 2.0 を使用して Excel 2010 ブックを生成する
    https://msdn.microsoft.com/ja-jp/library/office/hh180830(v=office.14).aspx

    Excel 2007 以降でよければ ClosedXML というものもあります。

    ClosedXML - The easy way to OpenXML
    http://closedxml.codeplex.com/


    #適切なフォーラムを選んで投稿するようお願いします。ASP.NET 関係であれば Visual Basic のフォーラムより ASP.NET のフォーラムの方が適切です。(フォーラムの移動は、必要があれば管理者の方がやってくれますので、質問者さんはここで質問を続けてください)
     
    #また、質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? MVC? その他?)、ご自分の環境(OS, .NET, IIS, Visual Studio のバージョン、DB サーバーとそのバージョン、ブラウザは何か、Excel のバージョンなど)に関する情報を最低書いていただけませんか?
     
    #ガイドラインも出ていますので目を通していただければと思います。
     
    フォーラムのご利用方法(質問の投稿)について
    https://social.technet.microsoft.com/Forums/ja-JP/home?forum=announceja&announcementId=587d27f8-adc8-432a-905c-81375f8a05ec

    • 回答の候補に設定 星 睦美 2015年3月31日 5:02
    • 回答としてマーク 星 睦美 2015年4月6日 4:49
    2015年3月26日 0:41
  • 【追伸】

    ダウンロードするには HTTP ハンドラを使うことをお勧めします。理由その他の詳細は以下のページを見てください。

    ダウンロードは HTTP ハンドラで
    http://surferonwww.info/BlogEngine/post/2013/02/16/use-http-handler-for-downloading-files.aspx

    また、日本語のファイル名はブラウザに IE を使うと文字化けするので注意してください。対策は上のページにも書いてありますが、それだけではファイル名に半角空白が混ざっていると対応できません。

    以下のページのような小細工をする方法もありますが、それよりファイル名に日本語は使わないことがお勧めですが。

    ダウンロードファイル名の文字化け
    http://surferonwww.info/BlogEngine/post/2011/03/20/Downloading-file-with-Japanese-file-name.aspx

    2015年3月26日 0:51
  • SQL Server Reporting Services を使えば簡単な書式ならExcel形式のファイル出力が可能です。

    Microsoft Excel へのエクスポート (レポート ビルダーおよび SSRS)

    • 回答の候補に設定 星 睦美 2015年3月31日 5:02
    • 回答としてマーク 星 睦美 2015年4月6日 4:48
    2015年3月26日 1:26