2012-06-21 18 views
5

Excelのワークシートからデータを読み込んでいます。データの一部はパーセント値で、これらの値は自動的に小数点に変換されます。つまり、90%→0.90です。私はこれを起こらないようにとにかく見つけることができない。また、Excelのシート文字列のすべてのデータではありませんか?だから、なぜ数字の書式設定が起こっているのだろうか?C#小数点以下に変換されたExcelの割合

アドバイスありがとうございます。

よろしくお願いいたします。

+2

値を読み取るために使用しているライブラリ(OpenXML SDK、NPOIなど) – andypaxo

+0

いいえ、一部のデータは数字です。そして.90は有効かつ適切なパーセンテージです。 "90%"は文字列であり、パーセンテージではありません。データを表示するときは、それに応じてフォーマットする必要があります。 – banging

答えて

2

Excelワークシートを確認します。セルのフォーマットがPercentageの場合、データはたとえば90.0%のように表示されますが、0.9として保存されます。

番号をインポートする前にセル形式をチェックすると、必要な変換を処理できます。

Range.NumberFormatプロパティは、ExcelでFormat Cellsダイアログボックスで使用するのと同じ形式の文字列を返す:あなたはInterop.Excelを使用していると仮定すると、

Percentageは、タイプ0.00%の書式文字列のショートカットにすぎず、Percentageタイプで選択されたdecimal placesは、書式文字列の小数点以下のゼロの数を単純に変更します。

enter image description here

MSDN - Range.NumberFormat

EDITセルの範囲の形式を見つける方法の

例:

nfmtはあなたのフォーマット文字列が含まれています
Worksheet wks = new Worksheet(); 
String nfmt = (string)((Range)wks.Cells[1,1]).NumberFormat; 

%を確認できますパーセンテージとして小数部を表示するようにセル(または範囲)がフォーマットされているかどうかを判断します。範囲が異なる書式文字列のセルにまたがる場合、nfmtNULLになります。

+0

ありがとうございます。私はリンクをチェックアウトしましたが、C#の例ではRange.NumberFormatメソッド/プロパティの使い方を理解するのに十分ではありませんでした。 – Kevin

+0

@Kevinはいくつかのコード例を追加しました –

3

パーセントは、Excelの書式設定アーティファクトです。実際の数は常に小数です(あなたの場合は0.9)。パーセントはあなたの番号をワークシートに表示する唯一の方法です。

列がパーセンテージであることがわかっている場合は、100を掛ける必要があります。

0
ws.Cells[1, 1].NumberFormatLocal = XlConditionValueTypes.xlConditionValuePercent; 
ws.Cells[1, 1].NumberFormat = "0,00%"; 
関連する問題