1


要使用我的项目,我需要从 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
}

提前致谢

4

3 回答 3

2

我看到两个问题

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”作为内部索引。而且我只创建一次该行。

于 2013-05-12T14:44:38.303 回答
0

问题似乎出在您的代码中的以下语句:

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

i 值将在 0-10 之间不断变化。我认为您需要在创建 100 行方面使用以下内容:

             cell[k] = sheetTest.createRow(k).createCell(i);
于 2013-05-12T14:39:20.927 回答
0

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

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
}

太感谢了

于 2013-05-12T16:15:09.920 回答