java poi reader

 注意:
(1)判断行的最大数量建议使用sheet.getLastRowNum();
(2)判断每行最大列数建议使用row.getLastCellNum();

 

getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况。

getLastRowNum()获取的是最后一行的编号(编号从0开始)。

int org.apache.poi.ss.usermodel.Sheet.getPhysicalNumberOfRows()

Returns the number of physically defined rows (NOT the number of rows in the sheet)

 

int org.apache.poi.ss.usermodel.Sheet.getLastRowNum()

Gets the last row on the sheet

Returns:
last row contained in this sheet (0-based)
public class ImportExcel {

    private static Logger log = LoggerFactory.getLogger(ImportExcel.class);

    /**
     * 工作薄对象
     **/
    private Workbook wb;

    /**
     * 工作表对象
     **/
    private Sheet sheet;

    /**
     * 标题行号
     */
    private int headerNum;

    /**
     * 构造函数
     * @param path 导入文件,读取第1个工作表
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ImportExcel(String fileName, int headerNum)
            throws InvalidFormatException, IOException {
        this(new File(fileName), headerNum);
    }

    /**
     * 构造函数
     * @param path 导入文件对象,读取第1个工作表
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ImportExcel(File file, int headerNum)
            throws InvalidFormatException, IOException {
        this(file, headerNum, 0);
    }

    /**
     * 构造函数
     * @param path 导入文件
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ImportExcel(String fileName, int headerNum, int sheetIndex)
            throws InvalidFormatException, IOException {
        this(new File(fileName), headerNum, sheetIndex);
    }

    /**
     * 构造函数
     * @param path 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ImportExcel(File file, int headerNum, int sheetIndex)
            throws InvalidFormatException, IOException {
        this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
    }

    /**
     * 构造函数
     * @param file 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、
     * @throws InvalidFormatException
     * @throws IOException
     */

    /**
     * 构造函数
     * @param path 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex)
            throws InvalidFormatException, IOException {
        if (StringUtils.isBlank(fileName)){
            throw new RuntimeException("导入文档为空!");
        }else if(fileName.toLowerCase().endsWith("xls")){
            this.wb = new HSSFWorkbook(is);
        }else if(fileName.toLowerCase().endsWith("xlsx")){
            this.wb = new XSSFWorkbook(is);
        }else{
            throw new RuntimeException("文档格式不正确?");
        }
        if (this.wb.getNumberOfSheets()<sheetIndex){
            throw new RuntimeException("文档中没有工作表!");
        }
        this.sheet = this.wb.getSheetAt(sheetIndex);
        this.headerNum = headerNum;
        log.debug("Initialize success.");
    }

    /**
     * 获取行对象
     * @param rownum
     * @return
     */
    public Row getRow(int rownum){
        return this.sheet.getRow(rownum);
    }

    /**
     * 获取数据行号
     * @return
     */
    public int getDataRowNum(){
        return headerNum+1;
    }

    /**
     * 获取工作表中的最后一行的行号,以0开始
     * @return
     */
    public int getLastDataRowNum(){
        return this.sheet.getLastRowNum();
    }

    /**
     * 获取一行记录总的列数
     * @return
     */
    public int getLastCellNum(){
        return this.getRow(headerNum).getLastCellNum();
    }

    /**
     * 获取单元格的值
     * @param row 获取的行
     * @param column 获取单元格列号
     * @return 单元格的值
     */
    public Object getCellValue(Row row, int column){
        Object val = "";
        try{
            Cell cell = row.getCell(column);
            if (cell != null){
                if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
                    val = cell.getNumericCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_STRING){
                    val = cell.getStringCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){
                    val = cell.getCellFormula();
                }else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
                    val = cell.getBooleanCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){
                    val = cell.getErrorCellValue();
                }
            }
        }catch (Exception e) {
            return val;
        }
        return val;
    }
    /**
     * 导入测试
     */
    public static void main(String[] args) throws Throwable {
        ImportExcel ei = new ImportExcel("import.xls", 0);
        System.out.println(ei.getLastDataRowNum());
        System.out.println(ei.getDataRowNum());

        for (int i = ei.getDataRowNum(); i <= ei.getLastDataRowNum(); i++) {
            Row row = ei.getRow(i);
            System.out.println("Row num:"+i);
            for (int j = 0; j < ei.getLastCellNum(); j++) {
                Object val = ei.getCellValue(row, j);
                System.out.print(val+", ");
            }
            System.out.print("\n");
        }

    }

}

 

