2015-08-25 18 views
8

Wydaje się to głupie, ale nie udało mi się uzyskać wartości w formacie #/####, aby napisać jako ciąg literowy, a nie zostać sformatowany jako data w programie Excel .Zachowaj format komórki celowej jako tekst z danymi typu "data jak"

Używam ClosedXML napisać do programu Excel, a przy użyciu następujących:

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

Patrząc na wyjściu excel arkusz mam w komórce 2/1/1997 - chociaż ja ustawiania formatu w postaci tekstu kod, otrzymuję go jako "Data" w arkuszu Excela - sprawdziłem to, klikając komórkę prawym przyciskiem myszy, formatując komórkę, widząc "datę" jako format.

Jeśli zmienię rzeczy do:

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

I zamiast dostać 35462 jak moim wyjściu.

Po prostu chcę, aby moja wartość literalna 2/1997 była wyświetlana w arkuszu roboczym. Proszę doradzić, jak poprawić.

Odpowiedz

20

spróbować tej

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

To zadziałało, ale czy ktoś może skomentować, dlaczego to działa? – jaredbaszler

+0

Byłem również w stanie przyciąć kod powyżej do tego wiedząc, że moja 'fieldValue' była już ciągiem: ' ws.Cell (rowCounter, colCounter) .SetValue (fieldValue); ' – jaredbaszler

+1

@jaredbaszler jest to udokumentowane w Wiki dla ClosedXML. Jeśli ustawisz wartość za pomocą komórki.Value = blah zawsze wykonuje automatyczną konwersję wartości, więc automatycznie rozpoznaje ciąg jako datę i konwertuje go (podobnie jak Excel denerwująco robi z plikami CSV domyślnie). Jednak komórka.SetValue() w szczególności unika tego, a jeśli wartość jest łańcuchem, pozostaje ciągiem w pliku Excel. –

2

Rozważmy:

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

Uwaga pojedynczy cytat.

+0

To całkiem blisko - moim jedynym problemem jest to, że gdy uderzę w F2 lub wejdę na pasek formuły w komórce, format zostanie zaktualizowany do tej pory w formacie "mmm/rrrr". Jakieś pomysły na ten temat? – Kritner

1

Nie jestem pewien z ClosedXML, ale może spróbować Range.NumberFormat (MSDN Link)

Na przykład ...

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

Or

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