2011-01-06 10 views

Odpowiedz

89

Można zastosować formatowanie do komórek dla liczb, tekstu, daty, itp

Zobacz moje wcześniejsze odpowiedzi na ten temat: HTML to Excel: How can tell Excel to treat columns as numbers?

(skorygowany fragment)

Jeśli dodać Klasa CSS na swoją stronę:

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

I policzcie te klasy na swoich ZO, czy to działa?

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

Trwało zbyt długo na google dla tego rozwiązania .. te tabeli HTML do arkuszy kalkulacyjnych Excel wskazówki są niemożliwe do znalezienia – John

+1

genialny! niezbędne dla kodów pocztowych, które zaczynają się w/0 – squarecandy

+1

również sprawiły, że mój dzień ... prawie rok później, aby znaleźć to ... haha ​​Dziękuję i tak :) – pojomx

9

Jest jeden problem z wykorzystaniem tego rozwiązania (styl css z formatem liczbowym). Excel podaje błąd "Numer zapisany jako tekst", który w niektórych przypadkach może być niewygodny. Aby uniknąć tego problemu, można użyć znaku ZERO WIDTH SPACE (& # 8203;) na początku pola.

+0

Pozostawia niewidzialną postać, ale wygląda lepiej! – TheStoryCoder

+0

To jest TYLKO rzecz, która pomogła mi zmusić komórkę do napisania tekstu. Wstępnie dołączono to do wartości i BLAMO! Tekst! – Gary

2

Nie mam wystarczającej liczby przedstawicieli, aby komentować lub głosować w górę, ale odpowiedź Raposo działała bardzo dobrze. Nasz system importuje raporty SSRS i uruchamia je w trybie lokalnym. Przechowuje zapytanie (kwerendy) DataSet w bazie danych i ściąga je w czasie wykonywania. Jednak w przypadku eksportu do Excel po prostu uruchamia dane wynikowe zapytania do obiektu DataGrid i zapisuje je bezpośrednio do strumienia jako HTML, ustawiając rozszerzenie na .xls. Wprowadzenie rozwiązania raposo w zapytaniu DataSet raportu:

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

i usunięcie go w wyrażeniu ostrości SSR za:

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

jest jedyną rzeczą, odkryłem, że działa. Dzięki!

2

Doskonałe rozwiązanie! Zrobiłem to tak jak poniżej

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>"); 

i działa dobrze dla mnie

2

Znalazłem pięć rozwiązania tego problemu:

  1. Format boiska w tekście w sposób opisany przez scunliffe. Ma to problem z zielonym trójkątem określonym przez Raposo.

  2. Użyj & # 8203; jak opisano przez Raposo. Ma to problem, że wartość nie jest tak naprawdę liczbą. Może to stanowić problem, jeśli dane są wciągane do jakiegoś systemu do przetwarzania.

  3. Dodaj TD jako <td> = "067" </td >. Ma to ten sam problem co # 2.

  4. Dodaj TD jako <td> = tekst (067, "000") </td >. Ma to ten sam problem co # 2.

  5. Użyj klasy CSS.text3 {mso-number-format: "000";} i dodaj tę klasę do TD. To jest moje preferowane rozwiązanie, ale ma problem z wymaganiem wielu klas, jeśli masz numery o różnych długościach. Jeśli napiszesz swój nagłówek, a następnie powtórzysz swoje dane, musisz dodać wszystkie możliwe klasy, zanim dowiesz się, które z nich będziesz potrzebować. Ale ma to tę zaletę, że tekst jest naprawdę liczbą i nie ma zielonego trójkąta.

0

można rozwiązać problem zbyt dodając non-breaking space: &nbsp; przed wartością elementu <td>.
Przykład: <td>&nbsp;0:12:12.185</td>
Zamiast: <td>0:12:12.185</td>

Powiązane problemy