一、概述

  Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。

1.1、POI结构说明

包名称说明

  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对于excel使用

2.1、创建一个excel

    //创建 2003 excel 格式 xls
    @Testpublic void test() throws Exception {Workbook workbook=new HSSFWorkbook();//定义一个工作薄workbook.createSheet("sheet1");//需要默认创建一个sheet,否则打开时候报错FileOutputStream out= new FileOutputStream("test.xls");workbook.write(out);out.close();}//创建 2007 以后的excel格式 xlsx
    @Testpublic void test2() throws Exception {Workbook workbook=new XSSFWorkbook();//定义一个工作薄workbook.createSheet("sheet1");//需要默认创建一个sheet,否则打开时候报错FileOutputStream out= new FileOutputStream("test.xlsx");workbook.write(out);out.close();}

2.2、基本的使用

    // 基本测试 创建一个sheet 一行 几列数据
    @Testpublic void testBase() throws Exception {Workbook wk=new HSSFWorkbook();//创建一个工作薄Sheet sh=wk.createSheet("第一个sheet页");//创建一个sheet页Row row=sh.createRow(0);//创建第一行Cell cell=row.createCell(0);//创建第一行的第一个单元格cell.setCellValue(1);//为第一行第一个单元格塞值row.createCell(1).setCellValue(1.2);//创建第一行第2个单元格并赋值row.createCell(2).setCellValue("这是一个字符串");//创建第一行第3个单元格并赋值row.createCell(3).setCellValue(true);//创建第一行第4个单元格并赋值FileOutputStream out= new FileOutputStream("cells和sheet页.xls");wk.write(out);out.close();}

效果

  

2.3、单元格操作

2.3.1、设置单元格边框颜色

    // 设置单元格边框 颜色
    @Testpublic void testCellBorderColor() throws Exception {Workbook wb=new HSSFWorkbook();//创建工作簿Sheet sh=wb.createSheet("第一个sheet页");//创建一个sheet页Row row=sh.createRow(2);//创建一行Cell cell=row.createCell(2);//创建一个单元格cell.setCellValue(4);//设置值CellStyle cellStyle=wb.createCellStyle();cellStyle.setBorderBottom(BorderStyle.THIN);//设置底部边框cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());//设置底部边框颜色cellStyle.setBorderLeft(BorderStyle.THIN);//设置左部边框cellStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());//设置左部边框颜色cellStyle.setBorderRight(BorderStyle.THIN);//设置右部边框cellStyle.setRightBorderColor(IndexedColors.RED.getIndex());//设置右部边框颜色cellStyle.setBorderTop(BorderStyle.THIN);//设置顶部边框cellStyle.setTopBorderColor(IndexedColors.ORANGE.getIndex());//设置顶部边框颜色
        cell.setCellStyle(cellStyle);FileOutputStream out=new FileOutputStream("test.xls");wb.write(out);out.close();}

  

2.3.2、单元格数据格式展示【string、number、日期、布尔】

    @Testpublic void testDiffCell() throws Exception {Workbook wk = new HSSFWorkbook();//创建工作薄Sheet sh = wk.createSheet();//创建sheet页Row row = sh.createRow(0);//创建第一行row.createCell(0).setCellValue(1);row.createCell(1).setCellValue("字符串");row.createCell(2).setCellValue(true);//1、日期默认为 数值row.createCell(3).setCellValue(new Date());row.createCell(4).setCellValue(HSSFCell.ENCODING_COMPRESSED_UNICODE);row.createCell(5).setCellValue(false);//2、日期变成字符串row.createCell(6).setCellValue("2019-07-19");//3、单元格设置日期类型样式// 定义Cell格式CellStyle cellStyle = wk.createCellStyle();CreationHelper creationHelper = wk.getCreationHelper();cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd  hh:mm:ss"));Cell cell = row.createCell(7);//创建一个单元格cell.setCellValue(new Date()); // 插入格式化日期
        cell.setCellStyle(cellStyle);cell = row.createCell(8);        // 插入格式化日期
        cell.setCellValue(Calendar.getInstance());cell.setCellStyle(cellStyle);FileOutputStream out = new FileOutputStream("test.xls");wk.write(out);out.close();}

  

2.3.3、字体处理

    @Testpublic void testFont() throws Exception {Workbook workbook=new HSSFWorkbook();Sheet sheet=workbook.createSheet();Row row=sheet.createRow(1);//字体处理类Font font=workbook.createFont();font.setFontHeightInPoints((short)18);//设置字体高度font.setItalic(true);//字体是否是斜体font.setFontName("Courier New");//设置字体名字
CellStyle cellStyle=workbook.createCellStyle();cellStyle.setFont(font);Cell cell=row.createCell(1);cell.setCellValue("This is test fonts");cell.setCellStyle(cellStyle);FileOutputStream out=new FileOutputStream("testFont.xls");workbook.write(out);out.close();} 

  

2.3.4、读取写入

    @Testpublic void testRead() throws Exception {InputStream inputStream=new FileInputStream("/Users/lihongxu6/IdeaProjects/common/common-help/test.xls");//创建一个输入流读取单元格POIFSFileSystem fileSystem=new POIFSFileSystem(inputStream);//包装类,将读取的内容放入内存中Workbook wb=new HSSFWorkbook(fileSystem);Sheet sheet=wb.getSheetAt(0);//获取第一个sheet页Row row=sheet.getRow(0);//获取第一行Cell cell=row.getCell(0);//获取第一个单元格if(cell == null||"".equals(cell)) {cell=row.createCell(3);}cell.setCellType(Cell.CELL_TYPE_STRING);cell.setCellValue("测试单元格");FileOutputStream out=new FileOutputStream("test.xls");wb.write(out);out.close();inputStream.close();}

   →  

2.3.5、数据格式化

    @Testpublic void testDataStyle() throws Exception {Workbook workbook=new HSSFWorkbook();Sheet sheet=workbook.createSheet("第一个sheet页");CellStyle style;DataFormat format=workbook.createDataFormat();Row row;Cell cell;short rowNum=0;short cellNume=1;row=sheet.createRow(rowNum++);cell=row.createCell(cellNume);cell.setCellValue(111111.25);style=workbook.createCellStyle();style.setDataFormat(format.getFormat("0.0"));cell.setCellStyle(style);row=sheet.createRow(rowNum++);cell=row.createCell(cellNume);cell.setCellValue(11111111.25);style=workbook.createCellStyle();style.setDataFormat(format.getFormat("#,##0.000"));cell.setCellStyle(style);FileOutputStream out=new FileOutputStream("testDataStyle.xls");workbook.write(out);out.close();}

  

2.3.6、文本提取

    @Testpublic void testText() throws Exception {InputStream in= new FileInputStream("/Users/lihongxu6/IdeaProjects/common/common-help/test.xls");POIFSFileSystem pfs=new POIFSFileSystem(in);HSSFWorkbook hwb=new HSSFWorkbook(pfs);ExcelExtractor excelExtractor=new ExcelExtractor(hwb);//提取文本excelExtractor.setIncludeSheetNames(false);//不需要sheet页名字
        System.out.println(excelExtractor.getText());in.close();}

输出

测试单元格    字符串    true    43665.45162    0    false    2019-07-19    2019-07-19  10:50:20    2019-07-19  10:50:20

2.3.7、遍历数据

    @Testpublic void testItor() throws Exception {InputStream in= new FileInputStream("/Users/lihongxu6/IdeaProjects/common/common-help/test.xls");POIFSFileSystem pfs=new POIFSFileSystem(in);//文件系统可接受一个输入流HSSFWorkbook hwb=new HSSFWorkbook(pfs);HSSFSheet sheet=hwb.getSheetAt(0);//获取第一个sheet页if(sheet == null) {return;}//遍历rowfor(int rowNum= 0;rowNum <= sheet.getLastRowNum();rowNum++) {HSSFRow hssfRow=sheet.getRow(rowNum);if(hssfRow== null) {continue;}//遍历cellsfor(int cellNum=0;cellNum <= hssfRow.getLastCellNum();cellNum++) {HSSFCell hssfcell=hssfRow.getCell(cellNum);if(hssfcell== null) {continue;}System.out.print(" "+getValue(hssfcell));}System.out.println();}in.close();}/*** 判断cell的数据格式* @param hssfcell* @return*/private static String getValue(HSSFCell hssfcell) {if(hssfcell.getCellType() ==HSSFCell.CELL_TYPE_BOOLEAN ) {return String.valueOf(hssfcell.getBooleanCellValue());}else if(hssfcell.getCellType() ==HSSFCell.CELL_TYPE_NUMERIC ) {return String.valueOf(hssfcell.getNumericCellValue());}else {return String.valueOf(hssfcell.getStringCellValue());}}

输出

测试单元格 字符串 true 43665.45161912037 0.0 false 2019-07-19 43665.45162721065 43665.45162721065

2.3.8、单元格对齐方式

    @Testpublic void testAlign() throws Exception {Workbook wb=new HSSFWorkbook();//创建工作薄Sheet sh=wb.createSheet();//创建sheet页Row row=sh.createRow(2);//创建一行row.setHeightInPoints(30);//设置行高
createCell(wb,row,(short)0,HorizontalAlignment.CENTER,VerticalAlignment.BOTTOM);createCell(wb,row,(short)1,HorizontalAlignment.CENTER_SELECTION,VerticalAlignment.CENTER);createCell(wb,row,(short)2,HorizontalAlignment.FILL,VerticalAlignment.JUSTIFY);createCell(wb,row,(short)3,HorizontalAlignment.GENERAL,VerticalAlignment.TOP);FileOutputStream out=new FileOutputStream("testAlign.xls");wb.write(out);out.close();}/*** 设置单元格对齐方式* @param wb 工作薄* @param row 行* @param column 列* @param halign 水平* @param valign 垂直*/private static void createCell(Workbook wb,Row row,short column,HorizontalAlignment halign,VerticalAlignment valign) {Cell cells=row.createCell(column);//创建单元格cells.setCellValue(new HSSFRichTextString("Align it"));//设置值CellStyle cellstyle=wb.createCellStyle();//创建单元格样式cellstyle.setAlignment(halign);//设置单元格水平方向对齐方式cellstyle.setVerticalAlignment(valign);//设置单元格垂直方向对齐方式cells.setCellStyle(cellstyle);//设置单元格样式}

  

2.3.9、单元格背景色

    @Testpublic void testBg() throws Exception {Workbook wb=new HSSFWorkbook();Sheet sheet=wb.createSheet("第一个Sheet页");Row row=sheet.createRow(2);Cell cell=row.createCell(1);cell.setCellValue("xx");CellStyle cellStyle=wb.createCellStyle();cellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());//前景色
        cellStyle.setFillPattern(FillPatternType.BIG_SPOTS);cell.setCellStyle(cellStyle);Cell cell2=row.createCell(3);cell2.setCellValue("yy");CellStyle cellStyle2=wb.createCellStyle();cellStyle2.setFillForegroundColor(IndexedColors.PINK.getIndex());//背景色
        cellStyle2.setFillPattern(FillPatternType.SPARSE_DOTS);cell2.setCellStyle(cellStyle2);FileOutputStream out=new FileOutputStream("testBg.xls");wb.write(out);out.close();}

  

2.3.9、单元格换行

    @Testpublic void testLine() throws Exception {Workbook workbook=new HSSFWorkbook();Sheet sheet=workbook.createSheet();Row row=sheet.createRow(0);Cell cell=row.createCell(2);cell.setCellValue("我要换行了\n有没有成功?");CellStyle cellStyle=workbook.createCellStyle();cellStyle.setWrapText(true);//设置可以换行
        cell.setCellStyle(cellStyle);row.setHeightInPoints(2*sheet.getDefaultRowHeightInPoints());//设置2倍的行高sheet.autoSizeColumn(2);//设置单元格宽度
FileOutputStream out=new FileOutputStream("testLine.xls");workbook.write(out);out.close();}

  

2.3.10、单元格合并居中

    @Testpublic void testSpan() throws Exception {Workbook wb=new HSSFWorkbook();//创建工作薄Sheet sheet=wb.createSheet();//创建sheet页Row row=sheet.createRow(1);//创建行
Cell cell=row.createCell(1);//创建单元格cell.setCellValue("单元格合并测试");/*** 合并单元格的API*/sheet.addMergedRegion(new CellRangeAddress(1,//起始行2,//结束行1,//起始列2//结束列
        ));CellStyle cellStyle=wb.createCellStyle();cellStyle.setAlignment(HorizontalAlignment.CENTER);cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);cell.setCellStyle(cellStyle);FileOutputStream out=new FileOutputStream("testSpan.xls");wb.write(out);out.close();}

  

转载于:https://www.cnblogs.com/bjlhx/p/11212638.html

001-poi-excel-基础、单元格使用操作相关推荐

  1. Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 poi excel copy

    Java Excel 复制单元格 poi Excel 复制单元格 Java Excel 复制行 Java Excel 复制 sheet 页 一.前言 1.本文记录 poi excel 实现 单元格ce ...

  2. java poi excel合并单元格 相同的列以及在有父级约束条件下合并二级列

    import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress;public clas ...

  3. 【Java】poi | excel | 合并单元格

    一.说明 1.maven项目 2.基于ruoyi-fast 二.解决方案 1.合并行 需求:合并第一行和第二行 解决: CellRangeAddress region = new CellRangeA ...

  4. python xlwings库对于excel单元格的操作

    [高心星出品] 文章目录 前言 一.xlwings获取单元格的数据与格式 二.xlwings修改单元格的数据与格式 总结 前言 在上一篇文章传送门介绍了xlwings库对于单元格的简单操作,本篇文章继 ...

  5. POI 操作Excel的单元格样式超过64000的异常问题解决

    文章目录 POI 操作Excel的单元格样式超过64000的异常问题解决 问题描述 问题原因 问题分析和解决 简单的Excel文件生成Demo 最终的解决方案 POI 操作Excel的单元格样式超过6 ...

  6. java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...

    java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...

  7. POI导出——Excel实现单元格的背景色填充

    1.背景 随着业务需求的扩充,简简单单的Excel导出已经不能满足客户的胃口了.而POI api这个家伙里面的坑有时候真的是让你分分钟没有脾气,所以打算记录下来,分享一下poi的坑及其解决方法. 2. ...

  8. Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式

    Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式 一.资源 代码实现中的带有计算公式的Excel(xls) 链接:https://pan.bai ...

  9. hssfworkbook 单元格合并后宽度不生效_一起来学习Excel批量合并单元格的操作技巧...

    在我们日常工作中,利用Excel制作表格时,合并单元格是一个让人又爱又恨的东西,合并单元格后的数据处理会带来很多麻烦,比如求和.统计等计算工作(可查阅<让我们一起来干掉Excel合并单元格的那些 ...

  10. Java POI 对Excel合并单元格的数据处理

    Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...

最新文章

  1. 知识图:从图和数据库中获取知识
  2. liunx使用ssh免密登录
  3. 第二章:2.6 LTI系统特性与单位冲击信号的关系
  4. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案
  5. Abp v2.8.0发布 路线图
  6. WordPress5.7版本下载及更新内容
  7. 如何使用 Python 将图片变为字符的模样
  8. 5010.有限状态机-电梯事件
  9. sap产品图谱 - road to sap.pdf_蛇胆陈皮胶囊化学成分及指纹图谱研究
  10. 3-5 掘金小册学习第二弹
  11. html js 导出excel文件怎么打开文件,js导出excel文件的简洁方法(推荐)
  12. MySQL50题-第6-10题
  13. 语文作文自动评阅技术及其应用
  14. nb_200905_2019_cvpr_Slow-Motion from Blurry Videos
  15. 【EXE PE】了解pe段--PE结构详解
  16. 浅析2017年医疗类APP开发前景
  17. Python实例教程Mechanize模块编写爬虫的要点解析
  18. 如何在Dockerfile中发表评论?
  19. 半同步半异步模式以及Leader_Follwer模式
  20. MYSQL数据库DML常见的命令

热门文章

  1. Sun OpenJDK JCK许可
  2. Codeforces Round #809 (Div. 2)
  3. Baklib:一站式企业知识管理平台
  4. 艾为电子年盈利1亿元:同比增速大幅下滑,科创板IPO暂时中止
  5. 年薪30万!看美和易思学子如何一路升级通关!
  6. 哈工大计算机系统大作业-程序人生-Hello’s P2P
  7. 掌握python语言可以做什么?十大应用领域介绍
  8. 计算机常用文件夹怎么关,Win10常用文件夹和最近使用的文件怎么不让显示?关闭常用文件夹...
  9. 甘特图怎么做的?项目经理必备软件
  10. 新的欧盟能源标签添加了二维码