2012-01-19 208 views
13

我一直在網站上搜索並搜索答案,但找不到解決方案 - 所有人都主要討論如何添加新的數字格式添加到文檔並應用。如何使用OpenXML SDK應用格式化(格式化的單元格值)來獲取單元格值

我需要的是將單元格值作爲應用格式的字符串 - 即與Excel顯示的字符串相同。

我已經想到,沒有簡單的方法或內置函數會返回單元格的現成格式化值。

所以在我看來,要獲得我需要做的兩件事情的價值: 1.獲取格式字符串。 2.使用此字符串格式化單元格值。

但我在這兩個步驟都有問題。

人們可以很容易得到CellFormat實例,其中將包括NumberFormatId:

CellFormat cellFormat = (CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex); 

但如何與這個NumberFormatId獲得格式字符串,如果ID對應的標準定義的格式嗎? (即低於160)他們不在電子表格文檔中,我不相信他們應該在應用程序中進行硬編碼。

此外,一旦格式字符串以某種方式獲得,如何將其應用於單元格值?到目前爲止我的理解是,代碼應該檢查單元格值的類型,如果是Number - 使用格式字符串將其轉換爲字符串。

我發現this page其中提到使用Microsoft.Office.Excel.Interop,但我寧願留在OpenXML SDK只。

總的來說,我很驚訝,很難在Web上找到這個問題的明確答案,因爲我認爲這將是許多開發人員在日常工作中需要的。

+0

這裏找到一些不錯的代碼:http://joymonscode.blogspot.se/2013/10/reading-excel-cell-with-number.html –

回答

8

男性,這是一個很難......我會在這裏添加東西,我發現這可能是值得..

首先是讓電池的編號格式(一旦你有CellFormat:

string format = excel.WorkbookPart.WorkbookStylesPart.Stylesheet.NumberingFormats.Elements<NumberingFormat>() 
      .Where(i => i.NumberFormatId.ToString() == cellFormat.NumberFormatId.ToString()) 
      .First().FormatCode; 

有關這一點,你可以去了解更多信息:NumberingFormats

進出口試圖找出如何這種格式適用於cell.CellValue財產......我想這就是你要走的路

好吧,閱讀ClosedXml代碼(它的開源代碼),似乎很容易獲得格式。

只需將值文本轉換爲其類型(int,double等)並調用傳遞格式的ToString方法。我正在嘗試用String.Format來做,並沒有奏效。我測試了ToString,它可以工作,但還是有一些東西丟失了。

我建議你看看這個類,並從GetFormattedString()方法獲取代碼,就像@El G在他的評論中告訴的那樣。

Bassicaly你必須添加這樣的事情:

double d = double.Parse(cell.CellValue.InnerText); 
string val = d.ToString(format); 

希望它可以幫助你......

+0

非常感謝分享這些信息,圭多!請讓我知道,如果你會找到一種方法來應用格式。 –

+4

另一方面,如果在你的解決方案中,你不必僅限於OpenXML SDK,你可以使用[ClosedXML](http://closedxml.codeplex.com/)庫,其中所有的操作似乎很多比純OpenXML更容易(並且它建立在OpenXML之上)。 在[單元格值示例](http://closedxml.codeplex.com/wikipage?title=Cell%20Values&referringTitle=Documentation)中的ClosedXML文檔中,有以下行: 'String booleanFormattedString = cellBoolean.GetFormattedString();' 顯然它做我們正在尋找。另外挖掘這種方法的代碼可能有助於理解。 –

+0

我添加了一些有用的信息!認爲你的問題將在這一點上得到解決! –

0

如果你想利用細胞值與應用的格式一樣,同樣在Excel中顯示,使用.Cell對象的Text屬性。就像這樣:

String formattedValue = cell.Text 
+0

單元格中似乎沒有Text屬性類,僅在CellValue下(這不是Excel中顯示的內容) –

相關問題