java的poi技术读取和导入Excel实例
程序员文章站
2024-03-11 13:25:01
报表输出是java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。java程序由于其跨平台特性,不能直接操纵excel。因此,本文探讨一下p...
报表输出是java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。java程序由于其跨平台特性,不能直接操纵excel。因此,本文探讨一下poi视线java程序进行excel的读取和导入。
项目结构:
java_poi_excel
用到的excel文件:
xls
xlsmain .java 类
//该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取excel(2003版) import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstream; import java.util.arraylist; import java.util.list; import org.apache.poi.hssf.usermodel.hssfcell; import org.apache.poi.hssf.usermodel.hssfrow; import org.apache.poi.hssf.usermodel.hssfsheet; import org.apache.poi.hssf.usermodel.hssfworkbook; /** * * @author hongten</br> * * */ public class xlsmain { public static void main(string[] args) throws ioexception { xlsmain xlsmain = new xlsmain(); xlsdto xls = null; list<xlsdto> list = xlsmain.readxls(); try { xlsdto2excel.xlsdto2excel(list); } catch (exception e) { e.printstacktrace(); } for (int i = 0; i < list.size(); i++) { xls = (xlsdto) list.get(i); system.out.println(xls.getxh() + " " + xls.getxm() + " " + xls.getyxsmc() + " " + xls.getkcm() + " " + xls.getcj()); } } /** * 读取xls文件内容 * * @return list<xlsdto>对象 * @throws ioexception * 输入/输出(i/o)异常 */ private list<xlsdto> readxls() throws ioexception { inputstream is = new fileinputstream("pldrxkxxmb.xls"); hssfworkbook hssfworkbook = new hssfworkbook(is); xlsdto xlsdto = null; list<xlsdto> list = new arraylist<xlsdto>(); // 循环工作表sheet for (int numsheet = 0; numsheet < hssfworkbook.getnumberofsheets(); numsheet++) { hssfsheet hssfsheet = hssfworkbook.getsheetat(numsheet); if (hssfsheet == null) { continue; } // 循环行row for (int rownum = 1; rownum <= hssfsheet.getlastrownum(); rownum++) { hssfrow hssfrow = hssfsheet.getrow(rownum); if (hssfrow == null) { continue; } xlsdto = new xlsdto(); // 循环列cell // 0学号 1姓名 2学院 3课程名 4 成绩 // for (int cellnum = 0; cellnum <=4; cellnum++) { hssfcell xh = hssfrow.getcell(0); if (xh == null) { continue; } xlsdto.setxh(getvalue(xh)); hssfcell xm = hssfrow.getcell(1); if (xm == null) { continue; } xlsdto.setxm(getvalue(xm)); hssfcell yxsmc = hssfrow.getcell(2); if (yxsmc == null) { continue; } xlsdto.setyxsmc(getvalue(yxsmc)); hssfcell kcm = hssfrow.getcell(3); if (kcm == null) { continue; } xlsdto.setkcm(getvalue(kcm)); hssfcell cj = hssfrow.getcell(4); if (cj == null) { continue; } xlsdto.setcj(float.parsefloat(getvalue(cj))); list.add(xlsdto); } } return list; } /** * 得到excel表中的值 * * @param hssfcell * excel中的每一个格子 * @return excel中每一个格子中的值 */ @suppresswarnings("static-access") private string getvalue(hssfcell hssfcell) { if (hssfcell.getcelltype() == hssfcell.cell_type_boolean) { // 返回布尔类型的值 return string.valueof(hssfcell.getbooleancellvalue()); } else if (hssfcell.getcelltype() == hssfcell.cell_type_numeric) { // 返回数值类型的值 return string.valueof(hssfcell.getnumericcellvalue()); } else { // 返回字符串类型的值 return string.valueof(hssfcell.getstringcellvalue()); } } }
xlsdto2excel.java类
//该类主要负责向excel(2003版)中插入数据 import java.io.fileoutputstream; import java.io.outputstream; import java.util.list; import org.apache.poi.hssf.usermodel.hssfcell; import org.apache.poi.hssf.usermodel.hssfrichtextstring; import org.apache.poi.hssf.usermodel.hssfrow; import org.apache.poi.hssf.usermodel.hssfsheet; import org.apache.poi.hssf.usermodel.hssfworkbook; public class xlsdto2excel { /** * * @param xls * xlsdto实体类的一个对象 * @throws exception * 在导入excel的过程中抛出异常 */ public static void xlsdto2excel(list<xlsdto> xls) throws exception { // 获取总列数 int countcolumnnum = xls.size(); // 创建excel文档 hssfworkbook hwb = new hssfworkbook(); xlsdto xlsdto = null; // sheet 对应一个工作页 hssfsheet sheet = hwb.createsheet("pldrxkxxmb"); hssfrow firstrow = sheet.createrow(0); // 下标为0的行开始 hssfcell[] firstcell = new hssfcell[countcolumnnum]; string[] names = new string[countcolumnnum]; names[0] = "学号"; names[1] = "姓名"; names[2] = "学院"; names[3] = "课程名"; names[4] = "成绩"; for (int j = 0; j < countcolumnnum; j++) { firstcell[j] = firstrow.createcell(j); firstcell[j].setcellvalue(new hssfrichtextstring(names[j])); } for (int i = 0; i < xls.size(); i++) { // 创建一行 hssfrow row = sheet.createrow(i + 1); // 得到要插入的每一条记录 xlsdto = xls.get(i); for (int colu = 0; colu <= 4; colu++) { // 在一行内循环 hssfcell xh = row.createcell(0); xh.setcellvalue(xlsdto.getxh()); hssfcell xm = row.createcell(1); xm.setcellvalue(xlsdto.getxm()); hssfcell yxsmc = row.createcell(2); yxsmc.setcellvalue(xlsdto.getyxsmc()); hssfcell kcm = row.createcell(3); kcm.setcellvalue(xlsdto.getkcm()); hssfcell cj = row.createcell(4); cj.setcellvalue(xlsdto.getcj()); (xlsdto.getmessage()); } } // 创建文件输出流,准备输出电子表格 outputstream out = new fileoutputstream("poi2excel/pldrxkxxmb.xls"); hwb.write(out); out.close(); system.out.println("数据库导出成功"); } }
xlsdto .java类
//该类是一个实体类 public class xlsdto { /** * 选课号 */ private integer xkh; /** * 学号 */ private string xh; /** * 姓名 */ private string xm; /** * 学院 */ private string yxsmc; /** * 课程号 */ private integer kch; /** * 课程名 */ private string kcm; /** * 成绩 */ private float cj; public integer getxkh() { return xkh; } public void setxkh(integer xkh) { this.xkh = xkh; } public string getxh() { return xh; } public void setxh(string xh) { this.xh = xh; } public string getxm() { return xm; } public void setxm(string xm) { this.xm = xm; } public string getyxsmc() { return yxsmc; } public void setyxsmc(string yxsmc) { this.yxsmc = yxsmc; } public integer getkch() { return kch; } public void setkch(integer kch) { this.kch = kch; } public string getkcm() { return kcm; } public void setkcm(string kcm) { this.kcm = kcm; } public float getcj() { return cj; } public void setcj(float cj) { this.cj = cj; } }
后台输出:
数据库导出成功
1.0 hongten 信息技术学院 计算机网络应用基础 80.0
2.0 王五 信息技术学院 计算机网络应用基础 81.0
3.0 李胜基 信息技术学院 计算机网络应用基础 82.0
4.0 五班古 信息技术学院 计算机网络应用基础 83.0
5.0 蔡诗芸 信息技术学院 计算机网络应用基础 84.0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。