下面这段代码 ,运行后,表格没数据:
```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() 函数。
希望这可以解决你的问题。
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();
}
}
很遗憾,参考资料中提供的内容并不能帮助我理解问题出在哪里,因此我无法给出解决方案。建议提供更具体的代码或错误信息,以及问题出现场景的详细描述,以便更好地分析和解决问题。