2015-08-25 13 views
8

Dies scheint albern, aber ich konnte nicht meine Werte im Format #/#### zu schreiben als die literale Zeichenfolge statt als ein Datum innerhalb von Excel formatiert werden .Keep Excel Zelle Format als Text mit "Datum wie" Daten

Ich verwende ClosedXML zu übertreffen zu schreiben, und mit dem folgenden:

// snip 
IXLRangeRow tableRow = tableRowRange.Row(1); 
tableRow.Cell(1).DataType = XLCellValues.Text; 
tableRow.Cell(1).Value = "2/1997"; 
// snip 

am Ausgang der Suche Blatt Excel ich in der Zelle erhalten 2/1/1997 - obwohl ich das Format als Text habe die Einrichtung in Code, ich bekomme es als "Datum" in der Excel-Tabelle - ich überprüft dies, indem Sie mit der rechten Maustaste auf die Zelle, formatieren Zelle, sehen "Datum" als das Format.

Wenn ich die Dinge ändern sich bis zu:

// snip 
IXLRangeRow tableRow = tableRowRange.Row(1); 
tableRow.Cell(1).Value = "2/1997"; 
tableRow.Cell(1).DataType = XLCellValues.Text; 
// snip 

ich stattdessen 35462 als meine Ausgabe erhalten.

Ich möchte nur meinen Literalwert von 2/1997 auf dem Arbeitsblatt angezeigt werden. Bitte geben Sie an, wie Sie korrigieren können.

Antwort

20

versuchen, diese

ws.Cell(rowCounter, colCounter).SetValue<string>(Convert.ToString(fieldValue)); 
+2

Das funktionierte für mich, aber kann jemand kommentieren, warum das funktioniert? – jaredbaszler

+0

Ich konnte auch den obigen Code abrunden, wohl wissend, dass mein 'fieldValue' bereits eine Zeichenkette war: ' ws.Cell (rowCounter, colCounter) .SetValue (fieldValue); ' – jaredbaszler

+1

@jaredbaszler dies ist ein dokumentiert in der Wiki für ClosedXML. Wenn Sie einen Wert mit cell.Value = blah setzen, werden die Werte automatisch für Sie automatisch konvertiert, so dass die Zeichenfolge automatisch als Datum erkannt und konvertiert wird (ähnlich wie Excel standardmäßig CSV-Dateien verwendet). Die Zelle.SetValue() vermeidet dies jedoch ausdrücklich, und wenn der Wert eine Zeichenfolge ist, bleibt sie eine Zeichenfolge in der Excel-Datei. –

2

Bedenken Sie:

tableRow.Cell(1).Value = "'2/1997"; 

Notiere die Apostroph.

+0

das ist ziemlich nah - mein einziges Problem damit ist, wenn ich F2 oder die Bearbeitungsleiste auf der Zelle eingeben, wird das Format dann im Format von "MMM/JJJJ" aktualisiert. Irgendwelche Ideen dazu? – Kritner

1

Nicht sicher von ClosedXML, aber vielleicht Range.NumberFormat versuchen (MSDN Link)

Zum Beispiel ...

Range("A1").NumberFormat = "@" 

Oder

Selection.NumberFormat = "#/####" 
0
ws.Cell(rowCounter, colCounter).Value="'"+Convert.ToString(fieldValue)); 
Verwandte Themen