2011-01-06 14 views

Antwort

89

Sie anwenden können, für die Zahlen zu den Zellen Formatierung, Text, Daten, etc.

meine Antwort auf diese anzeigen: HTML to Excel: How can tell Excel to treat columns as numbers?

(bereinigtes Snippet)

Wenn Sie ein hinzufügen CSS-Klasse zu Ihrer Seite:

.num { 
    mso-number-format:General; 
} 
.text{ 
    mso-number-format:"\@";/*force text*/ 
} 

Und schlagen Sie diese Klassen auf Ihrem TD, funktioniert es?

<td class="num">34</td> 
<td class="num">17.0</td> 
<td class="text">067</td> 
+9

Nahm viel zu lange für diese Lösung .. diese HTML-Tabelle Google-Tabelle Tipps sind nicht zu übertreffen – John

+1

brillant zu finden! wichtig für Postleitzahlen, die beginnen w/0 – squarecandy

+1

machte meinen Tag zu ... fast ein Jahr später, um das zu finden ... haha ​​Vielen Dank trotzdem :) – pojomx

9

Es gibt ein Problem bei der Verwendung dieser Lösung (CSS-Stil mit Zahlenformat). Das Excel gibt den Fehler "Nummer als Text gespeichert", die in einigen Fällen unbequem sein kann. Um dieses Problem zu vermeiden, ist es möglich, das ZERO WIDTH SPACE-Zeichen (& # 8203;) am Anfang des Feldes zu verwenden.

+0

Hinterlässt einen unsichtbaren Charakter, sieht aber besser aus! – TheStoryCoder

+0

Dies ist das einzige, das mir geholfen hat, eine Zelle zum Text zu zwingen. Pre-angehängt dies an den Wert und BLAMO! Text! – Gary

2

Ich habe nicht genug Rep zu kommentieren oder up-vote, aber Raposos Antwort funktionierte sehr gut für mich. Unser System importiert SSRS-Berichte und führt sie im lokalen Modus aus. Es speichert die DataSet-Abfrage (n) in der Datenbank und ruft sie zur Laufzeit ab. Bei Excel-Exporten werden jedoch die resultierenden Daten der Abfrage in einem DataGrid-Objekt ausgeführt und direkt als HTML in den Stream geschrieben, wobei die Erweiterung auf .xls festgelegt wird. Putting Raposo-Lösung in der Datasetabfrage Bericht:

SELECT someColumn = '&#8203;' + someColumn 
FROM, etc. 

und es in der SSRS Feld Ausdruck zu entfernen:

=Replace(Fields!someColumn.Value, "&#8203;", "") 

das einzige, was ich gefunden habe, das funktioniert. Vielen Dank!

2

Hervorragende Lösung! Ich habe es wie unten

HttpContext.Current.Response.Write("<style> .txt " + "\r\n" + " {mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>"); 
HttpContext.Current.Response.Write("<Td class='txt'>&#8203;"); 
HttpContext.Current.Response.Write(Coltext); 
HttpContext.Current.Response.Write("</Td>"); 

und es funktioniert gut für mich

2

ich fünf Lösungen für dieses Problem gefunden haben:

  1. Format das Feld als Text wie von scunliffe beschrieben. Dies hat das Problem des grünen Dreiecks, wie es von Raposo angegeben wurde.

  2. Verwendung & # 8203; wie von Raposo beschrieben. Dies hat das Problem, dass der Wert nicht wirklich eine Zahl ist. Dies könnte ein Problem sein, wenn die Daten in ein System zur Verarbeitung gezogen werden.

  3. Fügen Sie den TD als <td> = "067" </td >. Dies hat das gleiche Problem wie # 2.

  4. das TD als <td> = text (067 "000") </td > hinzufügen. Dies hat auch das gleiche Problem wie # 2.

  5. Verwenden Sie eine CSS-Klasse von.text3 {Mso-Nummer-Format: "000";} und fügen Sie diese Klasse dem TD hinzu. Dies ist meine bevorzugte Lösung, aber es hat das Problem, mehrere Klassen zu erfordern, wenn Sie verschiedene Längen haben. Wenn Sie Ihre Kopfzeile schreiben und dann durch Ihre Daten iterieren, müssen Sie alle möglichen Klassen hinzufügen, bevor Sie wissen, welche von denen Sie benötigen. Aber das hat den Vorteil, dass der Text wirklich eine Zahl ist und es kein grünes Dreieck gibt.

0

Sie können das Problem lösen, indem das Hinzufügen non-breaking Raum: &nbsp; vor dem Wert des <td> Elements.
Beispiel: <td>&nbsp;0:12:12.185</td>
Statt: <td>0:12:12.185</td>

Verwandte Themen