Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Excel I/0问题_Java_Excel_Io_Apache Poi - Fatal编程技术网

Java Excel I/0问题

Java Excel I/0问题,java,excel,io,apache-poi,Java,Excel,Io,Apache Poi,为了使用我的项目,我需要从apache学习POIAPI。 所以我决定创建一个小程序,创建一个电子表格并用一些值填充其单元格 问题是它没有做到它应该做的,我很确定逻辑是正确的,我怀疑这与数据写入文件的方式有关,但我无法修复它,因为我在处理I/O方面的经验非常差。 这是我的代码: package excel; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.a


为了使用我的项目,我需要从apache学习POIAPI。 所以我决定创建一个小程序,创建一个电子表格并用一些值填充其单元格

问题是它没有做到它应该做的,我很确定逻辑是正确的,我怀疑这与数据写入文件的方式有关,但我无法修复它,因为我在处理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
}
excel软件包;
导入java.io.FileOutputStream;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
公共类Excel{
公共静态void main(字符串[]args){
工作簿=新的HSSF工作簿();
Sheet sheetTest=workbook.createSheet(“TestPOI”);
单元格[]单元格=新单元格[100];
int k=0,i=0,j=0;

对于(i=0;i而言,问题似乎在于代码中的以下语句:

         cell[k] = sheetTest.createRow(i).createCell(i);
i值将在0-10之间不断变化。我认为在创建100行时需要使用以下方法:

             cell[k] = sheetTest.createRow(k).createCell(i);
我看到两个问题

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++;
     }
 }

for(i=0;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
}
excel软件包;
导入java.io.FileOutputStream;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
公共类Excel{
公共静态void main(字符串[]args){
工作簿=新的HSSF工作簿();
Sheet sheetTest=workbook.createSheet(“TestPOI2”);
//创建单元格数组
单元格[]单元格=新单元格[100];
int k=0,i=0,j=0;

对于(i=0;i它应该做什么?它应该做什么?换句话说,你没有预料到的具体情况是什么?它应该用一些值填充100个单元格(10*10)。相反,它只填充10个单元格(最后一行),你可以自己运行代码并查看。感谢你的回答它实际上是
单元格[k] =sheetTest.createRow(i).createCell(j);
我试图传达这样的信息:当调用createRow()时,传递的是i的值,i的值将始终在0-10之间,因为您有一个嵌套循环。如果在createRow()中传递k,那么您应该能够创建100行。