• java 提取excel文件中的数据


    1.首先文件转为字节型数组

    byte[] bytes = multipartFile.getBytes();

    2.

    字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。创建字节数组输入流对象有以下几种方式。

    接收字节数组作为参数创建:

    ByteArrayInputStream bis = new ByteArrayInputStream(bytes);

    3.使用的是JAVA POI实现的导出Excel;

    POI 提供了对2003版本的Excel的支持 ---- HSSFWorkbook

    POI 提供了对2007版本以及更高版本的支持 ---- XSSFWorkbook

    定义工作簿

    workbook = new XSSFWorkbook(inputStream);

    定义工作表

    // 默认取第一个子表
    xssfSheet = xssfWorkbook.getSheetAt(0);

    4.取标题
    //定义行
            //默认第一行为标题行,index = 0
            XSSFRow titleRow = xssfSheet.getRow(0);
    5.循环取数据
    //循环取每行的数据
            for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {
                XSSFRow xssfRow = xssfSheet.getRow(rowIndex);
                if (xssfRow == null) {
                    continue;
                }
    
                Map<String, String> map = new LinkedHashMap<String, String>();
                //循环取每个单元格(cell)的数据
                for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {
                    XSSFCell titleCell = titleRow.getCell(cellIndex);
                    XSSFCell xssfCell = xssfRow.getCell(cellIndex);
                    map.put(getString(titleCell),getString(xssfCell));
                }
                list.add(map);
            }

    getLastRowNum  

        如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行则返回 n-1;

    getPhysicalNumberOfRows  

        获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m;

    6.不同类型的单元格分别取不同的数据。

    /**
         * 把单元格的内容转为字符串
         * @param xssfCell 单元格
         * @return 字符串
         */
        public static String getString(XSSFCell xssfCell) {
            if (xssfCell == null) {
                return "";
            }
            if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {
                return String.valueOf(xssfCell.getNumericCellValue());
            } else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {
                return String.valueOf(xssfCell.getBooleanCellValue());
            } else {
                return xssfCell.getStringCellValue();
            }
        }
    7.写入
    /**
         * 把内容写入Excel
         * @param list 传入要写的内容,此处以一个List内容为例,先把要写的内容放到一个list中
         * @param outputStream 把输出流怼到要写入的Excel上,准备往里面写数据
         */
        public static void writeExcel(List<List> list, OutputStream outputStream) {
            //创建工作簿
            XSSFWorkbook xssfWorkbook = null;
            xssfWorkbook = new XSSFWorkbook();
    
            //创建工作表
            XSSFSheet xssfSheet;
            xssfSheet = xssfWorkbook.createSheet();
    
            //创建行
            XSSFRow xssfRow;
    
            //创建列,即单元格Cell
            XSSFCell xssfCell;
    
            //把List里面的数据写到excel中
            for (int i=0;i<list.size();i++) {
                //从第一行开始写入
                xssfRow = xssfSheet.createRow(i);
                //创建每个单元格Cell,即列的数据
                List sub_list =list.get(i);
                for (int j=0;j<sub_list.size();j++) {
                    xssfCell = xssfRow.createCell(j); //创建单元格
                    xssfCell.setCellValue((String)sub_list.get(j)); //设置单元格内容
                }
            }
    
            //用输出流写到excel
            try {
                xssfWorkbook.write(outputStream);
                outputStream.flush();
                outputStream.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
    
        }
     
    文学使思想充满血与肉,他比科学和哲学更能给予思想以巨大的明确性和说明性。
  • 相关阅读:
    AWTK-MVVM:用 C 语言实现 Model
    MTU1500情况下,发送1460和1448长度数据
    linux mtu =1500情况下tcpdump抓包分析
    自己总结的pycharm超常用快捷键
    ICMP协议是IP层协议
    IP 分段
    ubuntu18.04安装中文输入法
    tcp 窗口大小
    flask学习笔记(二)
    开始学习前的环境安装
  • 原文地址:https://www.cnblogs.com/zpsblog/p/13855339.html
Copyright © 2020-2023  润新知