«

»

Mar 02

Print this Post

Import csv file using apex visualforce

Import csv file using apex visualforce

Normally we use Apex data loader to import data in salesforce from CSV file. Now a days some other tools are also available to load data in salesforce like Jitterbit data loader. But sometime there is requirement when end users do not want to use Apex Data loader. They want some custom page to load data in salesforce. Then in that case we can use custom code to load data in salesforce from csv file.

Also sometime using single CSV file we want to load data in multiple objects. Then in that case we can not use data loader to load data. In that case we can use custom code to load data in salesforce.

In the example below we are loading data from CSV file for account objects.

First of all we need CSV file format. Click here to download CSV file. You can modify CSV file to insert or import account records. CSV file attached has following format:

Import csv file using apex visualforce

Now we need to write code in Apex and visualforce which will  read csv file and insert records in account object.

Click on choose file, then select csv file and then click on ‘Import Account’ button. All records from csv file will be inserted on account records. I have commented insert account line. So this example will only show account records on visualforce page. You can uncomment insert account list line in below code if you want to insert account list.

Click for demo

Import csv file using apex visualforce

Visualforce Page:

<apex:page controller="importDataFromCSVController">
    <apex:form >
        <apex:pagemessages />
        <apex:pageBlock >
            <apex:pageBlockSection columns="4"> 
                  <apex:inputFile value="{!csvFileBody}"  filename="{!csvAsString}"/>
                  <apex:commandButton value="Import Account" action="{!importCSVFile}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
        <apex:pageBlock >
           <apex:pageblocktable value="{!accList}" var="acc">
              <apex:column value="{!acc.name}" />
              <apex:column value="{!acc.AccountNumber}" />
              <apex:column value="{!acc.Type}" />
              <apex:column value="{!acc.Accountsource}" />
              <apex:column value="{!acc.Industry }" />
        </apex:pageblocktable>
     </apex:pageBlock>
   </apex:form>
</apex:page>

Apex Code:

public class importDataFromCSVController {
public Blob csvFileBody{get;set;}
public string csvAsString{get;set;}
public String[] csvFileLines{get;set;}
public List<account> acclist{get;set;}
  public importDataFromCSVController(){
    csvFileLines = new String[]{};
    acclist = New List<Account>(); 
  }
 
  public void importCSVFile(){
       try{
           csvAsString = csvFileBody.toString();
           csvFileLines = csvAsString.split('\n'); 
           
           for(Integer i=1;i<csvFileLines.size();i++){
               Account accObj = new Account() ;
               string[] csvRecordData = csvFileLines[i].split(',');
               accObj.name = csvRecordData[0] ;             
               accObj.accountnumber = csvRecordData[1];
               accObj.Type = csvRecordData[2];
               accObj.AccountSource = csvRecordData[3];   
               accObj.Industry = csvRecordData[4];                                                                             
               acclist.add(accObj);   
           }
        //insert acclist;
        }
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importin data Please make sure input csv file is correct');
            ApexPages.addMessage(errorMessage);
        }  
  }
}

Permanent link to this article: http://www.sfdcpoint.com/salesforce/import-csv-file-using-apex-visualforce/

  • Guest

    is it possible to use this process to update fields on a standard object instead? Are you able to post this process in apex?

    • Yes., It is possible to use this process to update field on standard object. Its straightforward. This example is using standard object(Account). You can use other standard objects also.This example defines how we can read csv file. After reading csv file you can do whatever you want with csv file content. You can create new records and you can also update records if you have id of record.

      • rahul ks

        Can i do the same with a Custom object ? i need to update certain fields in it.

  • Mike Marshall

    What is the limit of records? I need to upload 1 million through a process like this one.

  • Krishna Bidwai

    i am getting error using above snippet ..visualforce error as collection maximum limit 1000

  • Star

    If one of the fields on the CSV is read only, how would I handle an update to existing records? It’s not allowing me to iterate since it’s read only.

    • It is very obvious, system will not allow you to update read only field by any mean. You should not add that field in csv file. But if you want to handle that in your code, you can use metadata describe call to check whether field is read only or not.

  • Pingback: How To Insert Image In Salesforce Visualforce | Single Handle()

  • magi 001

    How to upload “.xlsx / xls” data insert in contact object in salesforce

  • SFDC SPT

    Hi, I am trying to do the same on a custom object but csvFileLines size is coming as 1 even though there are multiple rows in the csv file. because of that it’s not going through the for loop and inserting the records.