接下来介绍一下采用java操作excel的第三方框架:poi,对于poi,我想搞过批量导入、导出数据的博友都应该熟悉(当然啦,批量导入导出excel数据还有jxl,这里我就不介绍了!)。poi是apache jakarta项目的子项目,主要的用途在于提供一组用于操作windows 文档的java api,如操作word,excel,powerpoint等,详细介绍诸位博友可以看看其他的网络介绍。(其中,SSM版本的POI导入导出我也整理成了博文以及视频教程:教程地址: 欢迎支持!!)
本篇博文将介绍一下采用poi读写excel,为后续介绍的批量导入、导出excel数据做铺垫!
工欲善其事,必先利其器。首先,需要poi的Jar包,就一个而已,可以到官网下,也可以来我这里:poi操作excel需要的jar ,除此之外,就是需要对excel的基本一些知识需要有所了解,如sheet,row,cell等概念。最后需要明确一点:先有excel文件(工作簿),再有sheet,再有row,最后才有cell,明确了这一点,其实在操作excel上已经迈出了第一步!
废话不多说,直接上代码吧,代码中我已经有所注释,如果需要扩展功能,可以去查看poi的相关api,或者去网上下载一些pdf、word文档来瞧瞧。我找了一篇,没全看完,但是觉得还行,可以来我这里下载:java之poi操作excel实战文档
下面是我建立的jar project的总体图:这里,我只介绍ExcelRead和ExcelWrite,即excel读写操作。
下面是ExcelWrite:
package com.poi.second;import java.io.FileOutputStream;
import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
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.ss.usermodel.CreationHelper;/*** 写excel* @author 钟林森**/
public class ExcelWrite {public static void main(String[] args) throws Exception{//创建一个工作簿 即excel文件,再在该文件中创建一个sheetHSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheetateSheet("第一个sheet");//在sheet中创建一行HSSFRow rowateRow(0);//在该行写入各种类型的数据ateCell(0).setCellValue(true);ateCell(1).setCellValue("钟林森");ateCell(2).setCellValue(23);//设置保留两位小数HSSFCell cellateCell(3);cell.setCellValue(6000);HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.BuiltinFormat("0.00"));cell.setCellStyle(cellStyle);//在写入 日期格式的 数据需要进行特殊处理(这是一种 简单的处理方式)CreationHelper createHelperCreationHelper();HSSFCellStyle styleateCellStyle();style.ateDataFormat().getFormat("yyyy-MM-dd"));cellateCell(4);cell.setCellValue(new Date());cell.setCellStyle(style);//最后写回磁盘FileOutputStream out=new FileOutputStream("E:\java_BasicWeb\someFiles\excel写数据.xls");wb.write(out);out.close();System.out.println("写完了!");}
}
我们看写回磁盘的那个 “excel写数据.xls”文件:
打开来看一下:成功写入
接下来,我们来读取excel文件,刚刚写入的那个磁盘的“excel读数据.xls”,打开先来看一下:
我们目的是读取这两行数据,放到控制台来瞧瞧(其实也可以写到数据库或者另外一个excel文件中: 然后你会发现其实这就是 批量导入、导出的雏形)
上代码ExcelRead:
package com.poi.second;import java.io.FileInputStream;
import java.io.InputStream;
SimpleDateFormat;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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;/*** 读excel* @author 钟林森**/
public class ExcelRead {public static void main(String[] args) throws Exception {//读取一个excel表的内容InputStream stream = new FileInputStream("E:\java_BasicWeb\someFiles\excel读数据.xls");POIFSFileSystem fs = new POIFSFileSystem(stream);HSSFWorkbook wb = new HSSFWorkbook(fs);//获取excel表的第一个sheetHSSFSheet sheet = wb.getSheetAt(0);if (sheet == null) {return;}//遍历该sheet的行for (int rowNum = 0; rowNum <= LastRowNum(); rowNum++) {HSSFRow row = Row(rowNum);if (row == null) {continue;}//再遍历改行的所有列for(int cellNum = 0; cellNum <= LastCellNum(); cellNum++) {HSSFCell cell = Cell(cellNum);if (cell == null) {continue;}String strVal=readCellSecondMethod(cell);if (cellNum==2) {strValains(".")?strVal.substring(0, strVal.indexOf(".")):strVal;}System.out.print(" " + strVal);//System.out.print(" " + readCellFirstMethod(cell));//System.out.print(" " + readCellSecondMethod(cell));}System.out.println();}stream.close();}/**第一种方法* 读取excel单元格的内容并针对其type进行不同的处理,* 其中就包含 读取excel表格中日期格式的cell* @param cell* @return*/public static String readCellFirstMethod(HSSFCell cell) {if (CellType() == HSSFCell.CELL_TYPE_BOOLEAN) {return String.BooleanCellValue());} else if (CellType() == HSSFCell.CELL_TYPE_NUMERIC) {if (HSSFDateUtil.isCellDateFormatted(cell)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.NumericCellValue())).toString();}return String.NumericCellValue());} else {StringCellValue();}}/**第二种方法* 读取excel单元格的内容并针对其type进行不同的处理,* 其中就包含 读取excel表格中日期格式的cell* @param cell* @return*/public static String readCellSecondMethod(HSSFCell cell) {//DecimalFormat df = new DecimalFormat("#");if (cell == null) {return "";}switch (CellType()) {//数字case HSSFCell.CELL_TYPE_NUMERIC://日期格式的处理if (HSSFDateUtil.isCellDateFormatted(cell)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.NumericCellValue())).toString();}return String.NumericCellValue());//return df.NumericCellValue());//字符串case HSSFCell.CELL_TYPE_STRING:StringCellValue();//公式case HSSFCell.CELL_TYPE_FORMULA:CellFormula();//空白case HSSFCell.CELL_TYPE_BLANK:return "";//布尔取值case HSSFCell.CELL_TYPE_BOOLEAN:BooleanCellValue() + "";//错误类型case HSSFCell.CELL_TYPE_ERROR:ErrorCellValue() + "";}return "";}}
看控制台:
好了,就介绍到这里吧,接下来,将写一个poi操作excel之批量导入、批量导出功能(包括模板文件的导入、导出功能),个人QQ:1948831260
本文发布于:2024-02-04 13:43:11,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170708560256083.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |