Java操作Excel之POI:java读写excel文件以及打印设置
2019-01-17 17:17
281 查看
版权声明:@lingtouyang1997 https://blog.csdn.net/weixin_43209201/article/details/86528059
Java操作Excel之POI:java读写excel文件以及打印设置
POI的jar包下载地址:http://poi.apache.org/download.html
注意:项目中导入poi 4.0.1的jar包,其他版本不确保没有错误。
HSSFCellStyle.VERTICAL_CENTER没有定义的解决办法参考https://blog.csdn.net/weixin_43209201/article/details/86522238。
HSSFCellStyle.ALIGN_LEFT、CENTER、RIGHT等没有定义的解决办法参考https://blog.csdn.net/weixin_43209201/article/details/86522115。
HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC等没有定义的解决办法参考https://blog.csdn.net/weixin_43209201/article/details/86519522。
1、java写excel文件及对页面打印设置:
import static org.apache.poi.hssf.usermodel.HeaderFooter.fontSize; import java.io.FileOutputStream; import java.util.Calendar; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFFooter; import org.apache.poi.hssf.usermodel.HSSFHeader; import org.apache.poi.hssf.usermodel.HSSFPrintSetup; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; public class Demo_Write { /** * 使用poi创建并编辑excel文件 * * @author lingtouyang的csdn博客 ▄┻┳═一 ☆ * */ public static void main(String[] args) throws Exception { // 创建工作簿 Workbook wb = new HSSFWorkbook(); // 定义一个新的工作簿 // 创建sheet页 Sheet sheet1 = wb.createSheet("第一个sheet页"); // 创建第一个sheet页 Sheet sheet2 = wb.createSheet("第二个sheet页"); // 创建第二个sheet页 // 创建单元行 Row row1 = sheet1.createRow(0); // 创建第一行 // 创建单元格 Cell cell1 = row1.createCell(0); // 创建第一行第一个单元格,第一列 Cell cell2 = row1.createCell(1); // 创建第一行第二个单元格 Cell cell3 = row1.createCell(2); // 创建第一行第三个单元格 Cell cell4 = row1.createCell(3); // 创建第一行第四个单元格 Cell cell5 = row1.createCell(4); // 创建第一行第五个单元格 Cell cell6 = row1.createCell(5); // 创建第一行第六个单元格 Cell cell7 = row1.createCell(6); // 创建第一行第七个单元格 // 给单元格设值 cell1.setCellValue(1.2); // 给第一个单元格设置一个 数字类型的值(整型\浮点都可以) cell2.setCellValue(false); // 给第二个单元格设置一个 布尔类型的值 cell3.setCellValue("这是一个字符串"); // 给第三个单元格设置一个 字符串类型的值 // 创建一个时间类型的单元格 cell4.setCellValue(new Date()); // 给第三个单元格设置一个new Date()时间类型(从1970.1.1开始的毫秒数 ) cell5.setCellValue(Calendar.getInstance()); // 给单元格设置一个 Calendar.getInstance()日期类型的值 // 使用指定时间样式给单元格设置一个 日期类型的值 CreationHelper creationHelper = wb.getCreationHelper(); // wb的小工具,此处用来设置时间格式 CellStyle cellStyle = wb.createCellStyle(); // 创建单元格样式类 cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));// 设置时间格式 cell6.setCellValue(new Date()); // 给单元格设置一个 new Date()日期类型的值 cell6.setCellStyle(cellStyle); // 将设置好的时间样式应用到单元格 cell7.setCellValue(Calendar.getInstance()); // 给单元格设置一个 Calendar.getInstance()日期类型的值 cell7.setCellStyle(cellStyle); // 将设置好的时间样式应用到单元格 // 创建单元行 Row row2 = sheet1.createRow(1); // 创建第二行 // 设置行高 row2.setHeightInPoints(30); // 创建单元格 Cell cell2_1 = row2.createCell(0); // 创建第一行第一个单元格,第一列 Cell cell2_2 = row2.createCell(1); // 创建第一行第二个单元格 Cell cell2_3 = row2.createCell(2); // 创建第一行第三个单元格 Cell cell2_5 = row2.createCell(4); // 创建第一行第五个单元格 Cell cell2_6 = row2.createCell(5); // 创建第一行第六个单元格 Cell cell2_7 = row2.createCell(6); // 创建第一行第七个单元格 // 单元格设置 // 设置单元格对齐方式,以左上为例 cell2_1.setCellValue("左上对齐");// 给第二行第一列设值 CellStyle cellStyle2 = wb.createCellStyle();// 创建单元格样式 cellStyle2.setAlignment(HorizontalAlignment.LEFT);// 设置单元格水平方向对齐格式,以左对齐为例,其他类似 cellStyle2.setVerticalAlignment(VerticalAlignment.TOP);// 设置单元格垂直对齐方式,以顶端对齐为例,其他类似 cell2_1.setCellStyle(cellStyle2);// 注意:给单元格设置样式 // 设置单元格边框 cellStyle2.setBorderBottom(BorderStyle.DASH_DOT);// 下边框点线,其他类似 cellStyle2.setBottomBorderColor(IndexedColors.GREEN.getIndex());// 为下边框设置颜色,其他类似 // 设置单元格填充色和颜色 cell2_2.setCellValue("背景色"); CellStyle cellStyle3=wb.createCellStyle(); cellStyle3.setFillPattern(FillPatternType.SPARSE_DOTS);//设置背景填充模式 cellStyle3.setFillForegroundColor(IndexedColors.GOLD.getIndex());//设置单元格背景色 cell2_2.setCellStyle(cellStyle3); //合并单元格 cell2_3.setCellValue("合并单元格测试测试测试"); sheet1.addMergedRegion(new CellRangeAddress(//设置第二行第三列到第四列的单元格进行合并如下: 1, //起始行 1, //结束行 2, //起始列 3 //结束列 )); //单元格字体设置 Font font=wb.createFont(); //创建一个字体处理类 font.setFontHeightInPoints((short) 30); //设置字体大小 font.setFontName("黑体"); //设置字体 font.setItalic(true); //设置斜体 font.setBold(false); //是否加粗 font.setColor(IndexedColors.BLUE.getIndex()); //设置字体颜色 font.setStrikeout(true); //删除线 CellStyle cellStyle4=wb.createCellStyle();//创建样式 cellStyle4.setFont(font);//将字体样式应用到样式 cell2_5.setCellValue("设置字体样式"); cell2_5.setCellStyle(cellStyle4);//将样式应用到单元格 //单元格使用换行,同excel中的Alt+Enter换行 CellStyle cellStyle5=wb.createCellStyle(); cellStyle5.setWrapText(true);//设置可以换行 cell2_6.setCellValue("换行 \n 成功了!"); cell2_6.setCellStyle(cellStyle5); //用户自定义单元格数据格式 CellStyle cellStyle6=wb.createCellStyle(); cellStyle6.setDataFormat(wb.createDataFormat().getFormat("#,##0.000")); cell2_7.setCellValue(11111111.1); cell2_7.setCellStyle(cellStyle6); //打印设置 HSSFPrintSetup hps=(HSSFPrintSetup) sheet1.getPrintSetup();//获取页面的打印设置 hps.setPaperSize((short) 9);//设置a4纸 hps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置a4纸 hps.setFitHeight((short)10);//设置缩放为10行高 hps.setFitWidth((short)9);//设置列宽 hps.setLandscape(true);//将页面设置为横向打印 hps.setLeftToRight(true);//设置打印顺序先行后列,默认为先列后行 sheet1.setHorizontallyCenter(true);//设置打印页面水平居中 sheet1.setVerticallyCenter(true);//设置打印页面垂直居中 //设置页眉 HSSFHeader header=(HSSFHeader) sheet1.getHeader(); header.setCenter("居中页眉");//设置页眉居中,其他类似 fontSize((short) 16); //设置页脚 HSSFFooter footer=(HSSFFooter) sheet1.getFooter(); footer.setRight("Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages()); //使得一个sheet适合一页 sheet1.setAutobreaks(true); //设置每页打印的行数 sheet1.setAutobreaks(false); int i=sheet1.getLastRowNum(); if(i!=0 && i%1==0) { sheet1.setRowBreak(i);//设置每一行分页打印 } //设置重复打印(适合设置打印标题) sheet1.setRepeatingRows(new CellRangeAddress(0,1,0,7));//前两行的前八列重复打印 //设置放大属性(参数为百分数的整型数。例如下面设置为75%) sheet1.setZoom(75); //调整单元格宽度 sheet1.setColumnWidth(7, 20);//设置第八列宽20 //设置不显示excel网格线 sheet1.setDisplayGridlines(false); FileOutputStream fileOutStream = new FileOutputStream("G:\\用POI搞出来的工作簿.xlsx"); // 创建输出流 wb.write(fileOutStream); // 将工作簿写到输出流中去 System.out.println("操作结束!"); if (null != fileOutStream) { fileOutStream.close(); // 及时关闭输出流 } if (null != wb) { wb.close(); //养成不用就关闭的好习惯 } } }
2、java读excel文件:
- 手动定制读取方式:
import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDateFormat; 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; /** * 使用poi遍历excel文件 * * @author lingtouyang的csdn博客 ▄┻┳═一 ☆ * */ public class Demo_Read { public static void main(String[] args) throws Exception { /** * 手动定制读取excel文件内容 */ InputStream is = new FileInputStream("G:\\用POI搞出来的工作簿.xlsx");// 文件输入流,传要遍历文件的路径 POIFSFileSystem fs = new POIFSFileSystem(is); HSSFWorkbook wb = new HSSFWorkbook(fs); // 遍历sheet页 for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) { HSSFSheet hssfSheet = wb.getSheetAt(sheetNum); /// 获取第一个Sheet页 System.out.println(wb.getSheetName(sheetNum)); if (hssfSheet == null) { continue; } // 遍历行Row for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow == null) { continue; } // 遍历列Cell for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) { HSSFCell hssfCell = hssfRow.getCell(cellNum); if (hssfCell == null) { continue; } System.out.print(" " + getValue(hssfCell)); } System.out.println(); } } if (null != is) { is.close(); // 及时关闭输入流 } if (null != wb) { wb.close(); // 养成不用就关闭的好习惯 } } /** * 获取单元格的值并根据类型格式化 * * @param cell * @return */ private static String getValue(HSSFCell cell) { // 如果是yyyy-MM-dd // HH:mm:ss日期类型格式,返回相同的日期格式。由于我的Demo_Write中设置了是这种格式,故此处这样处理。同理,当然还可是其他格式,可根据实际情况调整 if ("yyyy/mm;@".equals(cell.getCellStyle().getDataFormatString()) || "yyyy-MM-dd HH:mm:ss".equals(cell.getCellStyle().getDataFormatString())) { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()); } else { switch (cell.getCellType()) { case BOOLEAN: // Boolean类型的处理 return String.valueOf(cell.getBooleanCellValue()); case NUMERIC: // 数字类型的处理 return String.valueOf(cell.getNumericCellValue()); default: // 其他类型则按字符串处理 return String.valueOf(cell.getStringCellValue()); } } } }
- 使用ExcelExtractor抽取excel文件中的文本:
import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.hssf.extractor.ExcelExtractor; public class Demo_ReadByExcelExtractor { /** * 使用poi遍历excel文件 * * @author lingtouyang的csdn博客 ▄┻┳═一 ☆ * */ public static void main(String[] args) throws Exception { /* * 使用ExcelExtractor抽取excel文件中的文本 */ InputStream is = new FileInputStream("G:\\用POI搞出来的工作簿.xlsx");// 文件输入流,传要遍历文件的路径 POIFSFileSystem fs = new POIFSFileSystem(is); HSSFWorkbook wb = new HSSFWorkbook(fs); ExcelExtractor excelExtractor = new ExcelExtractor(wb); excelExtractor.setIncludeSheetNames(false); // 设置不显示sheet页的名字,还有一些设置项,可根据实际需要查阅api System.out.println(excelExtractor.getText()); if (null != excelExtractor) { excelExtractor.close(); // 养成用完就关闭的好习惯 } if (null != is) { is.close(); // 及时关闭输入流 } if (null != wb) { wb.close(); // 养成不用就关闭的好习惯 } } }
相关文章推荐
- iMOOC学习笔记:Java的Excel读写操作入门实践-利用POI生成Excel文件(一)
- iMOOC学习笔记:Java的Excel读写操作入门实践-利用POI解析Excel文件(二)
- java-使用POI对Excel进行读写操作
- 利用java poi对excel表的读写操作
- java对excel文件的读写操作,这次是丰富的属性设置
- JAVA操作Excel表格:方法二:POI的使用①:Excel实战之POI创建excel文件(低版本)
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- 14、java实现poi操作excel,包括读和写日期格式,并且设置字体样式
- java操作Excel(Jakarta_POI)以及java调用office宏
- 14、java实现poi操作excel,包括读和写日期格式,并且设置字体样式
- java poi操作excel文件 (新建Excel文件 添加行列、单元格)
- java 调用 poi(apache的专门读写microsoft office API) 操作Excel
- java 用jxl以及poi对excel的读写以及性能的优化
- 【Java】常用POI生成Excel文档设置打印样式
- java poi 创建XLS 用Jakarta POI操作Excel文件 POI创建 解析Excel
- java poi 读写操作excel
- apache POI3.2 java操作excel 设置数据有效性,实现excel单元格列表和提示
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- java 使用POI输出Excel时打印页面的设置
- Java Poi操作Excel写入数据并设置style