excel,Apache Poi,无法写入单元格

时间:2014-02-03 06:36:05

标签: java apache-poi

我收到了一个项目,要求我从excel文件中提取信息, 对数据进行一些计算并将信息写回excel表。对于一些 我的数据的一部分只是输入细胞的原因。  下面给出一个例子。

package ExcelDocs;

import java.io.FileOutputStream;

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;

public class Trial{

    public static void main(String[] agrs){

        Workbook wb=new XSSFWorkbook();
        Sheet ws=wb.createSheet("Testing");
        Cell c1=ws.createRow(0).createCell(0);
        c1.setCellValue("hello");
        Cell c2=ws.createRow(1).createCell(1);
        c2.setCellValue("how are you?");
        for(int i=1;i<7;i++){
            Cell c3=ws.createRow(i).createCell(0);
            c3.setCellValue(i);
        }

        try{ 
            FileOutputStream out=new FileOutputStream("ANISH.xlsx");
            wb.write(out);
            out.close();
        } catch(Exception e){
            System.out.println("unable to write to excel");
        }

    }
}

此代码应生成以下输出:

      COL1     COL2
ROW1  hello
ROW2           how are you?
ROW3
ROW4
ROW5
ROW6
ROW7

而是将其作为输出

      COL1     COL2
ROW1  hello
ROW2           
ROW3
ROW4
ROW5
ROW6
ROW7
谁能告诉我为什么“你好吗?”被删除? 我在其他程序中也遇到了同样的问题。

3 个答案:

答案 0 :(得分:2)

这一行被for循环中的行覆盖:

Cell c2=ws.createRow(1).createCell(1);

答案 1 :(得分:1)

那是因为你在这个for循环中覆盖了索引1处创建的行。

for(int i=1;i<7;i++){ // when i = 1
    Cell c3=ws.createRow(i).createCell(0); // it recreates a row at that index
    c3.setCellValue(i); // and re-writes it here in the loop.
}

您需要更改循环以开始从索引2创建行。

for(int i=2; i<7; i++) { // now it starts from row index 2 and doesn't overwrite your previous row created at index 1
    Cell c3=ws.createRow(i).createCell(0); 
    c3.setCellValue(i);
}

答案 2 :(得分:1)

for循环中,createRow会破坏您之前创建的行。

因此,在循环之前,当Cell c2=ws.createRow(1).createCell(1);进行更改时,会保存Row对象。

Row r = Cell c2=ws.createRow(1);
r.createCell(1);

并在循环中使用r