2012-06-21 7 views
5

Ich lese Daten aus einem Excel-Arbeitsblatt. Einige der Daten sind Prozentwerte und diese Werte werden automatisch in Dezimalzahlen umgewandelt - dh 90% -> 0,90. Ich kann es anscheinend nicht finden, um das zu verhindern. Sind nicht alle Daten in den Excel-Zeichenketten enthalten? Warum also würde Zahlenformatierung überhaupt stattfinden?C# Excel-Prozentwerte in Dezimalzahlen konvertiert

Jeder Rat wird geschätzt.

Grüße.

+2

Es würde helfen wissen, welche Bibliothek Sie die Werte lesen verwenden (OpenXML SDK, NPOI, etc.) – andypaxo

+0

NO, einige Daten sind Zahlen. Und .90 ist ein gültiger und angemessener Prozentsatz. "90%" ist eine Zeichenfolge und kein Prozentsatz. Sie sollten entsprechend formatieren, wenn Sie Ihre Daten zurück anzeigen. – banging

Antwort

2

Überprüfen Sie das Excel-Arbeitsblatt - wenn die Zellen als Percentage formatiert sind, werden die Daten nur als zB 90.0% angezeigt, aber als 0.9 gespeichert.

Wenn Sie das Zellenformat vor dem Importieren der Nummer überprüfen, können Sie alle erforderlichen Konvertierungen durchführen.

Angenommen, Sie verwenden Interop.Excel:

Die Range.NumberFormat Eigenschaft gibt die gleichen Formatstrings Sie im Format Cells Dialogfeld in Excel verwenden würden. Percentage ist nur eine Verknüpfung zu einer Formatzeichenkette vom Typ 0.00%, bei der decimal places im Typ Percentage einfach die Anzahl der Nullen nach dem Dezimalpunkt in der Formatzeichenfolge geändert wird.

enter image description here

MSDN - Range.NumberFormat

EDIT

Beispiel dafür, wie das Format einer Reihe von Zellen zu finden:

Worksheet wks = new Worksheet(); 
String nfmt = (string)((Range)wks.Cells[1,1]).NumberFormat; 

Wo nfmt ein Format-String enthalten, die Sie kann nach % überprüfen um festzustellen, ob die Zelle (oder der Bereich) so formatiert ist, dass ein Bruch als Prozentwert angezeigt wird. Beachten Sie, dass nfmtNULL ist, wenn der Bereich Zellen mit unterschiedlichen Formatzeichenfolgen umfasst!

+0

Danke. Ich habe den Link ausgecheckt, aber das C# -Beispiel war nicht genug für mich, um herauszufinden, wie man die Range.NumberFormat-Methode/-Eigenschaft verwendet. – Kevin

+0

@Kevin hat einen Beispielcode hinzugefügt –

3

Prozentsatz ist ein Formatierungsartefakt in Excel. Die tatsächliche Zahl ist immer ein Dezimalbruch (0.9 in Ihrem Fall). Prozentsatz ist nur ein Weg zu Anzeige Ihre Nummer auf dem Arbeitsblatt. Wenn Sie wissen, dass eine Spalte den Prozentsatz darstellt, sollten Sie sie mit 100 multiplizieren.

0
ws.Cells[1, 1].NumberFormatLocal = XlConditionValueTypes.xlConditionValuePercent; 
ws.Cells[1, 1].NumberFormat = "0,00%";