In this article we will learn how to render a visualforce page as CSV in Salesforce.
In order to render a visualforce page as CSV you have to set contentType attribute to text/csv.
Have a look at below code example where I have created a Visualforce page which is rendered as CSV. CSV will display the list of 5 accounts fetched using Apex.
<apex:page controller="CSVExportController" contentType="text/csv">
<apex:outputText value="{!CsvData}" escape="false"/>
</apex:page>
Below is the Apex Controller Named CSVExportController which will fetch 5 account records from Salesforce. After fetching the records from Salesforce we are creating a String variable named csvContent which will hold all the CSV data.
I have also written method named formatField which will handle null values and escape quotes.
public class CSVExportController {
public String getCsvData() {
// Fetch the data
List<Account> accounts = [SELECT Name, Industry, Type FROM Account LIMIT 5];
// Build the CSV content
String csvContent ='Name,Industry,Type'+'\n';
for (Account acc : accounts) {
csvContent = csvContent+''+(formatField(acc.Name) + ',' +
formatField(acc.Industry) + ',' +
formatField(acc.Type) + '\n');
}
return csvContent.toString();
}
// Helper method to handle null values and escape quotes
private String formatField(String field) {
if (field == null) return ''; // Handle null
field = field.replace('"', '""'); // Escape double quotes for CSV
return '"' + field + '"'; // Wrap in quotes
}
}
Also, check out the below video on How to Render Visualforce Page as CSV in Salesforce?
I hope you find this article helpful. Let us know which topic we should cover next.