桐&露 2023-01-29 15:23 采纳率: 40%
浏览 16

利用jxl实现批量信息转入出现的空指针报错

问题遇到的现象和发生背景

利用java的excel工具jxl进行对excel的读写,希望将1234.xls和12345.xls中的sheet1里的信息全都放到123456.xls中的sheet1中

遇到的现象和发生背景,请写出第一个错误信息

错误信息为:Exception in thread "main" java.lang.NullPointerException
常见的空指针报错问题

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
 //------------------------------------------------
 //first step:获取文件路径的列表
 //------------------------------------------------
    String basePath="C:\\Users\\10798\\Desktop\\test\\read";
    String[] path_list=new File(basePath).list();

 //--------------------------------------------
 //second step:EXCEL的读写
 //--------------------------------------------
  //write表的路径设置
     String url_write = "C:\\Users\\10798\\Desktop\\test_excel\\out\\123456.xls";
  //设置行计数器————为了能够在第一张表读写完成后,第二张表能继续写在后面而不是覆盖
     int count = 0;

 //开搞!!!!!!!!!
     try{
      //write表的设置
          //文件流
              FileOutputStream os = new FileOutputStream(url_write);
          //创建工作薄
              WritableWorkbook workbook_write = Workbook.createWorkbook(os);
          //创建新的一页
              WritableSheet sheet_write = workbook_write.createSheet("First Sheet", 0);

      //writing by reading
          for (int a = 0; a <= path_list.length-1;a++)
          {
          //动态获取read表路径
              Workbook workbook_read = Workbook.getWorkbook(new File("C:\\Users\\10798\\Desktop\\test_excel\\read\\"+path_list[a]));   //这里输入表格文档的路径及名字
              Sheet sheet_read = workbook_read.getSheet(0);  //下标从0开始表示第一个工作表
          //写入
              for (int i = 0; i < sheet_read.getRows(); i++)    //行数
              {
                  for (int j = 0; j < sheet_read.getColumns(); j++)   //列数
                  {
                      Cell cell_read = sheet_read.getCell(j, i);  //这是一个单元格  这里注意j i的顺序不要颠倒
                      jxl.write.Label l1=new jxl.write.Label(j, i+count, String.valueOf(cell_read.getContents())); // i j注意哈
                      sheet_write.addCell(l1);
                      //System.out.print(cell.getContents()+" "); //获取单元格内容并输出
                  }
                  System.out.println(); //换行
              }

          //计数器增值
              count = count + sheet_read.getRows();

          //动态关闭read资源
              workbook_read.close();

          }
          //执行写入
              workbook_write.write();
          //关闭资源
              workbook_write.close();
              os.close();
      }

      //必要的异常处理设置
      catch (IOException e) {
          e.printStackTrace();
      }
      catch (BiffException e) {
          e.printStackTrace();
      }
      catch (RowsExceededException e) {
          e.printStackTrace();
      }
      catch (WriteException e) {
          e.printStackTrace();
      }
运行结果及详细报错内容

运行结果报的是第45行,即for (int a = 0; a <= path_list.length-1;a++)

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

自己筛选过,45行本行没发现问题,单独择出来执行,path_list不为null且元值存在,其他地方不知道哪里出了问题
且:无法DEBUG直接报错

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

1条回答 默认 最新

  • Car1na 2023-01-29 15:43
    关注

    可以考虑排查一下数据类型,数据的实际数据类型与读取后你获取转换的数据类型是否匹配

    评论

报告相同问题?

问题事件

  • 创建了问题 1月29日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3