Java Excel I / 0问题

为了处理我的项目,我需要从apache学习POI Api。 所以我决定创build一个小程序来创build一个电子表格,并用一些值填充它的单元格。

问题是它没有做它应该做什么,我敢肯定,逻辑是正确的,我怀疑这是与数据写入文件的方式有关,但我无法修复它,因为我有一个处理I / O的经验很差。

这是我的代码:

package excel; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class Excel { public static void main(String[] args) { Workbook workbook = new HSSFWorkbook(); Sheet sheetTest = workbook.createSheet("TestPOI"); Cell[] cell = new Cell[100]; int k = 0, i=0, j=0; for( i=0; i<10; i++){ for (j = 0; j < 10; j++) { System.out.println(k); cell[k] = sheetTest.createRow(i).createCell(j); cell[k].setCellValue(k); k++; } } try{ FileOutputStream output = new FileOutputStream("MyWorkbook.xls"); workbook.write(output); output.close(); } //end try catch(Exception e){ e.printStackTrace(); } //end catch } // end of the main method } 

提前致谢

我看到两个问题

1)你没有分隔行和列。 这意味着你总是使用相同的行/列

 cell[k] = sheetTest.createRow(i).createCell(i); 

2)您每次都创build一个行。 你应该只在外层循环中做一次。

你想要什么:

 for( i=0; i<10; i++){ HSSFRow row = sheetTest.createRow(i); for (j = 0; j < 10; j++) { System.out.println(k); cell[k] = row.createCell(j); cell[k].setCellValue(k); k++; } } 

请注意,我已经将createCell()调用更改为使用“j”作为内部索引。 而且我只创build一次行。

这个问题似乎是在你的代码中的这个声明:

  cell[k] = sheetTest.createRow(i).createCell(i); 

我的价值将在0-10之间不断变化。 我认为你需要使用以下方面来创build100行:

  cell[k] = sheetTest.createRow(k).createCell(i); 

我已经更正了代码,现在一切正常。
这是正确的代码:

 package excel; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class Excel { public static void main(String[] args) { Workbook workbook = new HSSFWorkbook(); Sheet sheetTest = workbook.createSheet("TestPOI2"); // Creating an array of cells Cell[] cell = new Cell[100]; int k = 0, i=0, j=0; for( i=0; i<10; i++){ Row row = sheetTest.createRow(i); for (j = 0; j < 10; j++) { cell[k] = row.createCell(j); cell[k].setCellValue(k); k++; } try{ FileOutputStream output = new FileOutputStream("MyWorkbook.xls"); workbook.write(output); output.close(); } //end try catch(Exception e){ e.printStackTrace(); } //end catch } // end of the main method } 

非常感谢