本部長は管理ができない

Salesforceに関わっているエンジニアの技術メモ。ときどきそれ以外。

VisualforceからCSV出力

VisualforceページからCSVを出力する場合、apex:pageのcontentType属性に記述する。

<apex:page contentType="text/csv;charset=Shift_JIS;#fileName.csv" standardController="Contact" recordSetVar="contacts">Id,Name
    <apex:repeat value="{!contacts}" var="con">
{!con.Id},{!con.Name}
    </apex:repeat>
</apex:page>

apex:page

text/csv

これでCSV出力となる。
ページ読み込み時に保存ダイアログが表示される。

charset

Excelで開くためにシフトJISを指定する。
Salesforceはデフォルトの文字コードUTF-8であるため。

#fileName.csv

#以降がデフォルトファイル名。
保存ダイアログ(ここでは「fileName.csv」)で初期表示される。

ヘッダ、データ

Id,Name

ヘッダ部。
これがないと先頭行が空行となる。
apex:pageの直後でないと空行が入る。仕様?

{!con.Id},{!con.Name}

これがデータ部。
インデントを入れるとインデントも含め出力される。
途中に改行入れると改行されて出力される。
apex:outputField、apex:outputLabelはHTMLタグが出力される。
apex:outputTextであれば、テキストのみ出力される。


こんな感じ。
データ部は1行に記述する必要があるため、かなり見づらいコードになりそう。