当前位置: 首页 > 知识库问答 >
问题:

在Excel-Java poi中编写错误

葛航
2023-03-14

我想这里的问题在for循环,如果有人能帮助它,它将非常感谢。谢了。

这是我的代码:-...

    @CheckMethodAuthority("PFV2300&limt_print")
    public static void importExcel(Upload upload_data) throws IOException, 
    NoSuchFieldException, SecurityException, IllegalArgumentException, 
    IllegalAccessException, 

ParseException {    

    String fileName = upload_data.getFileName();
    logger.info("H1:" + fileName);

    final int expectedSheetIndex = 0;  // 
   Sheet sheet = ExcelUtil.openWorkSheet(new ByteArrayInputStream(upload_data.asBytes()), fileName, expectedSheetIndex);

    SYS4000 account = (SYS4000)renderArgs.get("account");

    StringBuffer fileUploadErrorMsg = new StringBuffer();

    final int expectedTitleRowNum = 1;  // 
    List<POS20083> pos20083List = readAllCellsOfSheet(sheet, expectedTitleRowNum, account.user_no, fileUploadErrorMsg);

    int addItem =0;
    int upItem =0;
    int failItem =0;

    File filePath = new File("D:\\play framework workspace\\Coupon_Platform\\public\\sample\\excel\\PFV2300-sample.xlsx");
    InputStream file = new FileInputStream(filePath);
    XSSFWorkbook WB = new XSSFWorkbook(file);

    sheet = WB.getSheetAt(0);

    for (POS20083 POS20083: pos20083List)
    {

        for (int i=0; i<=pos20083List.size(); i++)
        { 
           Row row = sheet.getRow(i);
           Cell cell_store_no=  (sheet.getRow(i).getCell(0));
           Cell cell_control_qty =  (sheet.getRow(i).getCell(1));
           Cell cell_error_msg = sheet.getRow(i).getCell(2);
           sheet.autoSizeColumn(2);

           for (int j=0; j<=sheet.getFirstRowNum(); j++)
              {
                  if (row == null) 
                  {
                      row = sheet.createRow(i);
                      continue;
                  }
                  if (cell_error_msg == null) 
                  {
                      cell_error_msg = sheet.getRow(i).createCell(2);
                      continue;
                  }
                  if (row.getRowNum()==0)
                  {
                      continue;
                  }

                  POS20083 pos20083 = POS20083.find("merchant_no= ? and store_no= ?",POS20083.merchant_no, POS20083.store_no).first();

                 String sql =  insert into pos20083 (pos20081_id, merchant_no, store_no, control_qty, id)select 60, ?1, ?2, ?3,  pos20083_seq.nextval from dual;


                 String sql2 = " Select count(store_no) from twc_store"
                             + " Where exists (select store_no"
                             + " from pos20083"
                             + " where twc_store.store_no = ?4)";

                 String sql3 = " Select count(store_no) from pos20083"
                         + " Where exists (select store_no"
                         + " from twc_store"
                         + " where pos20083.store_no = ?5)";

                           EntityManager entityManager = JPA.em();
                           EntityTransaction transaction = JPA.em().getTransaction();
                           Query query = entityManager.createNativeQuery(sql);
                           Query query2 = entityManager.createNativeQuery(sql2);
                           Query query3 = entityManager.createNativeQuery(sql3);

                           query2.setParameter(4, POS20083.store_no);
                           query3.setParameter(5, POS20083.store_no);

                          if (!transaction.isActive())
                          {
                              transaction.begin();
                          }
                          int insertCount2 = query2.executeUpdate();
                          int insertCount3 = query3.executeUpdate();

                          int storeCounts = ObjectUtil.getInteger(query2.getSingleResult());
                          int storeCounts_pos20083 = ObjectUtil.getInteger(query3.getSingleResult()); 

                            if (storeCounts == 0 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) >0) 
                             {

                              cell_error_msg.setCellValue("Store Number ID doesn't exists in [twc_store]");

                              sheet.autoSizeColumn(2);
                             }  
                            if (storeCounts == 0 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) <=0) 
                            {

                             cell_error_msg.setCellValue("Store Number ID doesn't exists in [twc_store] and and control Quantity coudn't be less or equal ZERO");

                             sheet.autoSizeColumn(2);
                            }

                             if (storeCounts == 1 && storeCounts_pos20083 ==0 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) > 0) 
                             {
                              query.setParameter(1, POS20083.merchant_no); 
                              query.setParameter(2, POS20083.store_no); 
                              query.setParameter(3, POS20083.control_qty);

                              int insertCount = query.executeUpdate();



                              addItem++;
                              cell_error_msg.setCellValue(" ");
                              sheet.autoSizeColumn(2);

                             }

                             if (transaction.isActive()) 
                             {
                                 transaction.commit();
                             }

                          file.close();

           if (storeCounts == 1 && storeCounts_pos20083 ==0 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) <=0) 
         {
              cell_error_msg.setCellValue("control Quantity coudnot be less or equal ZERO");
              sheet.autoSizeColumn(2);

            //failItem++;
            //file.close();
         }
           if (storeCounts == 1 && storeCounts_pos20083 ==1 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) <=0) 
           {
                cell_error_msg.setCellValue("Store Number ID already exists and control Quantity coudn't be less or equal ZERO");
                sheet.autoSizeColumn(2);
                          }

           if (storeCounts == 1 && storeCounts_pos20083 ==1 && ObjectUtil.getInteger(cell_control_qty.getNumericCellValue()) > 0) 
         { 
              cell_error_msg.setCellValue("Store Number ID already exists");
              sheet.autoSizeColumn(2);

         }

       }

    }  
       failItem++; 
  }
           file.close();
           FileOutputStream fileout = new FileOutputStream(filePath);
           WB.write(fileout);
           fileout.flush();
           fileout.close();

