2012-06-13 147 views
1

我是Java POI的新手,我試圖用Java POI覆蓋Excel文件。讓我清楚,我不想每次都打開一個新的.xls文件我構建代碼,但是我編寫的代碼是這樣做的。這樣做的目的是,我將在Excel中構建圖表,並從數據庫中讀取圖表的值,並使用Java POI將其寫入Excel文件。這裏是我的代碼:使用Java POI覆蓋Excel文件

HSSFWorkbook workbook = new HSSFWorkbook(); 
HSSFSheet firstSheet = workbook.createSheet("oldu"); 
HSSFSheet secondSheet = workbook.createSheet("oldu2"); 

HSSFRow rowA = firstSheet.createRow(6); 
HSSFCell cellA = rowA.createCell(3); 
cellA.setCellValue(new HSSFRichTextString("100")); 
cellA.setCellValue(100); 

HSSFRow rowB = secondSheet.createRow(0); 
HSSFCell cellB = rowB.createCell(0); 
cellB.setCellValue(new HSSFRichTextString("200")); 

FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(new File("CreateExcelDemo.xls")); 
    workbook.write(fos); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (fos != null) { 
     try { 
      fos.flush(); 
      fos.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

所以你想打開一個現有的Excel文件,並修改/添加更多的數據呢? – ChadNC

+2

我想,它已經覆蓋了excel文件。這個有什麼問題? –

+0

是ChadNC.For這一個,我把圖表放在上面並關閉,然後嘗試給單元格一個值,它打開新頁面,我猜是因爲Java產生的文件中沒有圖表。 – user1431829

回答

1

總是使用相同的文件名,並且當您運行該程序時它將覆蓋該文件。

編輯 如果要修改現有的Excel文件,然後看看HERE向下滾動到的「讀取或修改現有的文件」一節。

+0

它不這樣做。正如我所提到的之前當我嘗試這樣做時,它不顯示我之前手動創建的圖表,然後用java編輯它 – user1431829

+2

那麼你的問題是不正確的,因爲覆蓋文件是你問的,覆蓋文件就是你的代碼所做的。你想要的是修改和現有的Excel表單不覆蓋。 – ChadNC

0

問題是Apache POI不支持Excel文件格式的所有功能,包括圖表。因此,無法生成包含POI的圖表,並且在打開現有的帶有POI的Excel文件並對其進行修改時,Excel文件中的某些當前「對象」可能會丟失,因爲POI無法處理它,並且在寫入時只寫入生成的新信息和現有的可處理的信息。

這被Apache假定爲POI的缺陷之一。

我們對現有的Excel文件進​​行了類似的處理,填充了新的數據,但現有的Excel文件只包含格式樣式,並且它們使用POI保存,但我認爲圖表非常有問題。使用POI填充數據以更新現有圖表是不可能的。

+0

由於圖表是手動創建的,不使用POI,因此可以使用HSSF修改圖表數據,並使用POI將其寫入新的電子表格,並且POI將嘗試保持現有記錄不變。這樣做可能會有問題,但這是可能的。 – ChadNC

+0

但問題是,我不能看到我創建Java後手動創建的圖表 – user1431829