• Java读取excel表格


    Java读取excel表格

    一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢

    什么是Apache POI?

    Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。

    Apache POI

    Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。

     Circle

     

    工作簿

    这是创建或维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包。是实现此接口的两个类,如下所示:

    • HSSFWorkbook : 这个类有读取和.xls 格式和写入Microsoft Excel文件的方法。它与微软Office97-2003版本兼容。

    • XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它与MS-Office版本2007或更高版本兼容。

    HSSFWorkbook

    它是在org.apache.poi.hssf.usermodel包的高层次的类。它实现了Workbook 接口,用于Excel文件中的.xls格式。下面列出的是一些本类下的方法和构造函数。

    类的构造函数

    S.No.构造函数和说明
    1

    HSSFWorkbook()

    从头开始创建一个新的HSSFWorkbook对象时。

    2

    HSSFWorkbook(DirectoryNode directory, boolean preserveNodes)

    创建一个特定的目录中一个新的HSSFWworkbook对象。

    3

    HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)

    给定一个POIFSFileSystem对象和特定的目录中,它创建了一个SSFWorkbook对象读取指定的工作簿。

    4

    HSSFWorkbook(java.io.InputStream s)

    创建使用输入流中的新HSSFWorkbook对象时。

    5

    HSSFWorkbook(java.io.InputStream s, boolean preserveNodes)

    构建在输入流的POI文件系统。

    6

    HSSFWorkbook(POIFSFileSystem fs)

    使用POIFSFileSystem对象构造的新HSSFWorkbook对象时。

    7

    HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)

    给定一个POIFSFileSystem对象时,它会创建一个新的HSSFWorkbook对象时读取指定的工作簿。

    这些构造内的常用参数:

    • directory : 这是从POI文件系统处理的目录。

    • fs :它是包含簿流该POI的文件系统。

    • preservenodes : 这是决定是否保留其他节点像宏的可选参数。它消耗大量的内存,因为它存储在内存中的所有POIFileSystem(如果设置)。

    注意:HSSFWorkbook类包含了许多方法;然而,它们仅与XLS格式兼容。在本教程中,重点是在Excel文件格式的最新版本。因此,HSSFWorkbook类的方法,这里没有列出。如果需要这些类的方法,那么请参照POI-HSSFWorkbook类API在 https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html.

    XSSFWorkbook

    它是用于表示高和低层次Excel文件格式的类。它属于org.apache.xssf.usemodel包,并实现Workbook接口。下面列出的是这个类的方法和构造函数。

    类的构造函数

    S.No.构造函数和说明
    1

    XSSFWorkbook()

    从头开始创建一个新的XSSFworkbook对象。

    2

    XSSFWorkbook(java.io.File file)

    构造从给定文件中的XSSFWorkbook对象。

    3

    XSSFWorkbook(java.io.InputStream is)

    构造一个XSSFWorkbook对象,通过缓冲整个输入流到内存中,然后为它打开一个OPCPackage对象。

    4

    XSSFWorkbook(java.lang.String path)

    构建一个给定文件的完整路径的XSSFWorkbook对象。

    Sheet

    Sheet是在org.apache.poi.ss.usermodel包的接口,它是创建具有特定名称的高或低级别的电子表格的所有类的超接口。电子表格的最常见的类型是工作表,它被表示为单元的网格。

    HSSFSheet

    这是在org.apache.poi.hssf.usermodel包的类。它可以创建Excel电子表格,它允许在sheet 方式和表数据格式。

    类的构造函数

    S.No.构造函数及描述
    1

    HSSFSheet(HSSFWorkbook workbook)

    创建新HSSFSheet通过调用HSSFWorkbook从头开始创建一个表。

    2

    HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)

    创建HSSFSheet表示给定表对象。

    XSSFSheet

    这是代表了Excel电子表格的高级别代表的一类。这在org.apache.poi.hssf.usermodel包下。

    类的构造函数

    S.No.构造函数及描述
    1

    XSSFSheet()

    创造了新的XSSFSheet- 调用XSSFWorkbook从头开始创建一个表。

    2

    XSSFSheet(PackagePart part, PackageRelationship rel)

    创建XSSFSheet表示给定包的一部分和关系。

    类方法

    S.No.方法和描述
    1

    addMergedRegion(CellRangeAddress region)

    添加单元的合并区域(因此这些单元格合并形成一个)。

    2

    autoSizeColumn(int column)

    调整列宽,以适应的内容。

    3

    iterator()

    此方法是用于rowIterator()的别名,以允许foreach循环

    4

    addHyperlink(XSSFHyperlink hyperlink)

    注册超链接的集合中的超链接此工作表格上

    对于此类的其余的方法,请参阅完整的API在:
    https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html.

    这是在org.apache.poi.ss.usermodel包的接口。它是用于一排的电子表格的高层表示。它是代表了POI库的行所有类的超接口。

    XSSFRow

    这是在org.apache.poi.xssf.usermodel包的类。它实现了Row接口,因此它可以在电子表格中创建行。下面列出的是这个类在方法和构造函数。

    类方法

    S.No.描述
    1

    createCell(int columnIndex)

    创建新单元行并返回。

    2

    setHeight(short height)

    设置短单位的高度。

    对于此类的其余的方法,参考如下链接:
    https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

    单元格

    这是在org.apache.poi.ss.usermodel包的接口。它是代表了单元在电子表格中的行中的所有类的超接口。

    单元格可以使用各种属性,例如空白,数字,日期,错误等单元格被添加到一个行之前应具有(基于0)自己的编号。

    XSSFCell

    这是在 org.apache.poi.xssf.usermodel 包的类。它实现了单元格界面。它是单元在电子表格中的行的一个高层次的表示。

    现在我用Java实现读取excel表格

    代码实现

    public static void excel() throws Exception {
            //用流的方式先读取到你想要的excel的文件
            FileInputStream fis=new FileInputStream(new File(System.getProperty("user.dir")+"/src/excel.xls"));
            //解析excel
            POIFSFileSystem pSystem=new POIFSFileSystem(fis);
            //获取整个excel
            HSSFWorkbook hb=new HSSFWorkbook(pSystem);
            System.out.println(hb.getNumCellStyles());
            //获取第一个表单sheet
            HSSFSheet sheet=hb.getSheetAt(0);
            //获取第一行
        int firstrow=    sheet.getFirstRowNum();
        //获取最后一行
        int lastrow=    sheet.getLastRowNum();
        //循环行数依次获取列数
            for (int i = firstrow; i < lastrow+1; i++) {
                //获取哪一行i
                Row row=sheet.getRow(i);
                if (row!=null) {
                    //获取这一行的第一列
                int firstcell=    row.getFirstCellNum();
                //获取这一行的最后一列
                int lastcell=    row.getLastCellNum();
                //创建一个集合,用处将每一行的每一列数据都存入集合中
                List<String> list=new ArrayList<>();
                for (int j = firstcell; j <lastcell; j++) {
                    //获取第j列
                    Cell cell=row.getCell(j);
                    
                    if (cell!=null) {
                        System.out.print(cell+"	");
                        list.add(cell.toString());
                    }
                }
                
                User user=new User();
                if (list.size()>0) {
                    user.setUsername(list.get(1));
                    user.setPassword(list.get(2));
                }
                BaseDAO dao=new BaseDAO();
                dao.save(user);
                System.out.println();
                }
            }
            fis.close();
        }
  • 相关阅读:
    帧同步资料收集
    随机数种子问题
    【转】 DOTA2中的伪随机及其lua实现
    C++ 异常机制分析
    细说new与malloc的10点区别
    static关键字总结
    C++11 并发编程基础(一):并发、并行与C++多线程
    论一个程序员的自我修养
    gSoap的多线程程序
    面试常见问题:
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/7395970.html
Copyright © 2020-2023  润新知