欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java的poi技术读取和导入Excel实例

程序员文章站 2024-03-11 13:25:01
报表输出是java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。java程序由于其跨平台特性,不能直接操纵excel。因此,本文探讨一下p...

报表输出是java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。java程序由于其跨平台特性,不能直接操纵excel。因此,本文探讨一下poi视线java程序进行excel的读取和导入。

项目结构:
java_poi_excel
java的poi技术读取和导入Excel实例
用到的excel文件:
xls
java的poi技术读取和导入Excel实例

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。