Moving on with Excel Export part 6 : But now we Import

The previous 5 steps in this series (part 1 part 2 part 3 part 4 part 5) has been getting data out to excel in different ways this part will show you how to get data back into Domino again thru your XPage, this will give you the possibility to roundtrip data handling. Export all customers mark the rows you have changed and re import the data. Because Apache POI is installed on the server as an OSGI we have access to these classes in all java code on the server and that is what I’m going to show you today and how to upload an Excel file and read some data from a cell.

In the example database for POI4XPages there is a class you really need and that is the ImportAction this is needed to open up a workbook of a xlsx file you don’t need it if you are only using xls. This class is used for changing the classpath of the jvm and some security stuff so you don’t need to modify the java.policy file on your server (Thanks Christian for pointing this out)

We start with some OpenNTF data in Excel

screen300

We create an java class

public String getData(java.io.File file,Integer row,Integer cell){

try {

 String inputFile = file.getPath();

 String CellVal=””;

 ImportAction ioAction = new ImportAction();

 HashMap<String, String> hsCurrent = new HashMap<String, String>();

 hsCurrent.put(“FILE”, inputFile);

 workbook = ioAction.run(null, hsCurrent);

 if (ioAction.hasError()) {

   Exception exLst = ioAction.getLastException();

   throw(exLst);

 }else{

 Sheet worksheet=workbook.getSheetAt(0); 

 Row rowdata = worksheet.getRow(row);

 Cell celldata = rowdata.getCell(cell);

 CellVal= celldata.getStringCellValue();

}

return CellVal;

}catch(Exception e){

return “”;

}}

lets look at the parts of this class

 ImportAction ioAction = new ImportAction();

 HashMap<String, String> hsCurrent = new HashMap<String, String>();

 hsCurrent.put(“FILE”, inputFile);

 workbook = ioAction.run(null, hsCurrent);

 if (ioAction.hasError()) {

   Exception exLst = ioAction.getLastException();

}

This is the magic call the the ImportAction class that will create a Excel POI workbook Object.

The following rows will get the first sheet in the excel file get the first row and the first cell and return the string

Sheet worksheet=workbook.getSheetAt(0); 

 Row rowdata = worksheet.getRow(row);

 Cell celldata = rowdata.getCell(cell);

 CellVal= celldata.getStringCellValue();

Now we need to create the XPage to enable the upload of the Excel file

screen301

The interesting part is behind the read button onclick event

importPackage(com.xpagedeveloper)

var con = facesContext.getExternalContext();

var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest();

var map:java.util.Map = request.getParameterMap();

var fileDataName = getClientId(“fileUpload1”) ;

var fileData:com.ibm.xsp.http.UploadedFile = map.get( fileDataName );

if( fileData == null ){

return;

}

var tempFile:java.io.File = fileData.getServerFile();

var Excel=new com.xpagedeveloper.ExcelData()

viewScope.data=Excel.getData(tempFile,0,0)

We get the uploaded file in fileData and retrieve the actual file using fileData.getServerFile() remember that this file is a server based temp file and with that I mean that you will not get the same same on the file as it was when the user uploaded it. And next I create an object of my class and call the getData function with the java io file object the row and the cell number remember that this has a zero based index so 0,0 is actual row 1 and cell 1, this is the result I get when running the code against the Excel sheet

screen302

If you are going to loop thru a full excel sheet you probably need to rewrite the code but this will give you a hint where to begin.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>