为了处理我的项目,我需要从 apache 了解 POI Api。
因此,我决定创建一个小程序,用于创建电子表格并用一些值填充其单元格。
问题是它没有做它应该做的事情,我很确定逻辑是正确的,我怀疑这与数据写入文件的方式有关,但我无法修复它我在处理 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) 您每次都在创建行。每个外循环只应执行一次此操作。
你想要什么:
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”作为内部索引。而且我只创建该行一次。
关于Java Excel I/0 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508398/