利用Apache POI导入Excel。
HSSFWorkBook:操作2003版本以前的(包括2003版本),扩展名.xls,该类在org.apache.poi:poi中
XSSFWorkBook:操作2007版本以后的(包括2007版本),拓展名.xlsx,该类在org.apache.poi:poi-ooxml中
SXSSFWorkBook:对于海量的数据进行操作
对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。
org.apache.poi.openxml4j.exceptions.InvalidOperationException
org.apache.poi.poifs.filesystem.OfficeXmlFileException
HSSF对xls后缀名的Excel进行读取内容:
- 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;
- import org.apache.poi.poifs.filesystem.POIFSFileSystem;
- import org.apache.poi.ss.usermodel.CellStyle;
- import org.apache.poi.ss.usermodel.CellType;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- public class ReadExcelForHSSF {
- public void read() {
- File file = new File(".xls格式的表格路径");
- if (!file.exists())
- System.out.println("文件不存在");
- try {
- //1.读取Excel的对象
- POIFSFileSystem poifsFileSystem = new POIFSFileSystem(new FileInputStream(file));
- //2.Excel工作薄对象
- HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem);
- //3.Excel工作表对象
- HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
- //总行数
- int rowLength = hssfSheet.getLastRowNum()+1;
- //4.得到Excel工作表的行
- HSSFRow hssfRow = hssfSheet.getRow(0);
- //总列数
- int colLength = hssfRow.getLastCellNum();
- //得到Excel指定单元格中的内容
- HSSFCell hssfCell = hssfRow.getCell(0);
- //得到单元格样式
- CellStyle cellStyle = hssfCell.getCellStyle();
- for (int i = 0; i < rowLength; i++) {
- //获取Excel工作表的行
- HSSFRow hssfRow1 = hssfSheet.getRow(i);
- for (int j = 0; j < colLength; j++) {
- //获取指定单元格
- HSSFCell hssfCell1 = hssfRow1.getCell(j);
- //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常:
- //Cannot get a STRING value from a NUMERIC cell
- //将所有的需要读的Cell表格设置为String格式
- if (hssfCell1 != null) {
- hssfCell1.setCellType(CellType.STRING);
- }
- //获取每一列中的值
- System.out.print(hssfCell1.getStringCellValue() + "\t");
- }
- System.out.println();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new ReadExcelForHSSF().read();
- }
- }
XSSF对xlsx后缀名的Excel进行读取内容:
- import org.apache.poi.ss.usermodel.*;
- import java.io.*;
- public class ReadExcelForXSSF {
- public void read() {
- File file = new File(".xlsx格式的表格路径");
- InputStream inputStream = null;
- Workbook workbook = null;
- try {
- inputStream = new FileInputStream(file);
- workbook = WorkbookFactory.create(inputStream);
- inputStream.close();
- //工作表对象
- Sheet sheet = workbook.getSheetAt(0);
- //总行数
- int rowLength = sheet.getLastRowNum()+1;
- //工作表的列
- Row row = sheet.getRow(0);
- //总列数
- int colLength = row.getLastCellNum();
- //得到指定的单元格
- Cell cell = row.getCell(0);
- //得到单元格样式
- CellStyle cellStyle = cell.getCellStyle();
- System.out.println("行数:" + rowLength + ",列数:" + colLength);
- for (int i = 0; i < rowLength; i++) {
- row = sheet.getRow(i);
- for (int j = 0; j < colLength; j++) {
- cell = row.getCell(j);
- //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常:
- //Cannot get a STRING value from a NUMERIC cell
- //将所有的需要读的Cell表格设置为String格式
- if (cell != null)
- cell.setCellType(CellType.STRING);
- //对Excel进行修改
- if (i > 0 && j == 1)
- cell.setCellValue("1000");
- System.out.print(cell.getStringCellValue() + "\t");
- }
- System.out.println();
- }
- //将修改好的数据保存
- OutputStream out = new FileOutputStream(file);
- workbook.write(out);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new ReadExcelForXSSF().read();
- }
- }
- 备注:从excel里面读取日期为数字,解决方法.
- 如:43262.466099537 转换以后 2018-06-11 11:11:11
- //格式化日期
public static String toFormatDate(String kvalue) {
try {
System.err.println("date="+kvalue);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(Double.parseDouble(kvalue));
kvalue = sdf.format(date);
System.err.println("toFormatDate="+kvalue);
} catch (Exception e) {
System.err.println("toFormatDate====>"+e);
}
return kvalue;
}
如果你是湖南的 欢迎加入 湖南人在深圳-Java群:557651502