0

Apache poi で、既存の Excel ファイルから新しい Excel ファイルに列データを書き込むメソッド「writeData」を記述します。それはうまくいきます。しかし、このメソッドを再度呼び出そうとすると、以前のデータが欠落していました。なんで?誰でも私を助けることができますか?

public class ReadData {

    /**
     * @param args
     */
    Workbook wb, wb1;
    Sheet sheet, sheet1;
    Row row;
    Row row1;   
    static int cell;
    Cell cell1;


    static ArrayList<Cell> list1 = new ArrayList<Cell>();
    static ArrayList<Cell> list2 = new ArrayList<Cell>();



    public static ArrayList<Cell> readData(String filename, int cellNum, ArrayList array){

    try{        

        InputStream inp = new FileInputStream(filename);
        Workbook wb = WorkbookFactory.create(inp);
        Sheet sheet = wb.getSheetAt(0);



        for (int j=sheet.getLastRowNum(); j>0; j--) {

            Row row = sheet.getRow(j);
            Cell cell = row.getCell(cellNum);


            array.add(cell);



            System.out.println(cell);

        }


    }catch(Exception e){
        System.out.println("Wrong!" + e.getMessage());
        e.getStackTrace();
        System.out.println(e.getStackTrace());
        }
    return array;
    }


    public static void writeData(int cellNo, ArrayList<Cell> array){


        Workbook wb1 = new HSSFWorkbook();
        FileOutputStream fos = null;

            try{
                fos = new FileOutputStream("3.xls");
                Sheet sheet1 = wb1.createSheet("Data");



                for(int i = 0; i < array.size(); i++){
                Row row1 = sheet1.createRow(i);
                Cell cell1 = row1.createCell(cellNo);
                cell1.setCellValue(array.get(i).getNumericCellValue());
                }

                wb1.write(fos);
                fos.close();

                }catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    }



    public static void main(String[] args) {

    readData("1.xls",0,list1);  
    writeData(0,list1);
    readData("2.xls",0,list2);  
    writeData(1,list2);
}

}
4

1 に答える 1

0

問題は、ワークブックを最初から開始しFileOuputStream、ファイルを上書きすることです。

あなたはそれをあなたのファイルにリンクしているあなたのワークブックを開く必要があります。そのためには、とInputStreamを使用してExcelを作成します。

InputStream input = new FileInputStream("3.xls");
wb1 = new HSSFWorkbook(input);

書くために、本当にを使用する必要があるかどうかは正確にはFileOuputStreamわかりません。おそらく、ブックを適切に閉じるだけで十分です(XSSFWorkbooksで動作します)。

OutputStreamは機能しますが、入力が出力と等しい場合はエラーが発生する可能性があります。

于 2012-08-13T08:17:39.413 に答える