[salesforce]Visualforceを使ったcsvファイルの出力
Salesforceのレコード情報をCSV出力する方法は、たぶんこんな感じ。
- WebサービスAPIを叩く系(データローダ、各種データ連係ツールを含む)
- レポートのエクスポートを使う。
- Visualforceから出力する
上記2つはいわずもがななので、Visualforceの機能を使ってCSVファイルを出力する方法の紹介。
例えば、こんな感じで出力できます。
[php]
<apex:page language="{!userLanguage}" cache="true" contentType="application/vnd.ms-excel#tset_list{!YEAR(TODAY())}{!MONTH(TODAY())}{!DAY(TODAY())}.csv" controller="test_controller" showHeader="false">
列1,列2,列3,列4,列5
<apex:repeat value="{!testList}" var="tt" >
{!tt.retsu1__c},{!tt.retsu2__c},{!tt.retsu3__c},{!tt.retsu4__c},{!tt.retsu5__c},
</apex:page>
[/php]
ポイント
- apex:pageのcontentTypeに「vnd.ms-excel」を指定。(CSVにファイル名を付けたい場合は「#」の後ろにファイル名を付ける。)
- apex:pageで「cache=”true”」にする
- apex:pageのlanguageを{!userLanguage}にする。
ただ、ディスカッションボードでIE6、7でうまくいかないという報告がちらほらあります。
http://community.salesforce.com/sforce/board/message?board.id=Visualforce&thread.id=757&view=by_date_ascending&page=1
http://community.salesforce.com/sforce/board/message?board.id=Visualforce&thread.id=757&view=by_date_ascending&page=2
が、僕の環境で一応これでIE6,7でもうまくいきました。
ただIE8でうまくいきません。IE8はSalesforceもサポート外ですし、とりあえず対象外ってことで。
あと、この形式でCSVファイルダウンロードするとローカルPCのエクセルがShift-JISでCSVファイルを開こうとします。これはエクセルの仕様のようで、日本語Windowsの場合はShift-JISで開いてしまうようです。一方で、Visualforceがはき出す文字コードはUTF-8なので、このCSVファイルが文字化けして表示されてしまいます。(他のOS、他のOffirceソフトの場合は未確認)
[参考]
http://support.microsoft.com/kb/821863/ja
http://q.hatena.ne.jp/1090830076
アナログになりますが、回避方法は大きく分けて
- テキストエディタで開いて文字コード変換して保存
- エクセルで取り込み時に文字コード指定。
の二通り。
Googleも一部で同じような問題抱えてます。
http://analytics-ja.blogspot.com/2007/10/how-to-restore-garbled-japanese.html
http://makitani.com/2007/11/how_to_restore_garbled_japanese.html