首页 > java 读取excel_Java12POI操作Excel

java 读取excel_Java12POI操作Excel

        Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。

        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。

先上简单的测试代码:

package com.xing.studyTest.poi;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory;import lombok.extern.slf4j.Slf4j;/** *  学习POI处理Excel * @author xinghua * */@Slf4jpublic class POIStudy {   public static void main(String[] args) {     String fileName = "/Users/xinghua/Downloads/indicators.xlsx";    try {       InputStream inputStream = new FileInputStream(fileName);          Workbook workbook = WorkbookFactory.create(inputStream);      Sheet sheet = workbook.getSheetAt(0);//获取sheet页面      int begin = sheet.getFirstRowNum();      int end = sheet.getLastRowNum();      log.info("sheet页名称为:"+sheet.getSheetName()+"| 最后一行为:"+begin+"-"+end);      Row firstRow = sheet.getRow(sheet.getFirstRowNum());//第一行标题      Row towRow = sheet.getRow(sheet.getFirstRowNum()+1);//第二行字段        List titleList = new ArrayList<>();        List fieldList = new ArrayList<>();        for (int i = 0; i          titleList.add(firstRow.getCell(i).getStringCellValue());          fieldList.add(towRow.getCell(i).getStringCellValue());        }        log.info("2.获取字段列表ok | 字段个数:"+fieldList.size()+"个。");        log.info(fieldList.toString());    } catch (Exception e) {       e.printStackTrace();    }          }  }

ad1960cae92401c9ac3044216bf75c0a.png

可以看到控制台输出了所有的信息,和下列Excel文件中一致:

fc35e631226ace44a7691ab00beddadb.png

Workbook

        Workbook 是一个接口,表示Excel工作簿,它也是创建新工作表等的顶层对象。

        子类有:

         HSSFWorkbook 工作簿 HSSF:MS-Excel 97-2003(.xls),基于BIFF8格式的JAVA接口。

     XSSFWorkbook SpreadsheetML工作簿 XSSF:MS-Excel 2007+(.xlsx),基于OOXML格式的JAVA接口。

         SXSSFWorkbook 写入非常大的文件时用它 子类 SXSSFWorkbookWithCustomZipEntrySource 

        HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

        用HSSFSheet、HSSFCell等各种对象来代表 页、行、单元格、字体等等。

        我大致查看了Workbook的函数,功能很多,不一一尝试了,用的时候直接在下面找就好:

Workbook 中的函数int getActiveSheetIndex(); //获取活动工作表void setActiveSheet(int sheetIndex);//设置活动工作表int getFirstVisibleTab(); //获取excel中选项卡列表中显示的第一个选项卡void setFirstVisibleTab(int sheetIndex);//设置在excel的选项卡列表中显示的第一个选项卡。void setSheetOrder(String sheetname, int pos); //设置给定工作表的外观顺序。void setSelectedTab(int index); //设置打开工作表时实际看到其数据的选项卡。void setSheetName(int sheet, String name); //设置工作表名称。String getSheetName(int sheet); //获取工作表名称int getSheetIndex(String name); //按姓名返回工作表的索引int getSheetIndex(Sheet sheet); //返回给定工作表的索引Sheet createSheet(); //为此工作簿创建一个工作表,将其添加到工作表中并返回高层代表。用它来创建新的工作表。Sheet createSheet(String sheetname); //为此工作簿创建新工作表,并返回高级表示。用它来创建新的工作表。Sheet cloneSheet(int sheetNum); //从工作簿中的现有工作表创建一个工作表。IteratorsheetIterator(); //按工作表顺序返回工作簿中工作表的迭代器。包括隐藏的和非常隐藏的表。int getNumberOfSheets(); //获取工作簿中电子表格的数量Sheet getSheetAt(int index); //获取给定索引处的工作表对象。Sheet getSheet(String name); //获取具有给定名称的工作表void removeSheetAt(int index); //移除给定索引处的工作表Font createFont(); //创建新字体并将其添加到工作簿的字体表中Font findFont(boolean bold, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline); //查找与提供的属性相匹配的字体int getNumberOfFontsAsInt(); //获取字体表中的字体数量Font getFontAt(int idx); //获取给定索引号处的字体CellStyle createCellStyle(); //创建新的单元格样式,并将其添加到工作簿的样式表中int getNumCellStyles(); //获取工作簿包含的样式数量CellStyle getCellStyleAt(int idx); //获取给定索引处的单元格样式对象void write(OutputStream stream) throws IOException; //将此工作簿写出到输出流中。void close() throws IOException; //关闭从中读取工作簿的基础输入资源(文件或流)。一旦调用了这个函数,就不要再调用了。应该对工作簿执行操作、更新或读取。int getNumberOfNames(); //返回此工作簿中已定义名称的总数Name getName(String name); //具有指定名称的已定义名称。如果未找到,则为null。List extends Name> getNames(String name); //返回具有给定名称的所有已定义名称。List extends Name> getAllNames(); //返回已定义名称的列表。如果没有找到,则返回空列表。Name createName(); //在此工作簿中创建新的(未初始化的)定义名称void removeName(Name name); //删除已定义的名称int linkExternalWorkbook(String name, Workbook workbook);  //添加允许引用指定外部工作簿的公式添加到此工作簿所需的链接。如"[我的工作簿]工作表3!$ a5”要添加到文件中,必须先记录一些链接信息。给定的外部工作簿链接后,就可以添加使用它的公式。每个工作簿只需要链接一次。这种链接仅适用于编写公式。void setPrintArea(int sheetIndex, String reference); //为提供的工作表设置打印区域void setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow); //为了方便Java程序员维护指针。String getPrintArea(int sheetIndex); //检索指定工作表的打印区域的引用,即使没有指定,工作表名称也会附加到引用中。如果没有定义打印区域,则返回空字符串void removePrintArea(int sheetIndex); //删除指定工作表的打印区域MissingCellPolicy getMissingCellPolicy(); //检索当前策略,该策略规定当从行中获取缺失或空白单元格时应做什么。默认值是返回空白和空单元格。void setMissingCellPolicy(MissingCellPolicy missingCellPolicy); //设置从行中获取缺失或空白单元格时的处理策略DataFormat createDataFormat(); //返回此工作簿的数据格式实例。int addPicture(byte[] pictureData, int format); //向工作簿添加图片。List extends PictureData> getAllPictures(); //从工作簿中获取所有图片CreationHelper getCreationHelper(); //返回一个对象,该对象处理HSSF和XSF所需的各种实例的具体类的实例化。boolean isHidden(); //如果此工作簿在图形用户界面中不可见,则返回falsevoid setHidden(boolean hiddenFlag); //设置是否隐藏 boolean isSheetHidden(int sheetIx); //检查工作表是否隐藏。boolean isSheetVeryHidden(int sheetIx); //检查Sheet是否非常隐蔽。void setSheetHidden(int sheetIx, boolean hidden); //隐藏或取消隐藏工作表。SheetVisibility getSheetVisibility(int sheetIx); //获取此工作簿中工作表的可见性(可见、隐藏、非常隐藏)void setSheetVisibility(int sheetIx, SheetVisibility visibility);  //隐藏或取消隐藏工作表。请注意,当前设置为活动工作表的工作表(新创建的工作簿中的工作表0或通过setActiveSheet()设置的工作表)不能隐藏。void addToolPack(UDFFinder toopack); //在此工作簿中注册新的工具包。void setForceFormulaRecalculation(boolean value); //打开工作簿时,应用程序是否应执行完全重新计算。boolean getForceFormulaRecalculation(); //打开工作簿时是否要求Excel重新计算所有公式。SpreadsheetVersion getSpreadsheetVersion(); //返回此工作簿的电子表格版本int addOlePackage(byte[] oleData, String label, String fileName, String command) throws IOException; //将具有给定内容的OLE包管理器对象添加到工作表中

0dfb550397c5ef59d541c057095108fc.png

女神镇楼

End

更多相关:

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...