Отформатировать ячейку таблицы HTML, чтобы Excel форматировал текст? - PullRequest
33 голосов
/ 07 января 2011

Я создаю таблицу HTML, которая будет открыта в виде электронной таблицы в Excel. Какой HTML-тег или стиль CSS можно использовать, чтобы «сказать» Excel отображать содержимое ячейки в виде текста?

Ответы [ 7 ]

100 голосов
/ 07 января 2011

Вы можете применить форматирование к ячейкам для чисел, текста, дат и т. Д.

См. Мой предыдущий ответ по этому вопросу: HTML в Excel: как заставить Excel воспринимать столбцы как числа?

(скорректированный фрагмент)

Если вы добавляете класс CSS на свою страницу:

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

И пощечина тех классов на вашем TD, это работает?

<td class="num">34</td>
<td class="num">17.0</td>
<td class="text">067</td>
13 голосов
/ 27 февраля 2012

Существует одна проблема с использованием этого решения (стиль CSS с числовым форматом).В Excel выдается ошибка «Номер сохранен как текст», что в некоторых случаях может быть неудобно.Чтобы избежать этой проблемы, можно использовать символ ZERO WIDTH SPACE () в начале поля.

6 голосов
/ 11 ноября 2016

Вы также можете решить проблему, добавив неразрывный пробел : &nbsp; перед значением элемента <td>.
Пример: <td>&nbsp;0:12:12.185</td>
Вместо: <td>0:12:12.185</td>

3 голосов
/ 31 октября 2013

У меня недостаточно представителей, чтобы комментировать или голосовать, но ответ Рапосо мне очень помог.Наша система импортирует отчеты SSRS и запускает их в локальном режиме.Он сохраняет запрос (и) DataSet в базе данных и извлекает их во время выполнения.Однако для экспорта в Excel он просто запускает результирующие данные запроса в объект DataGrid и записывает их непосредственно в поток в виде HTML, устанавливая расширение .xls.Поместить решение Raposo в запрос DataSet отчета:

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

и удалить его в выражении поля SSRS:

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

- единственное, что я нашел, что работает.Спасибо!

2 голосов
/ 09 мая 2014

Я нашел пять решений этой проблемы:

  1. Отформатируйте поле как текст, как описано в scunliffe.Это имеет проблему с зеленым треугольником, как указано в Raposo.

  2. Используйте, как описано в Raposo.Проблема в том, что значение на самом деле не является числом.Это может быть проблемой, если данные передаются в какую-либо систему для обработки.

  3. Добавьте TD как

  4. Добавьте TD как

  5. Используйте CSS-класс .text3 {mso-number-format: "000";} и добавьте этот класс в TD.Это мое предпочтительное решение, но у него есть проблема, требующая нескольких классов, если у вас есть числа разной длины.Если вы пишете свой заголовок, а затем просматриваете данные, вы должны добавить все возможные классы, прежде чем узнаете, какой из них вам понадобится.Но у этого есть то преимущество, что текст на самом деле является числом, а зеленый треугольник отсутствует.

2 голосов
/ 08 апреля 2014

Превосходное решение! Я сделал это, как показано ниже

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

и у меня все нормально работает

0 голосов
/ 19 февраля 2019

Попробуйте добавить одинарную кавычку перед вашим значением:

'

Так ваша клетка станет

<td>'007</td>

Это было единственное решение, которое сработало для меня. Никто из обители не работал в «Open Office» и «Libre Office», где работают мои решения. И самое приятное, что если вы скопируете значение, оно не скопирует одинарную кавычку.

...