2016-02-14 92 views
0

什麼是讓CellFormatType用於單元(DATENUMBERTEXTGENERAL)正確的方法是什麼?使用POI找出格式的單元

cell.getCellStyle.getDataFormat()返回一個Short值,它不映射到上述常量。

由於以下原因,我不能僅僅使用cell.getCellType。對於某些行,可能會有值前面的字符串前綴,如<>>。在這種情況下,getCellType將返回CELL_TYPE_STRING。所以獲得底層類型的唯一方法是查看列的格式。

感謝

+0

Excel允許您將單元格格式化爲數百種不同的格式 - 它不僅僅是您指定的4種格式! – Gagravarr

+0

謝謝,但我只對基本類型,字符串,數字,日期感興趣。編輯了這個問題來解釋原因。因此,如果我能找到獲取CellFormatType的方法,應該能夠查看該值落入哪個範圍。 – user1052610

+0

實際上,CellFormatType Enum Constant Summary的聯機文檔僅列出了四個值。 – user1052610

回答

3

我不知道從CellCellFormatType直接的路線,但也有不同的方法來確定特定類型:

  • 將軍? getDataFormat將爲0(或更可靠,getDataFormatString將爲「常規」)
  • 日期?退房DateUtil.isCellDateFormatted
  • 文字?通常你會檢查Cell.getCellType = CELL_TYPE_STRING,但既然你說你不能這樣做(見下面的註釋),你也可以嘗試檢查getDataFormatString是「@」還是「text」(兩種都是純文本的可能性)
  • 數量?再次,通常您只需檢查CELL_TYPE_NUMERIC。請注意,日期也被視爲數字,因此請先檢查日期。

(如果單元格類型爲CELL_TYPE_FORMULA,你應該檢查getCachedFormulaResultType代替)

我不能只使用cell.getCellType原因如下。對於某些行,可能有一個字符串前綴,如<>或>前面的值

我並不熟悉這個問題。也許你有一個自定義的格式在數字前面加上字符?我上面的文本檢測筆記在這種情況下可能會對您有所幫助,但我建議您仔細檢查一下,您的電子表格實際上是否具有相關信息(例如,當您重新打開工作表時,Excel不會很聰明):記錄單元格類型,格式和格式字符串,並確認實際上在相關單元格上存在差異。您的單元格可能實際上被保存爲文本,並且沒有明顯的標記。在這種情況下,您需要爲特定場景添加一些特殊的啓發式。


最後,由於您對CellStyle.getDataFormat返回的值感到困惑,它只是一個表單索引→格式字符串表中的索引。你可以(也可以說通常應該)使用getDataFormatString直接獲取字符串格式。標準單元格格式在BuiltinFormats中列出,您可以使用它作爲參考來查看您可能找到的格式字符串(但始終檢查格式字符串,而不是ID,否則將無法正確檢測自定義格式)。

相關問題