Java读写Excel之POI入门
JavaPOI读取excel支持xls、xlsx

JavaPOI读取excel支持xls、xlsxJava POI读取excel 支持xls、xlsximport java.io.File;import java.io.FileInputStream;import java .util.List;import ermodel.HSSFPicture;import o ermodel.HSSFPictureData;import org.apach ermodel.HSSFShape;import er model.HSSFSheet;import ermodel.HSSFW orkbook;import ermodel.Cell;import org.ap ermodel.DateUtil;import ermo del.Row;public final class T estImportExcel {public static void main(String[] args) throws Exception {File excelFile = new File("test.xls"); HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(excelFile)); HSS FSheet sheet = wb.getSheetAt(0);for (Row row : sheet) { for (Cell cell : row) { s witch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: System.out.print(cell.getRichStringCellValue().getString());break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) {System.out.print(String.valueOf(cell.getDateCellValue()));} else {System.out.print(cell.getNumericCellValue());} break; case Cell.CELL_TYPE_BOOLEAN: System.out.print(cell.getBooleanCellValue()); bre ak; default:}}System.out.println();}//读取图片List<HSSFPictureData> pictures = wb.getAllPictures();for (HSSFShape shape : sheet.getDrawingPatriarch().getChil dren()) {if (shape instanceof HSSFPicture) { HSSFPicture pic = (HSSFPicture) shape;int pictureIndex = pic.getPictureIndex()-1;HSSFPictureData picData = pictures.get(pictureIndex);System.out.println("image-size:" + picData.getData().length);}}System.out.println(wb.getSheetName(0));}}。
java使用POI读取excel数据

