2011-06-28 760 views
8

我需要使用Java庫Apache POI for spreadsheets生成.xls(Excel)文件。Apache POI for Excel:將單元格類型設置爲整個列的「文本」

該文件將包含列A中的電話號碼列表,格式爲「0221 ....」或「+49221 ...」 - 因此Excel默認將其解釋爲數字單元格。這很糟糕,因爲領先的0或+會被修剪。

爲了解決這個問題,我可以使用cell.setCellType(Cell.CELL_TYPE_STRING),它工作正常,但僅限於我爲此設置的特定單元。

我該如何應用整個列的設置(即使對於所有剩餘的單元格,用戶將輸入額外的電話號碼)?

在Excel中,這是可能的:選擇整列,並應用細胞類型(設置保存後生還/加載的文件。)

但我找不到POI的正確方法。

  • 首先我假設它應該是類似sheet.setDefaultCellType(int colNum)的東西。但我找不到像這樣的東西(可能我只是瞎了?圖書館有很多similar methods用於應用文本樣式,如「對齊中心」等)
  • 然後我想:也許它只能應用到NamedRange或類似的東西,但我還沒有設法弄清楚這是如何工作的...

回答

10

請問this有幫助嗎?

通過創建以@符號的數據格式,並使用在一個CellStyle 對象,然後將其傳遞給setDefaultColumnStyle()方法,它是 可以設置列的默認數據類型,在這種情況下,文字。 我還沒有進一步實踐,但懷疑有可能做 類似的其他風格的對象設置默認類型爲 數字或甚至自定義的格式,如貨幣。

+0

看起來不錯!一旦我回到項目中,我會嘗試這個解決方案。謝謝! –

+0

This Works ... Thanks! – jahroy

+0

我也這麼做了。 var cllstyl = this.Workbook.CreateCellStyle(); var workbook = new HSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat(「@」); sheet.SetDefaultColumnStyle(1,cllstyl);但它不顯示「文本」格式,而是顯示「日期」。請幫助我。 –

16

這裏的弗拉德的回答啓發一些示例代碼:

DataFormat fmt = workbook.createDataFormat(); 
CellStyle textStyle = workbook.createCellStyle(); 
textStyle.setDataFormat(fmt.getFormat("@")); 
worksheet.setDefaultColumnStyle(0, textStyle); 

上述代碼設置的默認樣式工作TEXT的第一列。

謝謝,弗拉德!

+4

+1顯示實際的代碼。 – Magnilex

+0

非常感謝你,它爲我工作:) –

0

Vlad: 這使得大部分問題得以解決。我發現所有空行都按照我想要的格式進行了格式化。然而,我有初始零點的行看起來並且工作得很好;然而,如果我不得不用另一個從零開始的值來更改預先存在的值,則零消失。因此,我建議在單元格中創建值以將setCellStyle重置爲文本時添加代碼。這裏有一些片段: 方法public細胞createCell(行r!BBjNumber細胞,BBjString值!)

c!=#this!.createCell(r!, cell) 
c!.setCellValue(value!) 
c!.setCellStyle(#text_format!) 

methodret!C

#text_format! = #wb!.createCellStyle() 
#text_format!.setDataFormat(#format!.getFormat("@")) 

methodend

這可能有助於初始零一些其他的唯一搜索。 謝謝發佈。 Alex

相關問題