首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成2个excel文件Java

生成2个excel文件Java
EN

Stack Overflow用户
提问于 2016-10-12 06:36:56
回答 1查看 30关注 0票数 0

我有两个excel文件。超过12.xls和excel_user.xls。我正在比较这两个excel文件中的单元格,并找到我已经做过的复制。我想做的是,

  • 将来自excel_user的所有副本放在excel_1中
  • 将所有没有重复的内容放到excel_2中。

但是,我在这一行上有java.lang.NullPointerException

cell3 = sh4.getRow(z).getCell(0,Row.CREATE_NULL_AS_BLANK);

这是我的代码:

代码语言:javascript
复制
        HSSFRow row = null;
        HSSFRow row2 = null;
        HSSFRow row3 = null;
        String filename = "C:/Excel/excel12.xls";
        String filename2 = "C:/Excel/excel_user.xls";
        String filename3 = "C:/Excel/excel_output1.xls";

        FileInputStream fis = null;
        FileInputStream fis2 = null;
        FileInputStream fis3 = null;
        FileInputStream fis4 = null;

            try{

                fis = new FileInputStream(filename);
                fis2 = new FileInputStream(filename2);
                fis3 = new FileInputStream(filename3);
                fis4 = new FileInputStream(filename3);

                HSSFWorkbook wb1 = new HSSFWorkbook(fis);
                HSSFWorkbook wb2 = new HSSFWorkbook(fis2);
                HSSFWorkbook wb3 = new HSSFWorkbook(fis3);
                HSSFWorkbook wb4 = new HSSFWorkbook(fis4);

                Sheet sh1 = wb1.getSheetAt(0);
                Sheet sh2 = wb2.getSheetAt(0);
                Sheet sh3 = wb3.getSheetAt(0);
                Sheet sh4 = wb4.getSheetAt(0);

                Iterator<?> rows = sh1.rowIterator();
                Iterator<?> rows2 = sh2.rowIterator();
                Iterator<?> rows3 = sh3.rowIterator();

                Cell cell = null;
                Cell cell2 = null;
                Cell cell3 = null;

                while(rows.hasNext()){
                    row = (HSSFRow) rows.next();
                }

                while(rows2.hasNext()){
                    row2 = (HSSFRow) rows2.next();
                }

                while(rows3.hasNext()){
                    row3 = (HSSFRow) rows3.next();
                }

                int x = 1;
                int y = 1;
                int z = 1;
                do{
                    String str = sh1.getRow(x).getCell(0).toString();
                    cell = sh1.getRow(x).getCell(0);


                        //check for duplicate account names
                        for(int i = 1; i < row2.getRowNum()+1; i++){

                                if(str.equals(String.valueOf(sh2.getRow(i).getCell(0)))){
                                    cell2 = sh3.getRow(y).getCell(0, Row.CREATE_NULL_AS_BLANK);
                                    cell2.setCellValue(formatter.formatCellValue(cell));
                                    y++;

                                }else{
                                    cell3 = sh4.getRow(z).getCell(0, Row.CREATE_NULL_AS_BLANK);
                                    cell3.setCellValue(formatter.formatCellValue(cell));
                                    z++;
                                }
                        }                       
                        x++;
                }while(x < row.getRowNum()+1);

                fis.close();
                fis2.close();
                fis3.close();
                fis4.close();

                FileOutputStream outFile =new FileOutputStream(new File("C:/Excel/excel_1.xls"));
                FileOutputStream outFile2 =new FileOutputStream(new File("C:/Excel/excel_2.xls"));

                wb3.write(outFile);
                wb4.write(outFile2);
                outFile.close();
                outFile2.close();

            }catch(Exception e){
                e.printStackTrace();
            }

对不起我的密码。并提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 06:44:05

您已经告诉POI通过将Row.CREATE_NULL_AS_BLANK传递给getCell()来创建丢失的单元格。但是,您没有检查该行本身是否存在。如果被请求的行不在文件中,则POI将返回null

试试像这样的东西:

代码语言:javascript
复制
Row rowZ = sh4.getRow(z);
if (rowZ==null) {
    rowZ=sh4.createRow(z);
}
cell3 = rowZ.getCell(0, Row.CREATE_NULL_AS_BLANK);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39991974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档