Formatuj komórkę tabeli HTML, aby Excel formatował jako tekst?

Tworzę tabelę HTML, która zostanie otwarta jako arkusz kalkulacyjny w Excelu. Jakiego tagu HTML lub stylu CSS mogę użyć, aby "powiedzieć" Excelowi, aby wyświetlić zawartość komórki jako tekst?

Author: dmr, 2011-01-07

6 answers

Możesz zastosować formatowanie do komórek dla liczb, tekstu, dat itp.

Zobacz moją poprzednią odpowiedź na to: HTML do Excela: jak powiedzieć Excel traktować kolumny jako liczby?

(adjusted snippet)

Jeśli dodasz klasę CSS do swojej strony:

.num {
  mso-number-format:General;
}
.text{
  mso-number-format:"\@";/*force text*/
}
Czy to działa?
<td class="num">34</td>
<td class="num">17.0</td>
<td class="text">067</td>
 94
Author: scunliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:23

Jest jeden problem z użyciem tego rozwiązania (styl css z formatem liczb). W Excelu pojawia się 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 spacji zerowej szerokości () na początku pola.

 12
Author: Raposo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 15:00:39

Nie mam wystarczająco rep, aby komentować lub głosować, ale odpowiedź Raposo działa bardzo dobrze dla mnie. Nasz system importuje raporty SSRS i uruchamia je w trybie lokalnym. Przechowuje zapytanie (- a) zestawu danych w bazie danych i pobiera je w czasie wykonywania. Jednak w przypadku eksportu programu Excel po prostu uruchamia dane wynikowe zapytania do obiektu DataGrid i zapisuje je bezpośrednio do strumienia jako HTML, ustawiając rozszerzenie na .xls. Umieszczenie rozwiązania Raposo w zapytaniu zbioru danych raportu:

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

I usunięcie go w wyrażeniu pola SSRS:

=Replace(Fields!someColumn.Value, "&#8203;", "")
To jedyna rzecz, którą znalazłem, która działa. Dzięki!
 2
Author: Thomas_WhoCan'tThinkOfAWittyID,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 17:37:15

Znalazłem pięć rozwiązań tego problemu:

  1. Sformatuj pole jako tekst zgodnie z opisem scunliffe. Ma to problem Zielonego trójkąta, jak stwierdził Raposo.

  2. Stosować zgodnie z opisem Raposo. Ma to problem, że wartość tak naprawdę nie jest liczbą. Może to być problem, jeśli dane są pobierane do jakiegoś systemu w celu przetworzenia.

  3. Dodaj TD jako

    = " 067 " . To ma ten sam problem co #2.
  4. Dodaj TD jako

    = text(067,"000"). Ma to również ten sam problem co #2.
  5. Użyj klasy CSS .text3 {MSO-number-format: "000";} i dodaj tę klasę DO TD. Jest to moje preferowane rozwiązanie, ale ma problem z wymaganiem wielu klas, jeśli masz liczby o różnych długościach. Jeśli piszesz nagłówek, a następnie powtarzasz swoje dane, musisz dodać wszystkie możliwe klasy, zanim dowiesz się, która z nich będzie Ci potrzebna. Ale ma to tę zaletę, że tekst jest naprawdę liczbą i nie ma Zielonego trójkąta.

 2
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 13:00:50

Super rozwiązanie! Zrobiłem to 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>");

And it works fine for me

 2
Author: Muhammad Yousaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 15:00:03

Możesz również rozwiązać problem dodając spację bez łamania: &nbsp; przed wartością elementu {[1] }.
Przykład: <td>&nbsp;0:12:12.185</td>
zamiast: <td>0:12:12.185</td>

 0
Author: WhiteOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-11 11:44:56