Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Upload+ read an excel file in a jsp using POI

I want to read an excel file in JSP,for this I first uploaded the file in a folder in the :D partition named uploads using a web application project,and I tried to read the excel uploaded file with an another java projet.The both codes are working.Here it is the code of uploading in a specific folder via web application project(JSP and SERVLET):

Libraries

  1. commons-fileupload-1.2.2.jar
  2. commons-io-2.1.jar

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Upload File</title>
</head>
<body>
<form action="UploadFile" method="post" enctype="multipart/form-data">
Select File : <input type="file" name="filetoupload">
<br/>
<input type="submit" value="Upload File">
</form>
</body>
</html>

UploadServlet.java(Servlet)

import java.io.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

public class UploadFile extends HttpServlet{

String saveFile="D:/upload/"; 

protected void processRequest(...)throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

try {
boolean ismultipart=ServletFileUpload.isMultipartContent(request);
if(!ismultipart){

}else{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;

try{

items = upload.parseRequest(request);
}catch(Exception e){
}
Iterator itr = items.iterator();
while(itr.hasNext()){
FileItem item = (FileItem)itr.next();
if(item.isFormField()){

}else{
String itemname = item.getName();
if((itemname==null || itemname.equals(""))){
continue;
}
String filename = FilenameUtils.getName(itemname);
File f = checkExist(filename);
item.write(f);
}
}
}

}catch(Exception e){

}
finally {
out.close();
}
}

private File checkExist(String fileName) {
File f = new File(saveFile+"/"+fileName);

if(f.exists()){
StringBuffer sb = new StringBuffer(fileName);
sb.insert(sb.lastIndexOf("."),"-"+new Date().getTime());
f = new File(saveFile+"/"+sb.toString());
}
return f;
}

@Override
protected void doGet(...)throws ServletException, IOException {
processRequest(request, response);

}

@Override
protected void doPost(...)throws ServletException, IOException {
processRequest(request, response);
}

@Override
public String getServletInfo() {
return "Short description";
}

}

Then I create a new JAVA PROJECT (SWING) and try the code of reading an EXCEL File via POI,It worked as well,here its is the code:

Libraries

  1. dom4j-1.6.1.jar
  2. poi-3.10-FINAL-20140208.jar
  3. poi-ooxml-3.9-20121203.jar
  4. poi-ooxml-schemas-3.9-20121203.jar
  5. xmlbeans-2.3.0.jar

JavaApplication.java

