QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

Excelへデータ書き出した際に文字化け

ASPにて
response.buffer = true
response.ContentType = "application/vnd.ms-excel"
response.AddHeader "content-disposition", "attachment; filename=test.xls"
を使用して、データをExcelへ書き込む処理を作成したのですが、
ごくごくまれにExcel内の文字が数字を除いて全て
アラビア文字のような変な文字に文字化けするような現象が起こります。
(普段は全く問題なくデータを書き出します)

tableタグを使ってExcelに書き出しており、
同じデータ内容はWeb上でも見れるようになっていますが、
Web上で見た場合は文字化けなど起こしておらず、
Excelへ書き出した際にのみに起こります(ごくごくまれに)

現在手元にデータがないのですが、UTF-8やSHIFT-JISの違いとか
なんかそういった感じではないような気がします。

もし似たような現象を経験された方や
対処法をご存知な方いらっしゃいましたら
対策など教えていただけないでしょうか?

質問者:ちゃーりー

回答

こんにちは。おふぃすこまです。

現在手元にデータがないのですが、UTF-8やSHIFT-JISの違いとか

なんかそういった感じではないような気がします。

そう思われる根拠が分からないのですが・・・
とりあえず
Response.Charset = "Shift_JIS"
を付け加えてみては如何でしょう?

投稿者:おふぃすこま

編集 履歴 (0)

>おふぃすこま
ご回答ありがとうございます。

>とりあえずResponse.Charset = "Shift_JIS"
すいません、書き忘れてましたがこれつけてもダメだったんです。
なので、UTF-8やSHIFT-JISではなさそうな気がすると書いたのですが言葉たらずでした。
おさがわせして申し訳ありません。

データは住所とか氏名、電話番号とかいったもので
それを表に書き出しています。
㈱とかの特殊なマークが原因かとも思いましたが、
そういったデータも普通にエクセルに書き出されているのでそうでもない感じです。

なんか文字化けを引き起こしている行があるらしく、その行以外を
Excelへ書き出すと文字化けがおこらず、その行のみ書き出すと文字化けします。
なのですが、文字化けを起こす行を見ても特に変なデータが入っているわけでもなく、
またまったく同じデータ内容の行を新たに作成して
それをExcelへ書き出すと、文字化けが起こらず普通にかけてしまいます。

投稿者:ちゃーりー

編集 履歴 (0)

ちゃーりーさんの書き込み (2005-02-03 16:43) より:

ASPにて

response.buffer = true

response.ContentType = "application/vnd.ms-excel"

response.AddHeader "content-disposition", "attachment; filename=test.xls"

を使用して、データをExcelへ書き込む処理を作成したのですが、

ExcelやWordを直接たたくようなAPI、何かありませんでしたっけ?(記憶があやふや)

どうしてもResponseで出そうというのなら、
画像とか罫線とか使わないのであればわざわざxlsにしないでcsvで書き出すとか、
そういう解決策は取れないのでしょうか?

(確かxlsはヘッダー情報を持つ場合があるので、特定の文字コードの組み合わせが悪さをしている、と考えてみる。)

投稿者:無月 重造

編集 履歴 (0)

>無月 重造さん
ご回答ありがとうございます。

>そういう解決策は取れないのでしょうか?
Excelは表形式で出すという指定をうけているので、csv形式は難しいです。
(文字色、背景色、配置が指定されているため)

>ExcelやWordを直接たたくようなAPI、何かありませんでしたっけ?(記憶があやふや)
すいません、まだASPを使い始めて日が経っていないのでわかっていないのですが、
これはresponse.ContentType 以外でExcelへ書き出す方法があるという事なのでしょうか?

投稿者:ちゃーりー

編集 履歴 (0)

>ExcelやWordを直接たたくようなAPI、何かありませんでしたっけ?(記憶があやふや)

すいません、まだASPを使い始めて日が経っていないのでわかっていないのですが、

これはresponse.ContentType 以外でExcelへ書き出す方法があるという事なのでしょうか?

ああ、ありましたありました。
「Microsoft Excel のオブジェクトを使用する」でMSDN検索をかけてみてください。
ASP.NET(というか.NET Framework)からExcelのブックを作成する方法が載っています。

これならxlsを動的に作成することができます。但し、ASP.NETのページを動作させるマシンにExcelが入っている必要があります。

投稿者:無月 重造

編集 履歴 (0)

SQL Server2000 を使っているなら、ReportingService を使ってみるのも手です。
Excel 形式でのエクスポートも出来ますし。
機能がWebサービスとしても公開されているので色々便利です。

投稿者:猫山みやお

編集 履歴 (0)

Response.Charsetはブラウザに吸収されて、Excelには届かないと思います。
タグでcharsetを指定するのはどうでしょう?

投稿者:todo

編集 履歴 (0)

既に解決済みと思われますが、書込みします。
私も同様に文字化けに悩みました。
出力された文字化けファイルをNotepadで開くと

と書かれていました。
上記windows-1252をShift-JISと書き換えたところ化けずに表示できました。

この状況を周囲の方に相談したところ、
「じゃぁ出力前にMetaタグだけ出力してみよう」
ということになり、
Excel用データを出力する前に(Response.Writeする前に)

をResponse.Writeしたら、文字は化けなくなりました。

?ASP?私のはASP.NETでの体験談です。
以上。

投稿者:聖人@SKB

編集 履歴 (0)

●無月 重造さん
>「Microsoft Excel のオブジェクトを使用する」でMSDN検索をかけてみてください。
これはExcel.applicationを使ってやるということですよね?
情報ありがとうございます。
まだちょびっとしか見れてないので読み進めていきます。

●猫山みやおさん
>Reporting Service
これはSQLServer2000のライセンスを持っていれば使える付随ソフト・・・ということですよね?

●todoさん
>タグでcharsetを指定するのはどうでしょう?
これはまだ試していません。
ちょっとやってみます!
(まずはmetaタグ調べるところからですが(汗))

投稿者:ちゃーりー

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。