- PR -

GridViewデータをExcelへエクスポートする際に関して

1
投稿者投稿内容
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-04-12 14:46
VS2005、言語はC#でASP.NET 2.0で開発しております。

GridViewのデータをエクスポートする際、そのデータに関する
補足情報を別シートに書き込みたいと考えております。
(Sheet1にデータ、Sheet2に補足データというような)

そこで質問させていただきたいのですが、上記のような処理は
可能でしょうか。
Excelへのエクスポートのスレッドにおいてシートに関する
記述が見つからず困っております。
どなたかご教授よろしくお願いいたします。
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-04-12 15:30
Google先生に聞いたところ、いくらでも参考になりそうなサイトがヒットしましたよ。

「Excel シート C#」の検索結果
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-04-13 09:28
まさる様
ご指摘ありがとうございます。



StringWriter sw = new StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
HtmlForm hf = new HtmlForm();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=Data.xls");
Response.Charset = "";
Page.EnableViewState = false;
Controls.Add(hf);
hf.Controls.Add(dataGrid);
hf.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();

現状では上記のようになっているのですが、
この処理の段階でシート指定での書き込みや
複数のシートを作成といったシートに対する処理
は可能なのでしょうか。

ご教授よろしくお願いいたします。
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-04-13 13:18
引用:

NotFoundさんの書き込み (2007-04-13 09:28) より:
まさる様
ご指摘ありがとうございます。



StringWriter sw = new StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
HtmlForm hf = new HtmlForm();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=Data.xls");
Response.Charset = "";
Page.EnableViewState = false;
Controls.Add(hf);
hf.Controls.Add(dataGrid);
hf.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();

現状では上記のようになっているのですが、
この処理の段階でシート指定での書き込みや
複数のシートを作成といったシートに対する処理
は可能なのでしょうか。

ご教授よろしくお願いいたします。




できません。

なぜなら、上記のやり方では、htmlを無理やりExcelで開いているに過ぎないからです。
(作成されるファイルを保存してテキストエディタで開けば、中身がhtmlであることが確認できます。)

お望みのことをやりたいならば、別の手段が必要ではないかと思います。

#サーバー側でExcelファイルを作って、それをダウンロードさせるのかな?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-04-13 19:42
HTMLではなく、XMLを出力するのであれば可能かと。

Export a DataSet to Microsoft Excel without the use of COM objects
http://www.codeproject.com/dotnet/ExportToExcel.asp

複数のシートの例
コード:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet ss:Name="シート1">
  <Table>
   <Row>
    <Cell><Data ss:Type="String">a</Data></Cell>
    <Cell><Data ss:Type="String">b</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">1</Data></Cell>
    <Cell><Data ss:Type="Number">2</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
 <Worksheet ss:Name="シート2">
  <Table>
   <Row>
    <Cell><Data ss:Type="String">c</Data></Cell>
    <Cell><Data ss:Type="String">d</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="Number">3</Data></Cell>
    <Cell><Data ss:Type="Number">4</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>

まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-04-14 09:47
引用:

todoさんの書き込み (2007-04-13 19:42) より:
HTMLではなく、XMLを出力するのであれば可能かと。



ただ、Excel 2000 以前だとXML形式は読めないんですよね。

NotFoundさんがExcelのバージョンを指定していないので、
もしかしたら無用な心配なのかもしれませんが。
NotFound
会議室デビュー日: 2005/07/13
投稿数: 18
投稿日時: 2007-04-16 10:47
todo様、まさる様

ご返答ありがとうございます。
私の現在利用しているExcelは2003ですので
ご指導いただいた手法で処理できるように
考えてみます。

ありがとうございました。
1

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