import java.io.*;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class JavaApplication{
public static void main(String[] args){
try{
FileInputStream file;
file = new FileInputStream(new File("D:\\upload\\total.xlsx"));

//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);

//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);

//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()){
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();

while (cellIterator.hasNext()){
Cell cell = cellIterator.next();

//Check the cell type and format accordingly
switch (cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println("");
}
file.close();
} 
catch (Exception e) 
{
e.printStackTrace();
}
}
}

The question is how to mix these two codes to can UPLOAD the file then print the data from EXCEL to a table in JSP ???? help me i'm stuck for over a month on this procedure

like image 943
Nihad KH Avatar asked Apr 10 '14 10:04

Nihad KH


People also ask

Does Apache POI help to read Excel file?

Apache POI XSSF implementation should be used for Excel 2007 OOXML (. xlsx) file format. Apache POI HSSF and XSSF API provides mechanisms to read, write or modify excel spreadsheets. Apache POI also provides SXSSF API that is an extension of XSSF to work with very large excel sheets.


2 Answers

after item.write(f); add this

InputStream inputStream= new ByteArrayInputStream(IOUtils.toByteArray(new FileInputStream(f)));

Workbook wb = WorkbookFactory.create(inputStream);
Sheet mySheet = wb.getSheetAt(0);
Iterator<Row> rowIter = mySheet.rowIterator();
rowIter.next();

continue your code from here.

like image 174
Chandan Reddy Avatar answered Nov 15 '22 21:11

Chandan Reddy


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ page import="org.apache.poi.hssf.usermodel.HSSFCell"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
//HSSFCell cell=new HSSFCell();
//cell.
%>
<form action="uploadExcelsb123.jsp" method="post" enctype="multipart/form-data">
Name: <input type="file" name="excel"><br>
<input type="submit"" name="Upload">
</form>
</body>
</html>





<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>

<%@page import="org.apache.commons.io.IOUtils"%>
<%@ page
    import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="com.api.dao.MyDataConnect"%>

<%@ page import="java.util.*,java.io.*"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.io.File"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFCell"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>

<%@page import="com.api.dao.MyDataConnect;"%><html>
<head>
<title>Bulk Upload Page</title>
</head>
<body>

<%
Map<String,String> mp=new HashMap<String,String>();
    try {
        String ImageFile = "";
        String itemName = "";
        boolean isMultipart = ServletFileUpload
                .isMultipartContent(request);
        if (!isMultipart) {
        } else {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;
            try {
                items = upload.parseRequest(request);
            } catch (FileUploadException e) {
                e.getMessage();
            }

            Connection conn = new MyDataConnect().giveConnection();
            //Date d = new Date();
            FileItem item = (FileItem) items.get(0);

            //InputStream is=item.getInputStream();
             HSSFWorkbook workbook = new HSSFWorkbook(item.getInputStream());
             String ipaddress=request.getRemoteAddr();
             HSSFSheet sh = (HSSFSheet) workbook.getSheet("Sheet1");
                 Iterator<HSSFRow> rowIterator = sh.rowIterator();
                 %>
                 <table border="4">
                 <%
                 int rowcount=0;
                 System.out.println("xdgdsf");
                 while(rowIterator.hasNext()) {     

                     String user_id="";
                     String name="",email="";
                     String age="";
                    HSSFRow row = rowIterator.next();
                     Iterator<HSSFCell> cellIterator = row.cellIterator();


                     %><tr> <%
                     int colcount=0;
                     while(cellIterator.hasNext()) {
                         HSSFCell cell = cellIterator.next();
                         %><td><%
                         String value="";
                         int no=0;
                         switch(cell.getCellType()) {
                         case HSSFCell.CELL_TYPE_NUMERIC:


                             System.out.print(cell.getNumericCellValue() + "\t\t");
                             if((int) cell.getNumericCellValue()==0){
                                 no=0;
                                 }else{
                                     no=(int) cell.getNumericCellValue();
                                 }
                             String column=mp.get(colcount+"");
                             if(column.trim().equals("user_id")){
                                 out.print(cell.getNumericCellValue() + "\t\t");
                                 user_id=no+"";
                             }else if(column.trim().equals("age")){
                                 out.print(cell.getNumericCellValue() + "\t\t");
                                 age=no+"";
                             }

                             break;
                                 case HSSFCell.CELL_TYPE_STRING:        


                                         System.out.print(cell.getStringCellValue().toString() + "\t\t");
                                         if(cell.getStringCellValue().toString()==null || cell.getStringCellValue().toString()=="" || cell.getStringCellValue().toString().trim().length()==0 ){
                                             value="NA";
                                             }else{
                                                 value=cell.getStringCellValue().toString();
                                             }
                                         if(rowcount!=0){
                                             column=mp.get(colcount+"");
                                           //  System.out.println(mp);
                                            if(column.trim().equals("name")){
                                                out.print(cell.getStringCellValue().toString() + "\t\t");
                                                name=value;
                                            }else if(column.trim().equals("email")){
                                                out.print(cell.getStringCellValue().toString() + "\t\t");
                                                email=value;
                                            }else  if(column.trim().equals("user_id")){
                                             out.print(cell.getNumericCellValue() + "\t\t");
                                             user_id=no+"";
                                         }else if(column.trim().equals("age")){
                                             out.print(cell.getNumericCellValue() + "\t\t");
                                             age=no+"";
                                         }




                                         }
                                         break;       

                         }  
                         if(rowcount==0){
                             mp.put(colcount+"",cell.getStringCellValue().toString().trim());
                         }
                         colcount+=1;
                         %></td><%
                         }
                     System.out.println("\n");
                     rowcount+=1;
                     %></tr><%
                     if(rowcount!=0){
                         String query="insert into bulk_upload(user_id,name,email,age) values('"+user_id+"','"+name+"','"+email+"','"+age+"')";
                      System.out.println(query);

                         PreparedStatement ptmt=conn.prepareStatement(query);

                         int i=ptmt.executeUpdate();

                         if(i==1){
                          System.out.println("Updated ---------        ");
                         }else{
                         System.out.println("Not Updated ---------        "); 
                        }
                         ptmt.close();



                     }
                     conn.close();

                 %></table><%
                 }


        }   


    }catch(Exception e){
        e.printStackTrace();
        System.out.println(e);
    }


%>
</body>
</html>

user_id and Age Should Be Integer remaining should be String

abouve Code is for java 1.5 accepts only xls file not xlsx, libraries are

commons-fileupload-1.3.jar mysql-connector-java-5.1.18-bin.jar org.apache.commons.io.jar poi-2.5.1-final-20040804.jar

like image 29
Chickenturtle Avatar answered Nov 15 '22 22:11

Chickenturtle