2014-02-21 47 views
3

我使用POI爲創建的excel文件獲取Number stored as text warning。我正在嘗試顯示百分比。這question討論相同,但它是爲python。有人可以請我建議如何避免在java中使用興趣點?使用POI在Excel中存儲爲文本警告的數字

以下是我得到此警告的行。

workbook= new XSSFWorkbook(); 
sh1 = wb.createSheet("Data Sheet"); 
    cell = row.createCell(3); 
    cell.setCellValue(37 + "%"); 

基於加格拉瓦爾的答案,我是這樣做的。

XSSFDataFormat df = workbook.createDataFormat(); 
        CellStyle cs = wb.createCellStyle(); 
        cs.setDataFormat(df.getFormat("%")); 
        cell.setCellValue(0.37); 
        cell.setCellStyle(cs); 

但它只是顯示爲0.37,現在沒有警告,不是37%。

+0

的警告是真實的...你正在使用37作爲數字並追加不能作爲數字的%不能與字符一起添加。相反,如果你使用「37」而不是37,它不會給出任何錯誤。 – Sankumarsingh

+0

@Sankumarsingh那麼,afaik將數字轉換爲一個字符串會將整個事物轉換爲String。然後,即使將整個事物設置爲字符串,它也會拋出這樣的錯誤。 – rick

回答

4

您會收到警告,因爲正如它所說的,您將一個數字存儲爲文本。

你可能想要做的是:

CellStyle cs = wb.createCellStyle(); 
cs.setDataFormat(df.getFormat("%")); 
cell.setCellValue(0.37); 
cell.setCellStyle(cs); 

將存儲的號碼37號,並告訴賽過一個百分比格式字符串適用於它。哦,因爲37%是0.37,你需要存儲0.37而不是37!

編輯受歡迎的請求,這裏是一個獨立的程序,您可以使用它來查看它的行爲,爲.xls和.xlsx文件。測試POI 3.10 final,並在類路徑上使用all the required dependencies and component jars

public class TestPercent { 
    public static void main(String[] args) throws Exception { 
    System.out.println("Generating..."); 

    for (Workbook wb : new Workbook[] {new HSSFWorkbook(), new XSSFWorkbook()}) { 
     Sheet sheet = wb.createSheet("Data Sheet"); 
     Row row = sheet.createRow(0); 
     Cell cell = row.createCell(3); 

     DataFormat df = wb.createDataFormat(); 
     CellStyle cs = wb.createCellStyle(); 
     cs.setDataFormat(df.getFormat("%")); 
     cell.setCellValue(0.37); 
     cell.setCellStyle(cs); 

     String output = "/tmp/text.xls"; 
     if (wb instanceof XSSFWorkbook) { output += "x"; } 
     FileOutputStream out = new FileOutputStream(output); 
     wb.write(out); 
     out.close(); 
    } 

    System.out.println("Done"); 
    } 
} 
+0

對不起,這沒有奏效。請根據您的回答查看我編輯的問題。 – rick

+0

我剛剛試過這個POI 3.10最終的代碼,打開了生成的文件,並且完全按照預期呈現爲「37%」! – Gagravarr

+0

+1爲您的答案。你能檢查一下我編輯的問題,它是否與你嘗試的不同?或者你可以讓你顯示完整的代碼你做了什麼? – rick

3

嘗試也設置單元格類型:

cell.setCellType(Cell.CELL_TYPE_NUMERIC); 
0

這可能是有點老,但試試這個:

df.getFormat("0.00%") 
0
if(NumberUtils.isDigits(text)){ 
     titleCell.setCellValue(Integer.parseInt(text)); 
    }else{ 
     titleCell.setCellValue(text); 
    } 
+1

添加說明以解釋其原因。 – Morgoth

相關問題