poi java写入数据异常

下面这段代码 ,运行后,表格没数据:


```java
int j =1;
        Iterator<Map.Entry<String,List<String>>> iterator=named30.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String,List<String>> entry=iterator.next();
            sheet30.getRow(j).getCell(0).setCellValue(entry.getKey());
            for(int i =1 ;i<=entry.getValue().size();i++) {
                sheet30.getRow(j).getCell(i).setCellValue(entry.getValue().get(i - 1));
            }
            j++;


        }



但是把getRow改成creatRow后就可以写入数据,如下,但是打开excel的时候会显示  通过修复或删除不可读取的内容,EXCEL已能够打开该文件。
  int j =1;
        Iterator<Map.Entry<String,List<String>>> iterator=named30.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String,List<String>> entry=iterator.next();
            sheet30.creatRow(j).getCell(0).setCellValue(entry.getKey());
            for(int i =1 ;i<=entry.getValue().size();i++) {
                sheet30.creatRow(j).getCell(i).setCellValue(entry.getValue().get(i - 1));
            }
            j++;


        }



根据你的描述,第一个问题可能是因为在 sheet30 中没有为行 j 创建单元格。如果行和单元格不存在,则无法对它们进行赋值,因此你需要在需要的时候创建行和单元格。

以下是修改后的代码(供你参考):

int j = 1;
Iterator<Map.Entry<String,List<String>>> iterator = named30.entrySet().iterator();
while(iterator.hasNext()) {
    Map.Entry<String,List<String>> entry = iterator.next();
    Row row = sheet30.getRow(j);
    if (row == null) { // 如果行不存在,则创建新的行
        row = sheet30.createRow(j);
    }
    Cell cell = row.getCell(0);
    if (cell == null) { // 如果单元格不存在,则创建新的单元格
        cell = row.createCell(0);
    }
    cell.setCellValue(entry.getKey());
    for(int i = 1; i <= entry.getValue().size(); i++) {
        Cell dataCell = row.getCell(i);
        if (dataCell == null) { // 如果单元格不存在,则创建新的单元格
            dataCell = row.createCell(i);
        }
        dataCell.setCellValue(entry.getValue().get(i - 1));
    }
    j++;
}

在上述代码中,在需要时使用 getRow() 和 createCell() 函数为行和单元格创建对象。这样,即使表格中不存在行和单元格,也可以将数据正确的写入到表格中。

另外,你之前在第二个代码示例中使用了 createRow(),虽然在这种情况下可以成功写入数据,但在实际使用中可能会导致重复创建行,因此建议使用 getRow() 和 createCell() 函数。

希望这可以解决你的问题。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7793457
  • 你也可以参考下这篇文章:java 后端及客户端用POI方式导出和下载文件(含合并单元格)
  • 除此之外, 这篇博客: java——爬虫和数据清洗中的 poi读取数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package com.rj.bd.pois.poi01;
      
    import java.io.FileInputStream;
    import java.io.IOException;
    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.ss.usermodel.Cell;
      
    /**
     * @desc   利用POI实现读取excel中的数据
     * @author WYH
     * @time   2019-10-13
     */
    public class Test02 {
      
    	public static void main(String[] args) throws IOException {
      
    		 String pathname="F:/20191013.xls";
    		 //将需要解析的excel转为流进行输出
    		 FileInputStream  fileInputStream=new FileInputStream(pathname);
    		 //实例化POI的核心类
    		 HSSFWorkbook  workBook=new HSSFWorkbook(fileInputStream);
    		 //获取当前工作簿中的第一个sheet也就是第一页                    
    		 HSSFSheet sheet = workBook.getSheetAt(0);
    		 //获取当前sheet中有多少个行
    		 int totalRowNums = sheet.getPhysicalNumberOfRows();
      
    		 for(int i =0;i
    		 {
    		  HSSFRow row = sheet.getRow(i);//取出每一行
    		  int totalCellNums = row.getPhysicalNumberOfCells();//获取一共有多少列
    			  for(int k=0;k
    			  {
    				Cell cell = row.getCell(k);
    				//System.out.print(cell.getStringCellValue());
    				     String cellValue = getValue(cell);
    				     System.out.print(cellValue+"\t");
      
    			  }
    			 System.out.println();
    		 }
      
      
      
      
    	}
      
    /**
     * @desc  格式化输出
     * @param cell
     * @return
     */
    private static String getValue(Cell cell) {
    		if (cell.getCellType()==Cell.CELL_TYPE_NUMERIC) 
    		{ 
    			 int d = (int)cell.getNumericCellValue();
    			 return String.valueOf(d);
    		}
    		else if (cell.getCellType()==Cell.CELL_TYPE_BOOLEAN)
    		{
    			String.valueOf(cell.getBooleanCellValue());
    		}
    		return cell.getStringCellValue();
    	}
      
    }
      
    
  • 以下回答由chatgpt基于相关博客总结生成:

    很遗憾,参考资料中提供的内容并不能帮助我理解问题出在哪里,因此我无法给出解决方案。建议提供更具体的代码或错误信息,以及问题出现场景的详细描述,以便更好地分析和解决问题。