Je veux lire un fichier Excel dans JSP. Pour cela, j'ai d'abord téléchargé le fichier dans un dossier de la partition: D nommée uploads à l'aide d'un projet d'application Web et j'ai essayé de lire le fichier Excel chargé. file avec un autre projet Java. Les deux codes fonctionnent . Ici, il s'agit du code de téléchargement dans un dossier spécifique via un projet d'application Web (JSP et SERVLET):
Bibliothèques
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";
}
}
Ensuite, je crée un nouveau Java PROJECT (SWING) et essaie le code de en lisant un fichier Excel via POI , cela a également fonctionné, voici le code:
Bibliothèques
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();
}
}
}
La question est comment mélanger ces deux codes to UPLOAD le fichier puis imprimer les données d'Excel dans une table en JSP ???? aidez-moi, je suis coincé depuis plus d'un mois sur cette procédure
après item.write(f);
ajouter ceci
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();
continuez votre code à partir d'ici.
<%@ 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 et Age devrait être Integer restant devrait être String
abouve Code is for Java 1.5 accepte uniquement les fichiers xls et non xlsx, les bibliothèques sont
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