2012-01-19 29 views
13

私はグーグルで答えを探していましたが、解決策を見つけることができませんでした。数値形式を文書に適用して適用します。OpenXML SDKで適用された書式設定(セル値の書式設定)でセル値を取得する方法

私が必要とするのは、適用された書式設定(つまり、Excelで表示されるのと同じ文字列)のセル値を取得することです。

私は既にセルの既定値を返す簡単な方法や組み込み関数がないと考えました。

だから私には2つのことをする価値があると思われます。 1.フォーマット文字列を取得します。 2.この文字列を使用してセルの値を書式設定します。

しかし、私は両方のステップで問題があります。

一つの簡単NumberFormatIdが含まれますCellFormatインスタンスを取得することができます:

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

しかし、どのようにidは、標準の定義済みの形式のいずれかに該当する場合は、このNumberFormatIdでフォーマット文字列を取得しますか? (つまり、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; 

あなたがに行くことができます:cell.CellValueプロパティにこの形式を適用する方法を見つけようとしNumberingFormats

イム...私はあなたが行かなければならない道厥と思う

Ok、ClosedXmlコード(オープンソース)を読むと、フォーマットを取得するのが簡単なようです。

値のテキストをその型(int、doubleなど)に変換し、その形式を渡すToStringメソッドを呼び出すだけです。私はString.Formatとdidntの仕事でそれをしようとしていました。私はToStringをテストして動作しますが、それでもまだ見つからないものがあります。

このクラスを見て、GetFormattedString()メソッドからコードを取得することをお勧めします。

Bassicalyあなたはこのような何かを追加する必要があります:

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

はあなたが適用された書式でセルの値を取りたい場合は、それはあなたが使用し、Excelで表示されたと同じ、...

+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

を役に立てば幸いCellオブジェクトの.Textプロパティ。このように:

String formattedValue = cell.Text 
+0

セルにTextプロパティが表示されませんクラス、CellValue(Excelで表示されているものではない) –

関連する問題