Struts的jar包就不说了~~~!!!

工程.jar包结构:

poi-3.7-20101029.jar
poi-examples-3.7-20101029.jar
poi-ooxml-3.7-20101029.jar
poi-ooxml-schemas-3.7-20101029.jar
poi-scratchpad-3.7-20101029.jar

 

有些jar包的用不着的、但是我为了以防万一全部都倒进来了!

我的导入页面(OutExcel.jsp):

 
  
  1. <%-- 记住这里需要设置enctype="multipart/form-data"--%>     
  2. <s:form action="userInfo" method="post" enctype="multipart/form-data">    
  3.     导入Excel文件:<s:file name="excelFile"></s:file> <br/>   
  4.     <s:submit value="导入"></s:submit>   
  5.   </s:form>  

Struts2.xml配置:

 

 
  
  1. <constant name="struts.i18n.encoding" value="UTF-8"></constant>   
  2.     <constant name="struts.ui.theme" value="simple"></constant>   
  3.    
  4. <package name="excelOutPut" extends="struts-default">   
  5.         <action name="userInfo" class="userAction">   
  6.             <result>/excel/InputExcel.jsp</result>   
  7.         </action>   
  8.         <action name="outPut" class="outAction">   
  9.             <result>/excel/InputExcel.jsp</result>   
  10.         </action>   
  11.      </package>  

Userinfo类:

 
  
  1. package com.boxun.bean;      
  2. import java.math.BigDecimal;      
  3. /**  
  4.  * Userinfo entity. @author MyEclipse Persistence Tools  
  5.  */      
  6. public class Userinfo implements java.io.Serializable {      
  7.     // Fields      
  8.     private Integer id;   
  9.     private String name;   
  10.     private String pass;   
  11.     private String lastname;   
  12.     private String addres;   
  13.     private String remark;      
  14.     // Constructors   
  15.     /** default constructor */   
  16.     public Userinfo() {   
  17.     }    
  18.     /** full constructor */   
  19.     public Userinfo(String name, String pass, String lastname, String addres,   
  20.             String remark) {   
  21.         this.name = name;   
  22.         this.pass = pass;   
  23.         this.lastname = lastname;   
  24.         this.addres = addres;   
  25.         this.remark = remark;   
  26.     }      
  27.     // Property accessors      
  28.     public Integer getId() {   
  29.         return this.id;   
  30.     }      
  31.     public void setId(Integer id) {   
  32.         this.id = id;   
  33.     }   
  34.     ...set and get...  
  35.    
  36. }  

ExcelWorkSheet类:

 
  
  1. package com.boxun.bean;      
  2. import java.util.ArrayList;      
  3. import java.util.List;      
  4. import org.apache.poi.hssf.record.formula.functions.T;      
  5. public class ExcelWorkSheet<T> {   
  6.     private String sheetName;   
  7.     private List<T> data = new ArrayList<T>();  //数据行   
  8.     private List<String> columns; //列名   
  9.     public String getSheetName() {   
  10.         return sheetName;   
  11.     }   
  12.     public void setSheetName(String sheetName) {   
  13.         this.sheetName = sheetName;   
  14.     }   
  15.     public List<T> getData() {   
  16.         return data;   
  17.     }   
  18.     public void setData(List<T> data) {   
  19.         this.data = data;   
  20.     }   
  21.     public List<String> getColumns() {   
  22.         return columns;   
  23.     }   
  24.     public void setColumns(List<String> columns) {   
  25.         this.columns = columns;   
  26.     }          
  27. }  

