2009-11-25 57 views
1

现在每当我调用这个函数时,excel文件workbook.xls的B3单元格中的值被更新。我需要改变这个函数,以便每当我调用这个函数时,不应该创建新的excel文件,但是应该在第一次调用中的A1顺序,第二次调用中的A2,第三次调用中的顺序等等。你能帮我解决这个问题吗?java - 追加excel值

private static void readFromFile(String filename) { 
     // TODO Auto-generated method stub 
     BufferedReader bufferedReader = null; 

     try { 

      //Construct the BufferedReader object 
      bufferedReader = new BufferedReader(new FileReader(filename)); 

      String line = null; 

      while ((line = bufferedReader.readLine()) != null) { 
       //Process the data, here we just print it out 

       HSSFWorkbook wb = new HSSFWorkbook(); 
       HSSFSheet sheet = wb.createSheet("new sheet"); 
       HSSFRow row = sheet.createRow(2); 
       int s_row=1; 
       row.createCell(s_row).setCellValue(line); 
       s_row++; 
      // row.createCell(1).setCellValue(new Date()); 
       FileOutputStream fileOut = new FileOutputStream("c:\\workbook.xls"); 
       wb.write(fileOut); 
       fileOut.close(); 



       // System.out.println(line); 
      } 

     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      //Close the BufferedReader 
      try { 
       if (bufferedReader != null) 
        bufferedReader.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
+0

顺便说一句,对于你们在家玩的人来说,上面的代码来自:http://www.javadb.com/read-from-file-using-bufferedreader – iokevins 2009-11-25 08:04:25

回答

0

请参阅下面的完整功能(如果有点笨拙)实现上面的请求。具体请注意:(1)while循环只有创建并填充细胞; (2)HSSFWorkbook,Sheet,Row和s_row的初始化发生在while循环之外; (3)文件一次写入磁盘,最后; (4)单元格以索引0而不是索引1开始; (5)您需要指定CreateRow(0)以获取电子表格中的第一行;和(6)我用Sheet和Row来代替......你的里程可能会有所不同! :)

快乐编码:

import org.apache.poi.xssf.usermodel.*; 
import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.hssf.usermodel.*; 
import java.io.*; 

public class SpreadSheet { 

    /** 
    * Reads text from a file line by line 
    */ 
    public void readFromFile(String filename) { 

     BufferedReader bufferedReader = null; 
     HSSFWorkbook wb; 
     Sheet sheet; 
     Row row; 
     Cell aCell; 
     int s_row; 
     FileOutputStream fileOut = null; 

     try { 

      //Construct the BufferedReader object 
      bufferedReader = new BufferedReader(new FileReader(filename)); 

      String line = null; 

      s_row = 0; 
      wb = new HSSFWorkbook(); 
      sheet = wb.createSheet("new sheet"); 
      row = sheet.createRow(0); 
      fileOut = new FileOutputStream("workbook.xls"); 

      while ((line = bufferedReader.readLine()) != null) 
      {   
        aCell = row.createCell(s_row++); 
        aCell.setCellValue(line); 
      } 

      // Do this once 
      wb.write(fileOut); 
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      //Close the BufferedReader 
      try { 
       if (bufferedReader != null) 
        bufferedReader.close(); 
       if (fileOut != null) 
        fileOut.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new SpreadSheet().readFromFile("testinput.txt"); 
    } 
} 

我testinput.txt文件包含以下数据:

1 
2 
3 
4 
5 
6 
7 

运行上面的Java代码后,Microsoft Excel工作表文件中包含的数据在单元格A1到G1中。

0

我看到每次调用函数时都会创建一个新文件。相反,您需要打开现有文件,获取需要修改的工作表,然后修改值。 贝娄是用于打开该文件,并获得第一板代码:

try { 
     inputStream = new FileInputStream(InputFile); 
    }catch (FileNotFoundException e) { 
     System.out.println ("File not found in the specified path."); 
     e.printStackTrace(); 
    } 

    try { 
     fileSystem = new POIFSFileSystem (inputStream); 
    } catch (IOException e1) { 
     System.out.println("Cannot create POIFSFileSystem object using the file specified!"); 
     e1.printStackTrace(); 
    }  

    try { 
     workBook = new HSSFWorkbook(fileSystem); 
    } catch (IOException e) { 
     System.out.println("Cannot create HHSFWorkbook from POIFSFileSystem object"); 
     e.printStackTrace(); 
    } 

    HSSFSheet sheet = workBook.getSheetAt(0); 

这一点,你将不得不修改您所需要的细胞和保存文件后。