java使⽤POI读取excel数据⼀、定义 Apache POI是Apache软件基⾦会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
⼆、所需jar包:三、简单的⼀个读取excel的demo1、读取⽂件⽅法/*** 读取出filePath中的所有数据信息* @param filePath excel⽂件的绝对路径**/public static void getDataFromExcel(String filePath){//String filePath = "E:\\123.xlsx";//判断是否为excel类型⽂件if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx")){System.out.println("⽂件不是excel类型");}FileInputStream fis =null;Workbook wookbook = null;try{//获取⼀个绝对地址的流fis = new FileInputStream(filePath);}catch(Exception e){e.printStackTrace();}try{//2003版本的excel,⽤.xls结尾wookbook = new HSSFWorkbook(fis);//得到⼯作簿}catch (Exception ex){//ex.printStackTrace();try{//2007版本的excel,⽤.xlsx结尾wookbook = new XSSFWorkbook(fis);//得到⼯作簿} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}//得到⼀个⼯作表Sheet sheet = wookbook.getSheetAt(0);//获得表头Row rowHead = sheet.getRow(0);//判断表头是否正确if(rowHead.getPhysicalNumberOfCells() != 3){System.out.println("表头的数量不对!");}//获得数据的总⾏数int totalRowNum = sheet.getLastRowNum();//要获得属性String name = "";int latitude = 0;//获得所有数据for(int i = 1 ; i <= totalRowNum ; i++){//获得第i⾏对象Row row = sheet.getRow(i);//获得获得第i⾏第0列的 String类型对象Cell cell = row.getCell((short)0);name = cell.getStringCellValue().toString();//获得⼀个数字类型的数据cell = row.getCell((short)1);latitude = (int) cell.getNumericCellValue();System.out.println("名字:"+name+",经纬度:"+latitude); }}2、测试public static void main(String[] args){getDataFromExcel("E:"+ File.separator +"123.xlsx");}3、原始数据4、结果名字:A1,经纬度:1名字:A2,经纬度:2名字:A3,经纬度:3名字:A4,经纬度:4名字:A5,经纬度:5名字:A6,经纬度:6名字:A7,经纬度:7名字:A8,经纬度:8名字:A9,经纬度:9名字:A10,经纬度:10名字:A11,经纬度:11。
java的POI操作Excel文件

java的POI操作Excel文件(2)现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。
1、设置分页符的bugPOI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。
Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。
解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。
如果sheet是由POI生成的则没有这个问题。
我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。
2、如何拷贝行我在的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写://注:this.fWorkbook是一个HSSHWorkbook,请自行在外部newpublic void copyRows(String pSourceSheetName,String pTargetSheetName,int pStartRow, int pEndRow,int pPosition){HSSFRow sourceRow = null;HSSFRow targetRow = null;HSSFCell sourceCell = null;HSSFCell targetCell = null;HSSFSheet sourceSheet = null;HSSFSheet targetSheet = null;Region region = null;int cType;int i;short j;int targetRowFrom;int targetRowTo;if ((pStartRow == -1) || (pEndRow == -1)){return;}sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);targetSheet = this.fWorkbook.getSheet(pTargetSheetName);//拷贝合并的单元格for (i = 0; i < sourceSheet.getNumMergedRegions(); i++){region = sourceSheet.getMergedRegionAt(i);if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow)) {targetRowFrom = region.getRowFrom() - pStartRow + pPosition; targetRowTo = region.getRowTo() - pStartRow + pPosition;region.setRowFrom(targetRowFrom);region.setRowTo(targetRowTo);targetSheet.addMergedRegion(region);}}//设置列宽for (i = pStartRow; i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow != null){for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++) {targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));}break;}}//拷贝行并填充数据for (;i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow == null){continue;}targetRow = targetSheet.createRow(i - pStartRow + pPosition);targetRow.setHeight(sourceRow.getHeight());for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)sourceCell = sourceRow.getCell(j);if (sourceCell == null){continue;}targetCell = targetRow.createCell(j);targetCell.setEncoding(sourceCell.getEncoding());targetCell.setCellStyle(sourceCell.getCellStyle());cType = sourceCell.getCellType();targetCell.setCellType(cType);switch (cType){case HSSFCell.CELL_TYPE_BOOLEAN:targetCell.setCellValue(sourceCell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_ERROR:targetCell.setCellErrorV alue(sourceCell.getErrorCellValue());break;case HSSFCell.CELL_TYPE_FORMULA://parseFormula这个函数的用途在后面说明targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));break;case HSSFCell.CELL_TYPE_NUMERIC:targetCell.setCellValue(sourceCell.getNumericCellV alue());break;case HSSFCell.CELL_TYPE_STRING:targetCell.setCellValue(sourceCell.getStringCellValue());break;}}}}这个函数有两个问题暂时无法解决:a、只能在同一个Workbook里面使用,跨Workbook总是拷不过去,不知道为什么?b、由于在拷贝行时也把行高也拷过去了,如果往这些单元格里写入的数据长度超过单元格长度,那么他们不会自动调整行高!3、公式的问题POI对Excel公式的支持是相当好的,但是我发现一个问题,如果公式里面的函数不带参数,比如now()或today(),那么你通过getCellFormula()取出来的值就是now(ATTR(semiV olatile))和today(ATTR(semiV olatile)),这样的值写入Excel是会出错的,这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因,parseFormula这个函数的功能很简单,就是把ATTR(semiVolatile)删掉,我把它的代码贴出来:private String parseFormula(String pPOIFormula){final String cstReplaceString = "ATTR(semiV olatile)"; //$NON-NLS-1$StringBuffer result = null;int index;result = new StringBuffer();index = pPOIFormula.indexOf(cstReplaceString);if (index >= 0){result.append(pPOIFormula.substring(0, index));result.append(pPOIFormula.substring(index + cstReplaceString.length()));}else{result.append(pPOIFormula);}return result.toString();}至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!4、向Excel写入图片的问题。
java获取excel文件内容的方法

一、介绍在开发过程中,我们经常会遇到需要读取Excel文件内容的情况。
而Java作为一种广泛应用的编程语言,具有丰富的库和功能,使得它成为一种很好的选择。
本文将介绍如何使用Java来获取Excel文件的内容,并将分为以下几个部分来进行讲解。
二、使用POI库进行Excel文件操作POI(Poor Obfuscation Implementation)是Apache基金会的一个开源项目,它为Java程序提供了读取和写入Microsoft Office格式文件的功能。
具体来说,POI库中的HSSF模块可以用于读取和操作Excel文件。
以下是使用POI库进行Excel文件操作的步骤。
1. 引入POI库首先需要引入POI库的相关依赖。
可以通过Maven来引入POI库,添加以下依赖到项目的pom.xml文件中即可:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```2. 读取Excel文件接下来,我们可以通过POI库的相关类来读取Excel文件。
首先需要创建一个文件输入流来读取Excel文件,然后通过HSSFWorkbook类来加载文件内容,最后可以通过遍历的方式获取Excel文件的内容。
以下是一个简单的示例:```javaFileInputStream file = new FileInputStream("example.xls"); HSSFWorkbook workbook = new HSSFWorkbook(file); HSSFSheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {for (Cell cell : row) {// 处理单元格的内容}}```3. 处理Excel文件内容在读取Excel文件内容后,我们可以通过POI库提供的类来处理Excel 文件的内容,比如获取单元格的值、设置单元格的值等操作。
Java使用POI读取和写入Excel指南(转)

Java使⽤POI读取和写⼊Excel指南(转)做项⽬时经常有通过程序读取Excel数据,或是创建新的Excel并写⼊数据的需求;⽹上很多经验教程⾥使⽤的POI版本都⽐较⽼了,⼀些API在新版⾥已经废弃,这⾥基于最新的Apache POI 4.0.1版本来总结⼀下整个读取和写⼊Excel的过程,希望能帮助到需要的⼈ ^_^1. 准备⼯作1.1 在项⽬中引⼊Apache POI相关类库引⼊ Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency>2. 读取或写⼊Excel数据2.1 ⽰例程序结构说明简单说明⼀下⽰例程序的整体结构:ExcelReader.java是实现读取Excel数据功能的类;ExcelWriter.java是创建新的Excel并向其中写⼊数据的类;ExcelDataVO.java封装了读取或写⼊时每⼀“⾏”的数据;MainTest.java是⽰例程序的⼊⼝类,其中演⽰了读取和写⼊Excel数据的整个过程;2.2 读取数据⽰例程序需要从桌⾯读取 readExample.xlsx 内的数据,readExample.xlsx 的内容如下:读取Excel时主要调⽤ExcelReader.java类来读取和解析Excel的具体内容,这⾥以读取系统⽂件的形式演⽰读取过程:(兼容 xls 和 xlsx)2.2.1 主程序⼊⼝类代码:/*** Author: Dreamer-1* Date: 2019-03-01* Time: 10:13* Description: ⽰例程序⼊⼝类*/public class MainTest {public static void main(String[] args) {// 设定Excel⽂件所在路径String excelFileName = "/Users/Dreamer-1/Desktop/myBlog/java解析Excel/readExample.xlsx";// 读取Excel⽂件内容List<ExcelDataVO> readResult = ExcelReader.readExcel(excelFileName);// todo 进⾏业务操作}}读取和写⼊时封装每⼀“⾏”数据的ExcelDataVO.java代码如下:/*** Author: Dreamer-1* Date: 2019-03-01* Time: 11:33* Description: 读取Excel时,封装读取的每⼀⾏的数据*/public class ExcelDataVO {/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 居住地*/private String location;/*** 职业*/private String job;public String getName() {return name;}public void setName(String name) { = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}}2.2.2 Excel解析类的代码:/*** Author: Dreamer-1* Date: 2019-03-01* Time: 10:21* Description: 读取Excel内容*/public class ExcelReader {private static Logger logger = Logger.getLogger(ExcelReader.class.getName()); // ⽇志打印类private static final String XLS = "xls";private static final String XLSX = "xlsx";/*** 根据⽂件后缀名类型获取对应的⼯作簿对象* @param inputStream 读取⽂件的输⼊流* @param fileType ⽂件后缀名类型(xls或xlsx)* @return 包含⽂件数据的⼯作簿对象* @throws IOException*/public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException { Workbook workbook = null;if (fileType.equalsIgnoreCase(XLS)) {workbook = new HSSFWorkbook(inputStream);} else if (fileType.equalsIgnoreCase(XLSX)) {workbook = new XSSFWorkbook(inputStream);}return workbook;}/*** 读取Excel⽂件内容* @param fileName 要读取的Excel⽂件所在路径* @return 读取结果列表,读取失败时返回null*/public static List<ExcelDataVO> readExcel(String fileName) {Workbook workbook = null;FileInputStream inputStream = null;try {// 获取Excel后缀名String fileType = fileName.substring(stIndexOf(".") + 1, fileName.length());// 获取Excel⽂件File excelFile = new File(fileName);if (!excelFile.exists()) {logger.warning("指定的Excel⽂件不存在!");return null;}// 获取Excel⼯作簿inputStream = new FileInputStream(excelFile);workbook = getWorkbook(inputStream, fileType);// 读取excel中的数据List<ExcelDataVO> resultDataList = parseExcel(workbook);return resultDataList;} catch (Exception e) {logger.warning("解析Excel失败,⽂件名:" + fileName + " 错误信息:" + e.getMessage());return null;} finally {try {if (null != workbook) {workbook.close();}if (null != inputStream) {inputStream.close();}} catch (Exception e) {logger.warning("关闭数据流出错!错误信息:" + e.getMessage());return null;}}}/*** 解析Excel数据* @param workbook Excel⼯作簿对象* @return 解析结果*/private static List<ExcelDataVO> parseExcel(Workbook workbook) {List<ExcelDataVO> resultDataList = new ArrayList<>();// 解析sheetfor (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {Sheet sheet = workbook.getSheetAt(sheetNum);// 校验sheet是否合法if (sheet == null) {continue;}// 获取第⼀⾏数据int firstRowNum = sheet.getFirstRowNum();Row firstRow = sheet.getRow(firstRowNum);if (null == firstRow) {logger.warning("解析Excel失败,在第⼀⾏没有读取到任何数据!");}// 解析每⼀⾏的数据,构造数据对象int rowStart = firstRowNum + 1;int rowEnd = sheet.getPhysicalNumberOfRows();for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {Row row = sheet.getRow(rowNum);if (null == row) {continue;}ExcelDataVO resultData = convertRowToData(row);if (null == resultData) {logger.warning("第 " + row.getRowNum() + "⾏数据不合法,已忽略!");continue;}resultDataList.add(resultData);}}return resultDataList;}/*** 将单元格内容转换为字符串* @param cell* @return*/private static String convertCellValueToString(Cell cell) {if(cell==null){return null;}String returnValue = null;switch (cell.getCellType()) {case NUMERIC: //数字Double doubleValue = cell.getNumericCellValue();// 格式化科学计数法,取⼀位整数DecimalFormat df = new DecimalFormat("0");returnValue = df.format(doubleValue);break;case STRING: //字符串returnValue = cell.getStringCellValue();break;case BOOLEAN: //布尔Boolean booleanValue = cell.getBooleanCellValue();returnValue = booleanValue.toString();break;case BLANK: // 空值break;case FORMULA: // 公式returnValue = cell.getCellFormula();break;case ERROR: // 故障break;default:break;}return returnValue;}/*** 提取每⼀⾏中需要的数据,构造成为⼀个结果数据对象** 当该⾏中有单元格的数据为空或不合法时,忽略该⾏的数据** @param row ⾏数据* @return 解析后的⾏数据对象,⾏数据错误时返回null*/private static ExcelDataVO convertRowToData(Row row) {ExcelDataVO resultData = new ExcelDataVO();Cell cell;int cellNum = 0;// 获取姓名cell = row.getCell(cellNum++);String name = convertCellValueToString(cell);resultData.setName(name);// 获取年龄cell = row.getCell(cellNum++);String ageStr = convertCellValueToString(cell);if (null == ageStr || "".equals(ageStr)) {// 年龄为空resultData.setAge(null);} else {resultData.setAge(Integer.parseInt(ageStr));}// 获取居住地cell = row.getCell(cellNum++);String location = convertCellValueToString(cell);resultData.setLocation(location);// 获取职业cell = row.getCell(cellNum++);String job = convertCellValueToString(cell);resultData.setJob(job);return resultData;}}2.2.3 应⽤场景补充⼀般我们会有这样的应⽤场景,即:在前台页⾯的⽂件上传⼊⼝上传本地的Excel⽂件到后台,后台收到Excel⽂件后进⾏解析并做对应的业务操作;这⾥假设前台已经有了上传⽂件的⼊⼝,再简单贴⼀下后台的解析代码;后台接收前台数据的Controller层代码⽰例:@PostMapping("/uploadExcel")public ResponseEntity<?> uploadImage(MultipartFile file) {// 检查前台数据合法性if (null == file || file.isEmpty()) {logger.warning("上传的Excel商品数据⽂件为空!上传时间:" + new Date());return new ResponseEntity<>(HttpStatus.BAD_REQUEST);}try {// 解析ExcelList<ExcelDataVO> parsedResult = ExcelReader.readExcel(file);// todo 进⾏业务操作return new ResponseEntity<>(HttpStatus.OK);} catch (Exception e) {logger.warning("上传的Excel商品数据⽂件为空!上传时间:" + new Date());return new ResponseEntity<>(HttpStatus.BAD_REQUEST);}}ExcelReader.java中的readExcel()⽅法需要做⼀定的修改,代码如下:/*** 读取Excel⽂件内容* @param file 上传的Excel⽂件* @return 读取结果列表,读取失败时返回null*/public static List<ExcelDataVO> readExcel(MultipartFile file) {Workbook workbook = null;try {// 获取Excel后缀名String fileName = file.getOriginalFilename();if (fileName == null || fileName.isEmpty() || stIndexOf(".") < 0) {logger.warning("解析Excel失败,因为获取到的Excel⽂件名⾮法!");return null;}String fileType = fileName.substring(stIndexOf(".") + 1, fileName.length());// 获取Excel⼯作簿workbook = getWorkbook(file.getInputStream(), fileType);// 读取excel中的数据List<ExcelDataVO> resultDataList = parseExcel(workbook);return resultDataList;} catch (Exception e) {logger.warning("解析Excel失败,⽂件名:" + file.getOriginalFilename() + " 错误信息:" + e.getMessage());return null;} finally {try {if (null != workbook) {workbook.close();}} catch (Exception e) {logger.warning("关闭数据流出错!错误信息:" + e.getMessage());return null;}}}2.3 写⼊数据写⼊数据时主要调⽤ExcelWriter.java来创建Excel⼯作簿对象并写⼊数据,这⾥以写⼊系统⽂件数据为例演⽰写⼊的过程:2.3.1 主程序⼊⼝类代码/*** Author: Dreamer-1* Date: 2019-03-01* Time: 10:13* Description: ⽰例程序⼊⼝类*/public class MainTest {private static Logger logger = Logger.getLogger(MainTest.class.getName());public static void main(String[] args) {// 创建需要写⼊的数据列表List<ExcelDataVO> dataVOList = new ArrayList<>(2);ExcelDataVO dataVO = new ExcelDataVO();dataVO.setName("⼩明");dataVO.setAge(18);dataVO.setLocation("⼴州");dataVO.setJob("⼤学⽣");ExcelDataVO dataVO2 = new ExcelDataVO();dataVO2.setName("⼩花");dataVO2.setAge(19);dataVO2.setLocation("深圳");dataVO2.setJob("⼤学⽣");dataVOList.add(dataVO);dataVOList.add(dataVO2);// 写⼊数据到⼯作簿对象内Workbook workbook = ExcelWriter.exportData(dataVOList);// 以⽂件的形式输出⼯作簿对象FileOutputStream fileOut = null;try {String exportFilePath = "/Users/Dreamer-1/Desktop/myBlog/java解析Excel/writeExample.xlsx";File exportFile = new File(exportFilePath);if (!exportFile.exists()) {exportFile.createNewFile();}fileOut = new FileOutputStream(exportFilePath);workbook.write(fileOut);fileOut.flush();} catch (Exception e) {logger.warning("输出Excel时发⽣错误,错误原因:" + e.getMessage());} finally {try {if (null != fileOut) {fileOut.close();}if (null != workbook) {workbook.close();}} catch (IOException e) {logger.warning("关闭输出流时发⽣错误,错误原因:" + e.getMessage());}}}}2.3.2 写⼊Excel类的代码ExcelWriter.java类中,你可以根据实际需要替换 CELL_HEADS 列头的信息,然后重写convertDataToRow⽅法,转换你⾃⼰的⾏数据;/*** Author: Dreamer-1* Date: 2019-03-01* Time: 11:09* Description: ⽣成Excel并写⼊数据*/public class ExcelWriter {private static List<String> CELL_HEADS; //列头static{// 类装载时就载⼊指定好的列头信息,如有需要,可以考虑做成动态⽣成的列头CELL_HEADS = new ArrayList<>();CELL_HEADS.add("姓名");CELL_HEADS.add("年龄");CELL_HEADS.add("居住城市");CELL_HEADS.add("职业");}/*** ⽣成Excel并写⼊数据信息* @param dataList 数据列表* @return 写⼊数据后的⼯作簿对象*/public static Workbook exportData(List<ExcelDataVO> dataList){// ⽣成xlsx的ExcelWorkbook workbook = new SXSSFWorkbook();// 如需⽣成xls的Excel,请使⽤下⾯的⼯作簿对象,注意后续输出时⽂件后缀名也需更改为xls//Workbook workbook = new HSSFWorkbook();// ⽣成Sheet表,写⼊第⼀⾏的列头Sheet sheet = buildDataSheet(workbook);//构建每⾏的数据内容int rowNum = 1;for (Iterator<ExcelDataVO> it = dataList.iterator(); it.hasNext(); ) {ExcelDataVO data = it.next();if (data == null) {continue;}//输出⾏数据Row row = sheet.createRow(rowNum++);convertDataToRow(data, row);}return workbook;}/*** ⽣成sheet表,并写⼊第⼀⾏数据(列头)* @param workbook ⼯作簿对象* @return 已经写⼊列头的Sheet*/private static Sheet buildDataSheet(Workbook workbook) {Sheet sheet = workbook.createSheet();// 设置列头宽度for (int i=0; i<CELL_HEADS.size(); i++) {sheet.setColumnWidth(i, 4000);}// 设置默认⾏⾼sheet.setDefaultRowHeight((short) 400);// 构建头单元格样式CellStyle cellStyle = buildHeadCellStyle(sheet.getWorkbook());// 写⼊第⼀⾏各列的数据Row head = sheet.createRow(0);for (int i = 0; i < CELL_HEADS.size(); i++) {Cell cell = head.createCell(i);cell.setCellValue(CELL_HEADS.get(i));cell.setCellStyle(cellStyle);}return sheet;}/*** 设置第⼀⾏列头的样式* @param workbook ⼯作簿对象* @return 单元格样式对象*/private static CellStyle buildHeadCellStyle(Workbook workbook) {CellStyle style = workbook.createCellStyle();//对齐⽅式设置style.setAlignment(HorizontalAlignment.CENTER);//边框颜⾊和宽度设置style.setBorderBottom(BorderStyle.THIN);style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 下边框style.setBorderLeft(BorderStyle.THIN);style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左边框style.setBorderRight(BorderStyle.THIN);style.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 右边框style.setBorderTop(BorderStyle.THIN);style.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上边框//设置背景颜⾊style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND);//粗体字设置Font font = workbook.createFont();font.setBold(true);style.setFont(font);return style;}/*** 将数据转换成⾏* @param data 源数据* @param row ⾏对象* @return*/private static void convertDataToRow(ExcelDataVO data, Row row){int cellNum = 0;Cell cell;// 姓名cell = row.createCell(cellNum++);cell.setCellValue(null == data.getName() ? "" : data.getName());// 年龄cell = row.createCell(cellNum++);if (null != data.getAge()) {cell.setCellValue(data.getAge());} else {cell.setCellValue("");}// 所在城市cell = row.createCell(cellNum++);cell.setCellValue(null == data.getLocation() ? "" : data.getLocation());// 职业cell = row.createCell(cellNum++);cell.setCellValue(null == data.getJob() ? "" : data.getJob());}}⽰例程序运⾏后将会在指定的系统路径下⽣成 writeExample.xlsx⽂件,其内容如下:2.3.3 应⽤场景补充⼀般写⼊Excel时会有这样的场景:前台页⾯上有⼀个导出按钮,点击后将后台某张表⾥的数据以Excel的形式导出,导出的Excel⽂件通过浏览器下载到⽤户系统中;这⾥默认前台页⾯已经有相应的按钮功能,给出对应的Controller层代码供参考:@GetMapping("/exportExcel")public void exportExcel(HttpServletRequest request, HttpServletResponse response) {Workbook workbook = null;OutputStream out = null;try {// todo 根据业务需求获取需要写⼊Excel的数据列表 dataList// ⽣成Excel⼯作簿对象并写⼊数据workbook = ExcelWriter.exportData(dataList);// 写⼊Excel⽂件到前端if(null != workbook){String excelName = "⽰例Excel导出";String fileName = excelName + DateUtil.format(new Date(), DateUtil.SHORT_DATE) + ".xlsx";fileName = new String(fileName.getBytes("UTF-8"),"iso8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);response.setContentType("application/x-download");response.setCharacterEncoding("UTF-8");response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");response.flushBuffer();out = response.getOutputStream();workbook.write(out);out.flush();}} catch (Exception e) {logger.WARNING("写⼊Excel过程出错!错误原因:" + e.getMessage());} finally {try {if (null != workbook) {workbook.close();}if (null != out) {out.close();}} catch (IOException e) {logger.WARNING("关闭workbook或outputStream出错!");}}}// 前台页⾯发送请求到后台Controller时的JS代码可参考:var url = "/exportExcel";window.location=url;原⽂链接:https:///Dreamer-1/p/10469430.html。
java使用poi包将数据写入Excel表格

java使⽤poi包将数据写⼊Excel表格1、Excel相关操作代码1import java.io.File;2import java.io.FileInputStream;3import java.io.FileNotFoundException;4import java.io.FileOutputStream;5import java.io.IOException;6import ng.reflect.Field;7import ng.reflect.Method;8import java.util.ArrayList;9import java.util.List;1011import ermodel.HSSFRow;12import ermodel.HSSFSheet;13import ermodel.HSSFWorkbook;14import ermodel.Cell;15import ermodel.Row;16import ponent;1718/**19 * @Description:20 * @author 21 * @date 创建时间:2016年12⽉8⽇下午2:38:4722 * @version 1.023*/24 @Component25public class ExcelManage {26private HSSFWorkbook workbook = null;2728/**29 * 判断⽂件是否存在30 * @param filePath ⽂件路径31 * @return32*/33public boolean fileExist(String filePath){34boolean flag = false;35 File file = new File(filePath);36 flag = file.exists();37return flag;38 }3940/**41 * 判断⽂件的sheet是否存在42 * @param filePath ⽂件路径43 * @param sheetName 表格索引名44 * @return45*/46public boolean sheetExist(String filePath,String sheetName){47boolean flag = false;48 File file = new File(filePath);49if(file.exists()){ //⽂件存在50//创建workbook51try {52 workbook = new HSSFWorkbook(new FileInputStream(file));53//添加Worksheet(不添加sheet时⽣成的xls⽂件打开时会报错)54 HSSFSheet sheet = workbook.getSheet(sheetName);55if(sheet!=null)56 flag = true;57 } catch (Exception e) {58 e.printStackTrace();59 }60 }else{ //⽂件不存在61 flag = false;62 }63return flag;64 }65/**66 * 创建新Sheet并写⼊第⼀⾏数据67 * @param filePath excel的路径68 * @param sheetName 要创建的表格索引69 * @param titleRow excel的第⼀⾏即表格头70 * @throws IOException71 * @throws FileNotFoundException72*/73public void createSheet(String filePath,String sheetName,String titleRow[]) throws FileNotFoundException, IOException{74 FileOutputStream out = null;75 File excel = new File(filePath); // 读取⽂件76 FileInputStream in = new FileInputStream(excel); // 转换为流77 workbook = new HSSFWorkbook(in); // 加载excel的⼯作⽬录7879 workbook.createSheet(sheetName); // 添加⼀个新的sheet80//添加表头81 Row row = workbook.getSheet(sheetName).createRow(0); //创建第⼀⾏82try {83for(int i = 0;i < titleRow.length;i++){84 Cell cell = row.createCell(i);85 cell.setCellValue(titleRow[i]);86 }87 out = new FileOutputStream(filePath);88 workbook.write(out);89 }catch (Exception e) {90 e.printStackTrace();91 }finally {92try {93 out.close();94 } catch (IOException e) {95 e.printStackTrace();96 }97 }98 }99 /**100 * 创建新excel.101 * @param filePath excel的路径102 * @param sheetName 要创建的表格索引103 * @param titleRow excel的第⼀⾏即表格头104*/105public void createExcel(String filePath,String sheetName,String titleRow[]){106//创建workbook107 workbook = new HSSFWorkbook();108//添加Worksheet(不添加sheet时⽣成的xls⽂件打开时会报错)109 workbook.createSheet(sheetName);110//新建⽂件111 FileOutputStream out = null;112try {113//添加表头114 Row row = workbook.getSheet(sheetName).createRow(0); //创建第⼀⾏115for(int i = 0;i < titleRow.length;i++){116 Cell cell = row.createCell(i);117 cell.setCellValue(titleRow[i]);118 }119 out = new FileOutputStream(filePath);120 workbook.write(out);121 } catch (Exception e) {122 e.printStackTrace();123 } finally {124try {125 out.close();126 } catch (IOException e) {127 e.printStackTrace();128 }129 }130 }131/**132 * 删除⽂件.133 * @param filePath ⽂件路径134*/135public boolean deleteExcel(String filePath){136boolean flag = false;137 File file = new File(filePath);138// 判断⽬录或⽂件是否存在139if (!file.exists()) {140return flag;141 } else {142// 判断是否为⽂件143if (file.isFile()) { // 为⽂件时调⽤删除⽂件⽅法144 file.delete();145 flag = true;146 }147 }148return flag;149 }150/**151 * 往excel中写⼊.152 * @param filePath ⽂件路径153 * @param sheetName 表格索引154 * @param object155*/156public void writeToExcel(String filePath,String sheetName, Object object,String titleRow[]){ 157//创建workbook158 File file = new File(filePath);159try {160 workbook = new HSSFWorkbook(new FileInputStream(file));161 } catch (FileNotFoundException e) {162 e.printStackTrace();163 } catch (IOException e) {164 e.printStackTrace();165 }166 FileOutputStream out = null;167 HSSFSheet sheet = workbook.getSheet(sheetName);168// 获取表格的总⾏数169int rowCount = sheet.getLastRowNum() + 1; // 需要加⼀170try {171 Row row = sheet.createRow(rowCount); //最新要添加的⼀⾏172//通过反射获得object的字段,对应表头插⼊173// 获取该对象的class对象174 Class<? extends Object> class_ = object.getClass();175176for(int i = 0;i < titleRow.length;i++){177 String title = titleRow[i];178 String UTitle = Character.toUpperCase(title.charAt(0))+ title.substring(1, title.length()); // 使其⾸字母⼤写; 179 String methodName = "get"+UTitle;180 Method method = class_.getDeclaredMethod(methodName); // 设置要执⾏的⽅法181 String data = method.invoke(object).toString(); // 执⾏该get⽅法,即要插⼊的数据182 Cell cell = row.createCell(i);183 cell.setCellValue(data);184 }185 out = new FileOutputStream(filePath);186 workbook.write(out);187 } catch (Exception e) {188 e.printStackTrace();189 } finally {190try {191 out.close();192 } catch (IOException e) {193 e.printStackTrace();194 }195 }196 }197 }2、main⽅法调⽤⽅式1public static void main(String[] args) {2 String filePath = "result/数据汇总.xls";3 String sheetName = "测试";4//Excel⽂件易车sheet页的第⼀⾏5 String title[] = {"⽇期", "城市","新发布车源数"};6//Excel⽂件易车每⼀列对应的数据7 String titleDate[] = {"date", "city","newPublish"};89 ExcelManage em = new ExcelManage();10//判断该名称的⽂件是否存在11boolean fileFlag = em.fileExist(filePath);12if(!fileFlag){13 em.createExcel(filePath,sheetName,title);14 }15//判断该名称的Sheet是否存在16boolean sheetFlag = em.sheetExist(filePath,sheetName);17//如果该名称的Sheet不存在,则新建⼀个新的Sheet18if(!sheetFlag){19try {20 em.createSheet(filePath,sheetName,title);21 } catch (FileNotFoundException e) {22 e.printStackTrace();23 } catch (IOException e) {24 e.printStackTrace();25 }26 }28 YiCheData user = new YiCheData();29 user.setDate("206-12-21");30 user.setCity("北京");31 user.setNewPublish("5");32//写⼊到excel33 em.writeToExcel(filePath,sheetName,user,titleDate);34 }3、⽤于测试的bean类1public class YiCheData {2private String date;3private String city;4private String newPublish;56public String getDate() {7return date;8 }9public void setDate(String date) {10this.date = date;11 }12public String getCity() {13 return city;14 }15public void setCity(String city) {16 this.city = city;17 }18public String getNewPublish() {19 eturn newPublish;20 }21public void setNewPublish(String newPublish) { 22 this.newPublish = newPublish;23 }24 }。
java的poi技术读取Excel数据

java的poi技术读取Excel数据这篇blog主要是讲述java中poi读取excel,⽽excel的版本包括:2003-2007和2010两个版本,即excel的后缀名为:xls和xlsx。
读取excel和MySQL相关:你也可以在:了解到写⼊Excel的⽅法信息使⽤JXL技术:下⾯是本⽂的项⽬结构:项⽬中所需要的jar⽂件:所⽤的Excel数据(2003-2007,2010都是⼀样的数据)运⾏效果:=================================================源码部分:================================================= /Excel2010/src/com/b510/common/Common.java1 /**2 *3 */4 package mon;56 /**7 * @author Hongten8 * @created 2014-5-219 */10 public class Common {1112 public static final String OFFICE_EXCEL_2003_POSTFIX = "xls";13 public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx";1415 public static final String EMPTY = "";16 public static final String POINT = ".";17 public static final String LIB_PATH = "lib";18 public static final String STUDENT_INFO_XLS_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2003_POSTFIX;19 public static final String STUDENT_INFO_XLSX_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2010_POSTFIX;20 public static final String NOT_EXCEL_FILE = " : Not the Excel file!";21 public static final String PROCESSING = "Processing...";2223 }/Excel2010/src/com/b510/excel/ReadExcel.java1 /**2 *3 */4 package com.b510.excel;56 import java.io.FileInputStream;7 import java.io.IOException;8 import java.io.InputStream;9 import java.util.ArrayList;10 import java.util.List;1112 import ermodel.HSSFCell;13 import ermodel.HSSFRow;14 import ermodel.HSSFSheet;15 import ermodel.HSSFWorkbook;16 import ermodel.XSSFCell;17 import ermodel.XSSFRow;18 import ermodel.XSSFSheet;19 import ermodel.XSSFWorkbook;2021 import mon;22 import com.b510.excel.util.Util;23 import com.b510.excel.vo.Student;2425 /**26 * @author Hongten27 * @created 2014-5-2028 */29 public class ReadExcel {3031 /**32 * read the Excel file33 * @param path the path of the Excel file34 * @return35 * @throws IOException36 */37 public List<Student> readExcel(String path) throws IOException {38 if (path == null || Common.EMPTY.equals(path)) {39 return null;40 } else {41 String postfix = Util.getPostfix(path);42 if (!Common.EMPTY.equals(postfix)) {43 if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {44 return readXls(path);45 } else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {46 return readXlsx(path);47 }48 } else {49 System.out.println(path + Common.NOT_EXCEL_FILE);50 }51 }52 return null;53 }5455 /**56 * Read the Excel 201057 * @param path the path of the excel file58 * @return59 * @throws IOException60 */61 public List<Student> readXlsx(String path) throws IOException {62 System.out.println(Common.PROCESSING + path);63 InputStream is = new FileInputStream(path);64 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);65 Student student = null;66 List<Student> list = new ArrayList<Student>();67 // Read the Sheet68 for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {69 XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);70 if (xssfSheet == null) {71 continue;72 }73 // Read the Row74 for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {75 XSSFRow xssfRow = xssfSheet.getRow(rowNum);76 if (xssfRow != null) {77 student = new Student();78 XSSFCell no = xssfRow.getCell(0);79 XSSFCell name = xssfRow.getCell(1);80 XSSFCell age = xssfRow.getCell(2);81 XSSFCell score = xssfRow.getCell(3);82 student.setNo(getValue(no));83 student.setName(getValue(name));84 student.setAge(getValue(age));85 student.setScore(Float.valueOf(getValue(score)));86 list.add(student);87 }88 }89 }90 return list;91 }9293 /**94 * Read the Excel 2003-200795 * @param path the path of the Excel96 * @return97 * @throws IOException98 */99 public List<Student> readXls(String path) throws IOException {100 System.out.println(Common.PROCESSING + path);101 InputStream is = new FileInputStream(path);102 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);103 Student student = null;104 List<Student> list = new ArrayList<Student>();105 // Read the Sheet106 for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { 107 HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);108 if (hssfSheet == null) {109 continue;110 }111 // Read the Row112 for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {113 HSSFRow hssfRow = hssfSheet.getRow(rowNum);114 if (hssfRow != null) {115 student = new Student();116 HSSFCell no = hssfRow.getCell(0);117 HSSFCell name = hssfRow.getCell(1);118 HSSFCell age = hssfRow.getCell(2);119 HSSFCell score = hssfRow.getCell(3);120 student.setNo(getValue(no));121 student.setName(getValue(name));122 student.setAge(getValue(age));123 student.setScore(Float.valueOf(getValue(score)));124 list.add(student);125 }126 }127 }128 return list;129 }130131 @SuppressWarnings("static-access")132 private String getValue(XSSFCell xssfRow) {133 if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {134 return String.valueOf(xssfRow.getBooleanCellValue());135 } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {136 return String.valueOf(xssfRow.getNumericCellValue());137 } else {138 return String.valueOf(xssfRow.getStringCellValue());139 }140 }141142 @SuppressWarnings("static-access")143 private String getValue(HSSFCell hssfCell) {144 if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {145 return String.valueOf(hssfCell.getBooleanCellValue());146 } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {147 return String.valueOf(hssfCell.getNumericCellValue());148 } else {149 return String.valueOf(hssfCell.getStringCellValue());150 }151 }152 }/Excel2010/src/com/b510/excel/client/Client.java1 /**2 *3 */4 package com.b510.excel.client;56 import java.io.IOException;7 import java.util.List;89 import mon;10 import com.b510.excel.ReadExcel;11 import com.b510.excel.vo.Student;1213 /**14 * @author Hongten15 * @created 2014-5-2116 */17 public class Client {1819 public static void main(String[] args) throws IOException {20 String excel2003_2007 = Common.STUDENT_INFO_XLS_PATH;21 String excel2010 = Common.STUDENT_INFO_XLSX_PATH;22 // read the 2003-2007 excel23 List<Student> list = new ReadExcel().readExcel(excel2003_2007);24 if (list != null) {25 for (Student student : list) {26 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());27 }28 }29 System.out.println("======================================");30 // read the 2010 excel31 List<Student> list1 = new ReadExcel().readExcel(excel2010);32 if (list1 != null) {33 for (Student student : list1) {34 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());35 }36 }37 }38 }/Excel2010/src/com/b510/excel/util/Util.java1 /**2 *3 */4 package com.b510.excel.util;56 import mon;78 /**9 * @author Hongten10 * @created 2014-5-2111 */12 public class Util {1314 /**15 * get postfix of the path16 * @param path17 * @return18 */19 public static String getPostfix(String path) {20 if (path == null || Common.EMPTY.equals(path.trim())) {21 return Common.EMPTY;22 }23 if (path.contains(Common.POINT)) {24 return path.substring(stIndexOf(Common.POINT) + 1, path.length());25 }26 return Common.EMPTY;27 }28 }/Excel2010/src/com/b510/excel/vo/Student.java1 /**2 *3 */4 package com.b510.excel.vo;56 /**7 * Student8 *9 * @author Hongten10 * @created 2014-5-1811 */12 public class Student {13 /**14 * id15 */16 private Integer id;17 /**18 * 学号19 */20 private String no;21 /**22 * 姓名23 */24 private String name;25 /**26 * 学院27 */28 private String age;29 /**30 * 成绩31 */32 private float score;3334 public Integer getId() {35 return id;36 }3738 public void setId(Integer id) {39 this.id = id;40 }4142 public String getNo() {43 return no;44 }4546 public void setNo(String no) {47 this.no = no;48 }4950 public String getName() {51 return name;52 }5354 public void setName(String name) {55 = name;56 }5758 public String getAge() {59 return age;60 }6162 public void setAge(String age) {63 this.age = age;64 }6566 public float getScore() {67 return score;68 }6970 public void setScore(float score) {71 this.score = score;72 }7374 }。
java读写excel文件实现POI解析Excel的方法

java读写excel⽂件实现POI解析Excel的⽅法在⽇常⼯作中,我们常常会进⾏⽂件读写操作,除去我们最常⽤的纯⽂本⽂件读写,更多时候我们需要对Excel中的数据进⾏读取操作,本⽂将介绍Excel读写的常⽤⽅法,希望对⼤家学习Java读写Excel 会有帮助。
package com.zhx.base.utils;import ermodel.HSSFWorkbook;import ermodel.*;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;/*** POI解析Excel*/public class ExcelReaderUtil {/*** 根据fileType不同读取excel⽂件** @param path* @param path* @throws IOException*/public static List<List<String>> readExcel(String path) {String fileType = path.substring(stIndexOf(".") + 1);// return a list contains many listList<List<String>> lists = new ArrayList<List<String>>();//读取excel⽂件InputStream is = null;try {is = new FileInputStream(path);//获取⼯作薄Workbook wb = null;if (fileType.equals("xls")) {wb = new HSSFWorkbook(is);} else if (fileType.equals("xlsx")) {wb = new XSSFWorkbook(is);} else {return null;}//读取第⼀个⼯作页sheetSheet sheet = wb.getSheetAt(0);//第⼀⾏为标题for (Row row : sheet) {ArrayList<String> list = new ArrayList<String>();for (Cell cell : row) {//根据不同类型转化成字符串cell.setCellType(Cell.CELL_TYPE_STRING);list.add(cell.getStringCellValue());}lists.add(list);}} catch (IOException e) {e.printStackTrace();} finally {try {if (is != null) is.close();} catch (IOException e) {e.printStackTrace();}}return lists;}/*** 创建Excel.xls* @param lists 需要写⼊xls的数据* @param titles 列标题* @param name ⽂件名* @return* @throws IOException*/public static Workbook creatExcel(List<List<String>> lists, String[] titles, String name) throws IOException {System.out.println(lists);//创建新的⼯作薄Workbook wb = new HSSFWorkbook();// 创建第⼀个sheet(页),并命名Sheet sheet = wb.createSheet(name);// ⼿动设置列宽。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java读写Excel之POI入门
Apache POI 是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。
用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。
Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
如果处理.xlsx、docx、pptx的话可以试试Docx4j 。
∙HSSF -提供读写Microsoft Excel XLS格式档案的功能。
∙XSSF -提供读写Microsoft Excel OOXML XLSX格式档案的功能。
∙HWPF -提供读写Microsoft Word DOC格式档案的功能。
∙HSLF -提供读写Microsoft PowerPoint格式档案的功能。
∙HDGF -提供读Microsoft Visio格式档案的功能。
∙HPBF -提供读Microsoft Publisher格式档案的功能。
∙HSMF -提供读Microsoft Outlook格式档案的功能。
版本:poi-3.8-20120326.jar
1、生成Workbook
Java代码
2、生成Workbook OOXML形式(.xlsx) Java代码
3、打开Workbook
Java代码
4、打开加密的Workbook(读加密) Java代码
11.System.out.println("Sheet0's name:"+ wb.getSheetName(0));
12.System.out.println();
5、追加Sheet
Java代码
1.Sheet sheet = wb.createSheet("append sheet");
6、复制Sheet
Java代码
1.wb.cloneSheet(1);
7、修改Sheet名称
Java代码
1.wb.setSheetName(i, "SheetName new");
8、删除Sheet
Java代码
1.wb.removeSheetAt(1);
9、设置下部Sheet名的Tab的第一个可见Tab
Java代码
1.//设置下部Sheet名的Tab的第一个可见Tab(以左的Sheet看不见)
2.wb.setFirstVisibleTab(2);
10、调整Sheet顺序
Java代码
1.wb.setSheetOrder("SheetName3", 1);
2.wb.setSheetOrder(wb.getSheetName(4), 0);
11、设置当前Sheet
t.setActiveSheet();
Java代码
1.//设置当前Sheet
2.wb.setActiveSheet(wb.getNumberOfSheets() - 1);
3.//(Excel的当前Sheet被设置,需要结合setSelected使用,不然下部Sheet名的Tab还是默认为第
一个)
4.//(需要选择多个Sheet的话,每个Sheet调用setSelected(true)即可)
5.wb.getSheetAt(wb.getNumberOfSheets() - 1).setSelected(true);
12、固定窗口
Java代码
1.wb.getSheet("SheetName4").createFreezePane(2, 2);
13、分割窗口
Java代码
1.wb.getSheet("SheetName5").createSplitPane(2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEF
T);
14、Sheet缩放
Java代码
1.//setZoom(int numerator, int denominator)
2.//"numerator"÷"denominator"例如:3÷1=3 那就是设置为300%
3.
4.//扩大(200%)
15、行列分组Java代码
16、关闭分组
Java代码
1.wb.getSheet("sheetname3").setColumnGroupCollapsed(10, true);
2.wb.getSheet("sheetname3").setRowGroupCollapsed(7, true);
17、插入行
Java代码
1.Row row1 = wb.getSheet("sheetname4").createRow(1);
2.Cell cell1_1 = row1.createCell(1);
3.cell1_1.setCellValue(123);
4.
5.Row row4 = wb.getSheet("sheetname4").createRow(4);
6.Cell cell4_3 = row4.createCell(3);
7.cell4_3.setCellValue("中国");
18、删除行
Java代码
1.Row row = wb.getSheet("sheetname4").getRow(1);
2.wb.getSheet("sheetname4").removeRow(row);
19、移动行
Java代码
1.//******移动行只移动内容,不牵扯行的删除和插入
2.
3.//移动行(把第1行和第2行移到第5行之后)
4.wb.getSheet("sheetname5").shiftRows(0, 1, 5);
5.
6.//移动行(把第3行和第4行往上移动1行)
7.wb.getSheet("sheetname5").shiftRows(2, 3, -1);
20、修改行高
Java代码
1.//设置默认行高
2.wb.getSheet("sheetname6").setDefaultRowHeight((short)100);
3.
4.//设置行高
5.wb.getSheet("sheetname6").getRow(2).setHeight((short)(100* 20));
21、修改列宽
Java代码
1.//设置默认列宽
2.wb.getSheet("sheetname7").setDefaultColumnWidth(12);
3.
4.//设置列宽
5.wb.getSheet("sheetname7").setColumnWidth(0, 5* 256);
22、不显示网格线
Java代码
1.//不显示网格线
2.wb.getSheet("sheetname8").setDisplayGridlines(false);
23、设置分页
Java代码
1.//设置第一页:3行2列(可以多次设置)
2.wb.getSheet("sheetname9").setRowBreak(2);
24、添加,删除,合并单元格Java代码
25、设置Header,Footer Java代码
26、设置单元格值Java代码
27、设置单元格边线Java代码
28、设置单元格背景填充Java代码
29、设置单元格注释Java代码
30、设置单元格字体(斜体,粗体,下线,取消线,字体,大小,背景色)Java代码
31、设置超链接Java代码
32、设置单元格横向对齐,纵向对齐Java代码
33、设置单元格旋转角度Java代码
34、设置单元格自动折行Java代码
35、设置单元格文字缩进Java代码
36、自定义格式Java代码
37、设置公式
Java代码
38、画直线,圆圈(椭圆),正方形(长方形),Textbox Java代码
39、插入图片Java代码
40、设置可输入List Java代码
41、设置输入提示信息Java代码。