本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下。
报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。Java程序由于其跨平台特性,不能直接操纵Excel。因此,本文探讨一下POI视线Java程序进行Excel的读取和导入。
项目结构:
java_poi_excel
用到的Excel文件:
xls
XlsMain .java 类
1 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import org.apache.poi.hssf.usermodel.HSSFCell; 10 import org.apache.poi.hssf.usermodel.HSSFRow; 11 import org.apache.poi.hssf.usermodel.HSSFSheet; 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 14 15 /** 16 * 17 * @author Hongten</br> 18 * 19 * 20 */ 21 public class XlsMain { 22 23 public static void main(String[] args) throws IOException { 24 XlsMain xlsMain = new XlsMain(); 25 XlsDto xls = null; 26 List<XlsDto> list = xlsMain.readXls(); 27 28 try { 29 XlsDto2Excel.xlsDto2Excel(list); 30 } catch (Exception e) { 31 e.printStackTrace(); 32 } 33 for (int i = 0; i < list.size(); i++) { 34 xls = (XlsDto) list.get(i); 35 System.out.println(xls.getXh() + " " + xls.getXm() + " " 36 + xls.getYxsmc() + " " + xls.getKcm() + " " 37 + xls.getCj()); 38 } 39 40 } 41 42 /** 43 * 读取xls文件内容 44 * 45 * @return List<XlsDto>对象 46 * @throws IOException 47 * 输入/输出(i/o)异常 48 */ 49 private List<XlsDto> readXls() throws IOException { 50 InputStream is = new FileInputStream("pldrxkxxmb.xls"); 51 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); 52 XlsDto xlsDto = null; 53 List<XlsDto> list = new ArrayList<XlsDto>(); 54 // 循环工作表Sheet 55 for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { 56 HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); 57 if (hssfSheet == null) { 58 continue; 59 } 60 // 循环行Row 61 for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { 62 HSSFRow hssfRow = hssfSheet.getRow(rowNum); 63 if (hssfRow == null) { 64 continue; 65 } 66 xlsDto = new XlsDto(); 67 // 循环列Cell 68 // 0学号 1姓名 2学院 3课程名 4 成绩 69 // for (int cellNum = 0; cellNum <=4; cellNum++) { 70 HSSFCell xh = hssfRow.getCell(0); 71 if (xh == null) { 72 continue; 73 } 74 xlsDto.setXh(getValue(xh)); 75 HSSFCell xm = hssfRow.getCell(1); 76 if (xm == null) { 77 continue; 78 } 79 xlsDto.setXm(getValue(xm)); 80 HSSFCell yxsmc = hssfRow.getCell(2); 81 if (yxsmc == null) { 82 continue; 83 } 84 xlsDto.setYxsmc(getValue(yxsmc)); 85 HSSFCell kcm = hssfRow.getCell(3); 86 if (kcm == null) { 87 continue; 88 } 89 xlsDto.setKcm(getValue(kcm)); 90 HSSFCell cj = hssfRow.getCell(4); 91 if (cj == null) { 92 continue; 93 } 94 xlsDto.setCj(Float.parseFloat(getValue(cj))); 95 list.add(xlsDto); 96 } 97 } 98 return list; 99 } 100 101 /** 102 * 得到Excel表中的值 103 * 104 * @param hssfCell 105 * Excel中的每一个格子 106 * @return Excel中每一个格子中的值 107 */ 108 @SuppressWarnings("static-access") 109 private String getValue(HSSFCell hssfCell) { 110 if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { 111 // 返回布尔类型的值 112 return String.valueOf(hssfCell.getBooleanCellValue()); 113 } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { 114 // 返回数值类型的值 115 return String.valueOf(hssfCell.getNumericCellValue()); 116 } else { 117 // 返回字符串类型的值 118 return String.valueOf(hssfCell.getStringCellValue()); 119 } 120 } 121 122 }
XlsDto2Excel.java类
1 //该类主要负责向Excel(2003版)中插入数据 2 3 import java.io.FileOutputStream; 4 import java.io.OutputStream; 5 import java.util.List; 6 7 import org.apache.poi.hssf.usermodel.HSSFCell; 8 import org.apache.poi.hssf.usermodel.HSSFRichTextString; 9 import org.apache.poi.hssf.usermodel.HSSFRow; 10 import org.apache.poi.hssf.usermodel.HSSFSheet; 11 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 12 13 14 public class XlsDto2Excel { 15 16 /** 17 * 18 * @param xls 19 * XlsDto实体类的一个对象 20 * @throws Exception 21 * 在导入Excel的过程中抛出异常 22 */ 23 public static void xlsDto2Excel(List<XlsDto> xls) throws Exception { 24 // 获取总列数 25 int CountColumnNum = xls.size(); 26 // 创建Excel文档 27 HSSFWorkbook hwb = new HSSFWorkbook(); 28 XlsDto xlsDto = null; 29 // sheet 对应一个工作页 30 HSSFSheet sheet = hwb.createSheet("pldrxkxxmb"); 31 HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始 32 HSSFCell[] firstcell = new HSSFCell[CountColumnNum]; 33 String[] names = new String[CountColumnNum]; 34 names[0] = "学号"; 35 names[1] = "姓名"; 36 names[2] = "学院"; 37 names[3] = "课程名"; 38 names[4] = "成绩"; 39 for (int j = 0; j < CountColumnNum; j++) { 40 firstcell[j] = firstrow.createCell(j); 41 firstcell[j].setCellValue(new HSSFRichTextString(names[j])); 42 } 43 for (int i = 0; i < xls.size(); i++) { 44 // 创建一行 45 HSSFRow row = sheet.createRow(i + 1); 46 // 得到要插入的每一条记录 47 xlsDto = xls.get(i); 48 for (int colu = 0; colu <= 4; colu++) { 49 // 在一行内循环 50 HSSFCell xh = row.createCell(0); 51 xh.setCellValue(xlsDto.getXh()); 52 HSSFCell xm = row.createCell(1); 53 xm.setCellValue(xlsDto.getXm()); 54 HSSFCell yxsmc = row.createCell(2); 55 yxsmc.setCellValue(xlsDto.getYxsmc()); 56 HSSFCell kcm = row.createCell(3); 57 kcm.setCellValue(xlsDto.getKcm()); 58 HSSFCell cj = row.createCell(4); 59 cj.setCellValue(xlsDto.getCj()); 60 (xlsDto.getMessage()); 61 } 62 } 63 // 创建文件输出流,准备输出电子表格 64 OutputStream out = new FileOutputStream("POI2Excel/pldrxkxxmb.xls"); 65 hwb.write(out); 66 out.close(); 67 System.out.println("数据库导出成功"); 68 } 69 70 }
XlsDto .java类
1 //该类是一个实体类 2 3 public class XlsDto { 4 /** 5 * 选课号 6 */ 7 private Integer xkh; 8 /** 9 * 学号 10 */ 11 private String xh; 12 /** 13 * 姓名 14 */ 15 private String xm; 16 /** 17 * 学院 18 */ 19 private String yxsmc; 20 /** 21 * 课程号 22 */ 23 private Integer kch; 24 /** 25 * 课程名 26 */ 27 private String kcm; 28 /** 29 * 成绩 30 */ 31 private float cj; 32 public Integer getXkh() { 33 return xkh; 34 } 35 public void setXkh(Integer xkh) { 36 this.xkh = xkh; 37 } 38 public String getXh() { 39 return xh; 40 } 41 public void setXh(String xh) { 42 this.xh = xh; 43 } 44 public String getXm() { 45 return xm; 46 } 47 public void setXm(String xm) { 48 this.xm = xm; 49 } 50 public String getYxsmc() { 51 return yxsmc; 52 } 53 public void setYxsmc(String yxsmc) { 54 this.yxsmc = yxsmc; 55 } 56 public Integer getKch() { 57 return kch; 58 } 59 public void setKch(Integer kch) { 60 this.kch = kch; 61 } 62 public String getKcm() { 63 return kcm; 64 } 65 public void setKcm(String kcm) { 66 this.kcm = kcm; 67 } 68 public float getCj() { 69 return cj; 70 } 71 public void setCj(float cj) { 72 this.cj = cj; 73 } 74 75 }
后台输出:
数据库导出成功
1.0 hongten 信息技术学院 计算机网络应用基础 80.0
2.0 王五 信息技术学院 计算机网络应用基础 81.0
3.0 李胜基 信息技术学院 计算机网络应用基础 82.0
4.0 五班古 信息技术学院 计算机网络应用基础 83.0
5.0 蔡诗芸 信息技术学院 计算机网络应用基础 84.0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多关注我的博客。
微信扫码,欢迎关注微信公众账号,更多精彩~
手机扫码加入QQ群,欢迎你~