@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

DataGridのデータをMicrosoft Excel2000にエクスポートする

1
投稿者投稿内容
otaka
会議室デビュー日: 2004/05/13
投稿数: 5
投稿日時: 2004-08-25 09:42
はじめまして。
今、DataGridのデータをMicrosoft Excel2000にエクスポートする処理を作成しているのですが、どうしても漢字・ひらがなの部分で文字化けが起こってしまいます。

これが作成したソースコードです。

private void Page_Load(object sender, System.EventArgs e)
{
if (Session[CSession.OUTPUT_TITLE] != null
&& Session[CSession.OUTPUT_EXCEL] != null)
{
// Sessionにて、タイトル文字列、DataGridデータを渡す
string title = Session[CSession.OUTPUT_TITLE].ToString();
DataGrid DgExcel = (DataGrid)Session[CSession.OUTPUT_EXCEL];

StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
DgExcel.RenderControl(htw);
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = Encoding.GetEncoding("Shift-JIS");
// Excelにはきだす
Response.Write(title);
Response.Write(sw.ToString());
Response.End();
}
}

知っている方が見えましたら、ご教授下さい。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-08-25 12:46
想像ですが...

> Response.ContentEncoding = Encoding.GetEncoding("Shift-JIS");

Content-Encodingヘッダを設定するだけで、Response.Writeには作用しない。

> Response.Write(sw.ToString());

Web.configのrequestEncoding="UTF-8"が効いて、文字列はUTF-8で送信される。

otaka
会議室デビュー日: 2004/05/13
投稿数: 5
投稿日時: 2004-08-25 13:21
todoさん ご返答ありがとうございました。
Web.configの設定ですが、

<globalization
requestEncoding="shift_jis"
responseEncoding="shift_jis"
/>

このようにしています。

補足:いつも文字化けが起こるとういわけではない。
   いつも決まったデータ列が存在する場合のみ文字化けが起こる。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-08-25 14:26
Content-Encodingヘッダはブラウザに渡されるが、Excelには渡りません。
Excelはcharsetが分からないので自動判定で時々間違えるのでしょう。
metaタグのContent-Typeを渡せばいいでしょう。
1

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