zoukankan      html  css  js  c++  java
  • poi读写Excel文件

    • jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好
    • poi功能比jxl强大但是比较吃内存,支持计算公式

           关于jxl具体可以参考    http://www.cnblogs.com/dashuai01/p/4776277.html

    package test_poi;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Date;
    
    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;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.junit.Test;
    
    public class TestPoi {
        @Test
        public void createWorkBook() throws Exception {
            Workbook wb = new HSSFWorkbook(); // 创建工作簿
            Sheet sheet = wb.createSheet("first sheet"); // 创建工作表并且定义工作表名称
            Row createRow = sheet.createRow(0); // 定义第一行
            // Row createRow2 = sheet.createRow(1);// 定义第二行
            createRow.createCell(0).setCellValue("hehe"); // 第一行第一个列,并赋值
            for (int i = 0; i < 10; i++) {
                createRow.createCell(i + 1).setCellValue("hehe" + i); // 循环第一行
                // createRow2.createCell(i).setCellValue("第二行" + i); // 循环第二行
            }
            OutputStream fileOut = new FileOutputStream("d:\poi.xls");// 输出流
            wb.createSheet("two");// 创建第二个工作表并定义名称
            wb.write(fileOut); // 将文件输出到文件中
            fileOut.close(); // 关闭输出流,,
        }
    
        @Test
        public void readExl() throws Exception {
            InputStream is = new FileInputStream("d:\poi.xls");
            POIFSFileSystem fs = new POIFSFileSystem(is);
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet sheet = wb.getSheetAt(0);
            // 获得总行数,第一行算标题不算在行数内,所以总的行数应该是lastRowNum+1
            int lastRowNum = sheet.getLastRowNum();
            System.out.println(lastRowNum);
            // 直接根据行号获取信息
            HSSFRow row = sheet.getRow(0);// 获取第一行(标题)
            // 获取当前行总列数
            int physicalNumberOfCells = row.getPhysicalNumberOfCells();
            System.out.println("标题总列数=" + physicalNumberOfCells);
            // 单元格内容格式
            int cellType = row.getCell(3).getCellType();// 格式是:
                                                        // HSSFCell.CELL_TYPE_STRING...
            // 获取不同类型的值
            double numericCellValue = row.getCell(0).getNumericCellValue();
            boolean booleanCellValue = row.getCell(1).getBooleanCellValue();
            Date dateCellValue = row.getCell(2).getDateCellValue();
    
            System.out.println(cellType + "********");
    
        }
    }
  • 相关阅读:
    django添加检查用户名和手机号数量接口
    1.vue发送短信逻辑
    Celery 配置与基本使用 并且用celery 一步发送短信
    递归基础_并查集思想_二叉树最大深度问题
    递归基础_汉诺塔问题_经典的多状态问题_整体法/分两个函数互相递归
    递归基础_全排列+改写_组合数
    递归基础_组合数_输出的各种办法(递归)_(持续更新)
    关于gpu版本的tensorflow+anaconda的一些安装问题(持续更新)
    吴恩达课程笔记_1-1~1-4
    bfs和dfs辨析—基础复习(从stack和queue的角度来理解区别,加深理解,不再模糊)
  • 原文地址:https://www.cnblogs.com/dashuai01/p/4778017.html
Copyright © 2011-2022 走看看