导入的Action类:

 
  
  1. package com.boxun.action;   
  2. import java.io.File;    
  3. import java.io.FileInputStream;   
  4. import java.io.IOException;   
  5. import java.io.InputStream;   
  6. import java.util.ArrayList;   
  7. import java.util.Iterator;   
  8. import java.util.List;     
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  10. import org.apache.poi.ss.usermodel.Cell;   
  11. import org.apache.poi.ss.usermodel.Row;   
  12. import org.apache.poi.ss.usermodel.Sheet;   
  13. import org.apache.poi.ss.usermodel.Workbook;   
  14. import org.apache.poi.xssf.usermodel.XSSFWorkbook;     
  15. import com.boxun.bean.ExcelWorkSheet;   
  16. import com.boxun.bean.Userinfo;   
  17. import com.boxun.biz.IUserBiz;   
  18. import com.opensymphony.xwork2.ActionSupport;     
  19. public class UserAction extends ActionSupport {   
  20.     private IUserBiz userBiz;   
  21.     public void setUserBiz(IUserBiz userBiz) {   
  22.         this.userBiz = userBiz;   
  23.     }     
  24.     private File excelFile; //上传的文件   
  25.     private String excelFileFileName; //保存原始文件名   
  26.     //将Excel文件解析完毕后信息存放到这个对象中   
  27.     private ExcelWorkSheet<Userinfo> excelWorkSheet;   
  28.     public File getExcelFile() {   
  29.         return excelFile;   
  30.     }   
  31.     public void setExcelFile(File excelFile) {   
  32.         this.excelFile = excelFile;   
  33.     }   
  34.     public String getExcelFileFileName() {   
  35.         return excelFileFileName;   
  36.     }   
  37.     public void setExcelFileFileName(String excelFileFileName) {   
  38.         this.excelFileFileName = excelFileFileName;   
  39.     }   
  40.    
  41.     public ExcelWorkSheet<Userinfo> getExcelWorkSheet() {   
  42.         return excelWorkSheet;   
  43.     }   
  44.     public void setExcelWorkSheet(ExcelWorkSheet<Userinfo> excelWorkSheet) {   
  45.         this.excelWorkSheet = excelWorkSheet;   
  46.     }   
  47.     //判断文件类型   
  48.     public Workbook createWorkBook(InputStream is) throws IOException{   
  49.         if(excelFileFileName.toLowerCase().endsWith("xls")){   
  50.             return new HSSFWorkbook(is);   
  51.         }   
  52.         if(excelFileFileName.toLowerCase().endsWith("xlsx")){   
  53.             return new XSSFWorkbook(is);   
  54.         }   
  55.         return null;   
  56.     }    
  57.     public String execute() throws Exception{   
  58.         Workbook book = createWorkBook(new FileInputStream(excelFile));   
  59.         //book.getNumberOfSheets();  判断Excel文件有多少个sheet   
  60.         Sheet sheet =  book.getSheetAt(0);     
  61.         excelWorkSheet = new ExcelWorkSheet<Userinfo>();   
  62.         //保存工作单名称   
  63.         Row firstRow = sheet.getRow(0);   
  64.         Iterator<Cell> iterator = firstRow.iterator();   
  65.            
  66.         //保存列名   
  67.         List<String> cellNames = new ArrayList<String>();   
  68.         while (iterator.hasNext()) {   
  69.             cellNames.add(iterator.next().getStringCellValue());   
  70.         }   
  71.         excelWorkSheet.setColumns(cellNames);   
  72.         for (int i = 1; i <= sheet.getLastRowNum(); i++) {   
  73.             Row ros = sheet.getRow(i);   
  74.             Userinfo user = new Userinfo();   
  75.             user.setId((int)ros.getCell(0).getNumericCellValue());   
  76.             user.setName(ros.getCell(1).getStringCellValue());   
  77.             user.setPass(ros.getCell(2).getStringCellValue());   
  78.             user.setLastname(ros.getCell(3).getStringCellValue());   
  79.             user.setAddres(ros.getCell(4).getStringCellValue());   
  80.             user.setRemark(ros.getCell(5).getStringCellValue());   
  81.             excelWorkSheet.getData().add(user);   
  82.         }   
  83.         for (int i = 0; i < excelWorkSheet.getData().size(); i++) {   
  84.             Userinfo info = excelWorkSheet.getData().get(i);   
  85.             System.out.println(info.getLastname());   
  86.         }   
  87.         return SUCCESS;   
  88.     }       
  89. }  

显示导入的数据页面(InputExcel.jsp):

 
  
  1. <h1><s:property value="excelWorkSheet.sheetName" /> </h1>   
  2.   <p>   
  3.     <s:iterator value="excelWorkSheet.columns">   
  4.         <s:property />  ||    
  5.     </s:iterator>   
  6.   </p>   
  7.   <s:iterator var="user" value="excelWorkSheet.data">   
  8.     <p>   
  9.         <s:property value="#user.id"/>      
  10.         <s:property value="#user.name"/>      
  11.         <s:property value="#user.pass"/>      
  12.         <s:property value="#user.lastname"/>      
  13.         <s:property value="#user.addres"/>       
  14.         <s:property value="#user.remark"/>       
  15.     </p>   
  16.   </s:iterator>  

导出数据页面(Out.jsp):

 
  
  1. <s:form name="form1" action="outPut.action" method="post">   
  2.         <input type="hidden" name="format" value="xls" />   
  3.     <s:submit name="sub" value="导出数据"></s:submit>   
  4.   </s:form>  

