【VF】
<apex:page language="ja-JP" cache="true" contentType="application/vnd.ms-excel#csvdownload_{!YEAR(TODAY())}{!MONTH(TODAY())}{!DAY(TODAY())}.csv" controller="CsvDownloadCon" showHeader="false" readOnly="true">列1,列2,列3
<apex:repeat value="{!records}" var="rec" >
{!rec.Text1__c},{!rec.Text2__c},{!rec.Text3__c}
</apex:repeat>
</apex:page>
【Apex】
public with sharing class CsvDownloadCon {
private List<CustomObject__c> records;
public CsvDownloadCon() {
records = new List<CustomObject__c>();
for(CustomObject__c rec : [SELECT Text1__c,Text2__c,Text3__c FROM CustomObject__c]) {
rec.Text1__c = rec.Text1__c.escapeCsv();
rec.Text2__c = rec.Text2__c.escapeCsv();
rec.Text3__c = rec.Text3__c.escapeCsv();
records.add(rec);
}
}
public List<CustomObject__c> getRecords() {
return records;
}
}
【CSV】
列1,列2,列3
aaa,bbb,"c""cc"
a1,b1,c1