时间: 2024-12-31 02:06:07

java poi reader的相关文章

寻找个 用java poi 将xls转换成xlsx原有xls样式丢失问题的解决办法

问题描述 寻找个 用java poi 将xls转换成xlsx原有xls样式丢失问题的解决办法 最近在用java poi将原有财务部门的xls文件批量转换成xlsx格式,但是很不幸,xls原有的样式(比如:字体大小,字体颜色,背景)全部丢失了. 试着将原有xls里的style读出来设置给新的xlsx,但是遇到错误. Code: xlsxCell.setCellStyle(xlsCell.getCellStyle()); Error: java.lang.ClassCastException: or

java poi做导入excel 2007在本地没问题,在正式环境出问题

问题描述 java poi做导入excel 2007在本地没问题,在正式环境出问题 解决方案 先上传到服务器.再做导入 解决方案二: 就是先上传到服务器的 解决方案三: 你文件上传到服务器后的保存目录是D:apache.......poifiles这个目录么

Java IO: Reader And Writer

原文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) Java IO的Reader和Writer除了基于字符之外,其他方面都与InputStream和OutputStream非常类似.他们被用于读写文本.InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类.子类包括BufferedReader,PushbackReader,InputStreamRea

java poi导出excel,用excel 2013打开样式不能正常显示

问题描述 java poi导出excel,用excel 2013打开样式不能正常显示 我用的是poi3.02.用2010打开没问题,用2013打开只是合并单元格的地方,边框样式不能显示. 解决方案 java poi生成excel并修改excel样式POI 导出EXCEL样式实例POI Excel导出样式设置 解决方案二: poi设置的用07版的应该就可以 解决方案三: poi 针对03和07不同的版本会给出不同的类去处理的 你看看你的代码是 用 03还是 07 生成的 excel

java poi excel导出怎么制作标题

问题描述 java poi excel导出怎么制作标题 一个导出的excel,内容包括大标题,列标题和数据,现在这个大标题不会弄.用的是HSSFWorkbook.我是新手,希望能说的详细一点,多谢!我这样写的 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("report"); //--- sheet.addMergedRegion(new CellRangeAddress(0,0,0,7))

java+poi实现下面的格式

问题描述 java+poi实现下面的格式 请问怎么实现框框圈起来的部分?? 我的代码如下: public class ExportToExcelServiceImpl implements ExportToExcelService { @Autowired private ExportToExcelDao exportToExcelDao; public void setExportToExcelDao(ExportToExcelDao exportToExcelDao) { this.expo

java poi的excel导入数据读取

问题描述 java poi的excel导入数据读取 在使用poi时候,如何将获取的row转换成列,,现在excel模板格式就是类似这种,以行作为一个对象的第一个字段,列作为一个对象. 就比如 第一行作为对象第一个属性值的内容,第二行作为属性第二个属性值的内容,以此类推. 解决方案 你是不会读取数据吗?先循环所有的工作表,再循环所有的行,最后循环这一行里面所有的列,取出来不就完了么 解决方案二: Microsoft的Office系列产品拥有大 量的用户,Word.Excel也成为办公文件的首选.在

急求大神!~java poi 在 excel中每满6万行生成一个新的sheet

问题描述 急求大神!~java poi 在 excel中每满6万行生成一个新的sheet 急求大神!~java poi 在 excel中每满6万行生成一个新的sheet(并且在新sheet继续后面的输入) 解决方案 我能做到每N行生成一个sheet,但是没办法把excel数据继续写进去 解决方案二: 我的思路是设置个标记,在满sheet的条件后继续输入flag以后的内容,试下可行否? 解决方案三: poi性能还是有问题的.写到csv里用excel自动打开还是可以的. 解决方案四: 周一的时候做出

java poi 图片-Java POI导出Excel并添加图片问题

问题描述 Java POI导出Excel并添加图片问题 现在要利用POI导出Excel报表,并且需要将一张图片一起导出到Excel中,请问有Java中有什么方法能将图片的背景变成透明的,因为图片本身是一个公章,客户想通过程序实现盖章,所以需要将公章的图片变成透明的然后导出到Excel中,这样就不回遮挡Excel本身的内容.谢谢了! 解决方案 实现了吗?我现在也遇到这个问题了啊... 解决方案二: 实现了吗,我也遇到相同的问题,求解答