导出数据Action:

 
  
  1. package com.boxun.action;   
  2. import java.io.IOException;   
  3. import java.io.OutputStream;   
  4. import java.util.List;   
  5. import javax.servlet.http.HttpServletResponse;    
  6. import org.apache.poi.ss.usermodel.CellStyle;   
  7. import org.apache.poi.ss.usermodel.Row;   
  8. import org.apache.poi.ss.usermodel.Sheet;   
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  10. import org.apache.poi.ss.usermodel.Workbook;   
  11. import org.apache.struts2.interceptor.ServletResponseAware;   
  12. import com.boxun.bean.Userinfo;   
  13. import com.boxun.biz.IUserBiz;   
  14. import com.opensymphony.xwork2.ActionSupport;    
  15. public class OutAction extends ActionSupport implements ServletResponseAware{    
  16.     /**  
  17.      *   
  18.      */   
  19.     private static final long serialVersionUID = 1L;     
  20.     private IUserBiz biz ;   
  21.     public void setBiz(IUserBiz biz) {   
  22.         this.biz = biz;   
  23.     }   
  24.     private String format = "xls";   
  25.     private HttpServletResponse response;   
  26.     private String fileName;      
  27.     public String execute(){      
  28.         @SuppressWarnings("all")   
  29.         List la = biz.getAllSql();       
  30.         setResponseHeader();   
  31.         try {   
  32.             exportExcel(response.getOutputStream());   
  33.             response.getOutputStream().flush();   
  34.             response.getOutputStream().close();   
  35.         } catch (IOException e) {   
  36.             e.printStackTrace();   
  37.         }   
  38.         return null;   
  39.     }     
  40.     /** 设置响应头*/   
  41.     public void setResponseHeader(){   
  42.         try{   
  43. //          response.setContentType("application/msexcel;charset=UTF-8");  //两种方法都可以   
  44.             response.setContentType("application/octet-stream;charset=iso-8859-1");   
  45.             response.setHeader("Content-Disposition""p_w_upload;filename="   
  46.                     +java.net.URLEncoder.encode(this.fileName, "UTF-8"));   
  47.             //客户端不缓存   
  48.             response.addHeader("Pargam""no-cache");   
  49.             response.addHeader("Cache-Control""no-cache");   
  50.         }catch(Exception ex){   
  51.             ex.printStackTrace();   
  52.         }   
  53.     }     
  54.     /**导出数据*/   
  55.     private void exportExcel(OutputStream os) throws IOException{   
  56.         Workbook book = new HSSFWorkbook();   
  57.         Sheet sheet = book.createSheet("导出信息");   
  58.         Row row = sheet.createRow(0);   
  59.         row.createCell(0).setCellValue("编号");   
  60.         row.createCell(1).setCellValue("用户名");   
  61.         row.createCell(2).setCellValue("密码");   
  62.         row.createCell(3).setCellValue("真实姓名");   
  63.         row.createCell(4).setCellValue("地址");   
  64.         row.createCell(5).setCellValue("备注");   
  65.         CellStyle sty = book.createCellStyle();   
  66.         List<Userinfo> list = biz.getAll();   
  67.         for (int i = 1; i < list.size(); i++) {   
  68.             Userinfo user = list.get(i-1);   
  69.             row = sheet.createRow(i);   
  70.             row.createCell(0).setCellValue(user.getId());   
  71.             row.createCell(1).setCellValue(user.getName());   
  72.             row.createCell(2).setCellValue(user.getPass());   
  73.             row.createCell(3).setCellValue(user.getLastname());   
  74.             row.createCell(4).setCellValue(user.getAddres());   
  75.             row.createCell(5).setCellValue(user.getRemark());   
  76.         }   
  77.         try{   
  78.             book.write(os);   
  79.         }catch(Exception ex){   
  80.             ex.printStackTrace();   
  81.         }   
  82.     }    
  83.     public String getFormat() {   
  84.         return format;   
  85.     }   
  86.     public void setFormat(String format) {   
  87.         this.format = format;   
  88.         this.fileName = "导出数据.xls";   
  89.     }   
  90.     public String getFileName() {   
  91.         return fileName;   
  92.     }   
  93.     public void setFileName(String fileName) {   
  94.         this.fileName = fileName;   
  95.     }   
  96.     /**记住一定有该属性的set方法*/   
  97.     public void setServletResponse(HttpServletResponse response) {   
  98.         this.response = response;   
  99.     }   
  100. }   

我用的是sql语句导出、先从数据库把数据查询出来、在导出查询出来的数据。

我的Excel数据格式:

我在导入过程中碰到一个问题~~~就是在用户名和密码这一项的时候、不能够完全的写数字~~~

如果全部是Number(Integer或者int)类型那么在转换这一属性数据的时候就会出错~~~搞不懂! 必须要加上一个字符才能正确转换!

o(︶︿︶)o 唉!!!

 

 

---------------------------------------------2012-11-26更新------------------------------------------------

找到了、我在导入过程中碰到一个问题~~~就是在用户名和密码这一项的时候、不能够完全的写数字~~~

这个问题、很简单:在java代码中把该单元格设置成String类型

如我的Name跟Pass字段:

 
  
  1. HSSFCell cell1 = (HSSFCell) ros.getCell(1);    
  2. HSSFCell cell2 = (HSSFCell) ros.getCell(2);   
  3. cell1.setCellType(Cell.CELL_TYPE_STRING); //把该单元格设置成String类型   
  4. cell2.setCellType(Cell.CELL_TYPE_STRING); //把该单元格设置成String类型   
  5. user.setName(cell1.getStringCellValue());     
  6. user.setPass(cell2.getStringCellValue());