共有1个答案

东方弘壮
2023-03-14

我已经发现了漏洞并修复了它

有三个循环

1-for(POS20083 POS20083:pos20083List)2-for(int i=0;i<=pos20083List.size();i++)3-for(int j=0;j<=sheet.getFirstrownum();j++)

因此,如果我们删除第一个,这在这里是不有用的,因为我们总是从excel表中获得数据,所以它会工作得很好······

第三个也一样,它在我的任务中也不是很有用...

所以我只需要这个循环

我们可以用这行替换pos20083list,它返回行的实数

int rows=sheet.getPhisicalNumberOfRows()-1

非常感谢Layne Bernardo的努力

 类似资料:
  • 我试图在我的测试自动化框架中实现一个数据驱动的方面。我已经创建了一个fe函数,它似乎工作正常,可以检索参数的列/行数,从特定单元格获取数据,更新特定单元格等等。 我现在正在用一个基本上有2列的脚本进行测试。第一列是用户名,第二列是密码。我可以遍历这些行,列没有问题。 我遇到了一个问题,如果有一个空白单元格,它会崩溃,但我通过一些错误处理解决了这个问题,如果有一个黑色单元格,它会返回字符串“空单元格

  • 问题内容: 有人可以指出我正确的方向,以便在Java中写入Excel文件吗?我不了解我在网上找到的链接。您能给我发送链接还是我可以遵循的任何方式? 谢谢J 问题答案: 并不是平庸,但是Apache POI可以做到。您可以在此处找到一些代码示例: http //poi.apache.org/spreadsheet/examples.html

  • 我已经创建了从excel中获取元素的脚本。 这是我的剧本 如果我的测试用例通过,我想在下一列写通过,如果失败,然后“失败”。 如何做到这一点,需要做些什么!!!

  • 我将开发一个工作流程,我需要从Oracle DB中获取一些数据并在Excel文件中写入ResultSet。在开始之前,我想做一些测试。但是,我得到了以下运行时异常java.lang.NoClassDefFoundError.详细信息可以在下面找到。我知道我错过了一些非常愚蠢的东西,但我正在努力寻找答案。我感谢你的帮助。 这些是我正在使用的外部罐子 poi-4.1.2.jar poi-ooxml-4

  • 我是新的Python和工作在我的第一个项目。我试图让我的代码从一个电子表格中复制数据列,并将其附加到当前存在于主表中的数据中。我能够捕获每个工作表中的数据,并创建一个新的主列表,该列表结合了两个数据集,但我很难将其写入文件。当我测试打印组合列表时,它们看起来是正确的,但是当我添加代码将列表写入文件时,它会挂起。 你能提供的任何帮助都会非常有用! 下面是我的代码。这是我得到的错误 Traceback

  • 我正在使用POI()的流式工作表编写一个大型Excel表(超过一百万条记录),但我得到的是。下面是我的代码: