[salesforce]Visualforceを使ったcsvファイルの出力

By |10月 25, 2009|salesforce, |


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