文档章节

java poi 导入excel

JohnnyFu
 JohnnyFu
发布于 2014/11/21 14:29
字数 771
阅读 195
收藏 16

所需jar包    poi

package example.poi;
import java.io.*;
import java.text.DecimalFormat;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class ImportExcel {
 
 private Workbook wb = null;
 private Sheet sheet = null;
 private Row row = null;
 private int sheetNum = 0;
 private int rowNum = 0;
 private FileInputStream fis = null;
 private File file = null;
 private DecimalFormat df = new DecimalFormat("0");
 public ImportExcel() {
  super();
 }
 public void setSheetNum(int sheetNum) {
  this.sheetNum = sheetNum;
 }
 public void setRowNum(int rowNum) {
  this.rowNum = rowNum;
 }
 public void setFile(File file) {
  this.file = file;
 }
 /**
  * 读取excel文件获得HSSFWorkbook对象
  * @throws IOException
  */
 public void open(String filePath) throws IOException {
  if(validateExcel(filePath)) {
   file = new File(filePath);
   fis = new FileInputStream(file);
   if(isExcel2003(filePath)) {
    wb = new HSSFWorkbook(fis);
   } else {
    wb = new XSSFWorkbook(fis);
   }
   fis.close();
  }
 }
 
 /**
  * 获取sheet表数目
  * @return sheet表数目
  */
 public int getSheetCount() {
  int sheetCount = -1;
  sheetCount = wb.getNumberOfSheets();
  return sheetCount;
 }
 
 /**
  * 获取sheetNum下的记录行数
  * @return 记录行数
  */
 public int getRowCount() {
  if(wb == null) {
   System.err.println("----------->WorkBook为空");
  }
  Sheet sheet = wb.getSheetAt(this.sheetNum);
  int rowCount = -1;
  rowCount = sheet.getLastRowNum();
  return rowCount;
 }
 
 /**
  * 获取指定sheetNum的记录行数
  * @param sheetNum 表编号
  * @return 记录行数
  */
 public int getRowCount(int sheetNum) {
  Sheet sheet = wb.getSheetAt(sheetNum);
  int rowCount = -1;
  rowCount = sheet.getLastRowNum();
  return rowCount;
 }
 
 /**
  * 得到指定行的内容
  * @param lineNum 行数
  * @return 内容
  */
 public String[] readExcelLine(int lineNum) {
  return readExcelLine(this.sheetNum, lineNum);
 }
 
 /**
  * 获取指定工作表和行数的内容
  * @param sheetNum 表编号
  * @param lineNum 行数
  * @return 内容
  */
 public String[] readExcelLine(int sheetNum, int lineNum) {
  if(sheetNum < 0 || lineNum < 0) {
   return null;
  }
  String[] strExcelLine = null;
  try {
   sheet = wb.getSheetAt(sheetNum);
   row = sheet.getRow(lineNum);
   
   int cellCount = row.getLastCellNum();
   strExcelLine = new String[cellCount + 1];
   for(int i = 0; i <= cellCount; i++) {
    strExcelLine[i] = readStringExcelCell(lineNum, i);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return strExcelLine;
 }
 
 /**
  * 获取指定列的内容
  * @param cellNum 列编号
  * @return 内容
  */
 public String readStringExcelCell(int cellNum) {
  return readStringExcelCell(this.rowNum, cellNum);
 }
 
 /**
  * 获取指定行和列编号的内容
  * @param rowNum 行编号
  * @param cellNum 列编号
  * @return 内容
  */
 public String readStringExcelCell(int rowNum, int cellNum) {
  return readStringExcelCell(this.sheetNum, rowNum, cellNum);
 }
 
 /**
  * 获取指定工作表、行、列的内容
  * @param sheetNum 表编号
  * @param rowNum 行编号
  * @param cellNum 列编号
  * @return 内容
  */
 public String readStringExcelCell(int sheetNum, int rowNum, int cellNum) {
  if(sheetNum < 0 || rowNum < 0) {
   return "";
  }
  String strExcelCell = "";
  try {
   sheet = wb.getSheetAt(sheetNum);
   row = sheet.getRow(rowNum);
   
   if(row.getCell(cellNum) != null) {
    switch(row.getCell(cellNum).getCellType()) {
    case HSSFCell.CELL_TYPE_FORMULA:
     strExcelCell = "FORMULA";
     break;
    case HSSFCell.CELL_TYPE_NUMERIC:
     //strExcelCell = String.valueOf(row.getCell(cellNum).getNumericCellValue());
     //防止科学计数,不需要的话可以用上一行
     strExcelCell = decimalFormat(row.getCell(cellNum).getNumericCellValue());
     break;
    case HSSFCell.CELL_TYPE_STRING:
     strExcelCell = row.getCell(cellNum).getStringCellValue();
     break;
    case HSSFCell.CELL_TYPE_BLANK:
     strExcelCell = "";
     break;
    default:
     strExcelCell = "";
     break;
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return strExcelCell;
 }
 
 /**
  * 测试
  * @param args
  */
 public static void main(String[] args) {
  String filePath = "C:\\Users\\Administrator\\Desktop\\工作簿1.xlsx";
  ImportExcel ie = new ImportExcel();
  try {
   ie.open(filePath);
  } catch (IOException e) {
   e.printStackTrace();
  }
  ie.setSheetNum(0);
  int count = ie.getRowCount();
  for (int i = 0; i <= count; i++) {
   String[] rows = ie.readExcelLine(i);
   for (int j = 0; j < rows.length; j++) {
    System.out.print(rows[j] + " ");
   }
   System.out.print("\n");
  }
 }
 
 /**
  * 验证文件是否存在以及是否是excel文件
  * @param filePath
  * @return 结果
  */
 public boolean validateExcel(String filePath) {
  if(filePath == null || ! (isExcel2003(filePath) || isExcel2007(filePath))) {
   System.err.println("文件不是excel文件!");
   return false;
  }
  File file = new File(filePath);
  if(file == null || ! file.exists()) {
   System.err.println("文件不存在!");
   return false;
  }
  return true;
 }
 
 /**
  * 判断是否是2003版excel
  * @param filePath 文件路径
  * @return 结果
  */
 public boolean isExcel2003(String filePath) {
  return filePath.matches("^.+\\.(?i)(xls)$");
 }
 
 /**
  * 判断是否是2007版excel
  * @param filePath 文件路径
  * @return 结果
  */
 public boolean isExcel2007(String filePath) {
  return filePath.matches("^.+\\.(?i)(xlsx)$");
 }
 
 /**
  * 将获取到的数据类型转换成String防止科学计数法
  * @param decimal 数据
  * @return 结果
  */
 public String decimalFormat(Double decimal) {
  return df.format(decimal);
 }
}

内容摘自:

    java读取excel    http://java解析获取Excel中的数据--同时兼容2003及2007

© 著作权归作者所有

JohnnyFu
粉丝 3
博文 14
码字总数 3920
作品 0
塘沽
程序员
私信 提问
Java读取Excel数据:基于Apache POI(一)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/85302347 Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Exc...

zhangphil
2018/12/27
0
0
Java Apache POI 操作 Excel 导出

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82655653 Java Apache POI 操作 Excel 导出 Java 可以通过 Apache POI......

asing1elife
2018/09/12
0
0
XXL-EXCEL v1.1.0 发布,Java 对象和 Excel 转换工具

XXL-EXCEL v1.1.0 发布,新特性如下: 1、字段支持Date类型。至此,已经支持全部基础数据类型。 2、Java转换Excel时,字段类型改为从Field上读取,避免Value为空时空指针问题。 3、升级POI至...

许雪里
2017/12/15
733
5
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0
java excel 的POI导入

Excel导入: 使用apache 的POI进行excel的导入, 1. pom.xml中添加依赖 commons-fileupload commons-fileupload 1.3.2 org.apache.poi poi-oox...

u010398771
2018/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
33分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
34分钟前
4
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
36分钟前
5
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
46分钟前
3
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部