Форматировать ячейку таблицы HTML, чтобы Excel форматировал текст?

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

Ответ 1

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

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

(отрегулированный фрагмент)

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

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

И шлепните эти классы на своих ТД, он работает?

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

Ответ 2

Существует одна проблема с использованием этого решения (css-стиль с числовым форматом). Excel дает ошибку "Number Stored in text", которая может быть неудобной в некоторых случаях. Чтобы избежать этой проблемы, можно использовать символ ZERO WIDTH SPACE (& # 8203;) в начале поля.

Ответ 3

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

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

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

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

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

Ответ 4

Отличное решение! Я сделал это как ниже

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

и он отлично работает для меня

Ответ 5

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

  • Отформатируйте поле как текст, как описано scunliffe. Это связано с проблемой зеленого треугольника, как утверждает Рапосо.

  • Используйте & # 8203; как описано Рапосо. Это связано с тем, что значение не является числом. Это может быть проблемой, если данные втягиваются в некоторую систему для обработки.

  • Добавить TD как <td>= "067" </td> . Это имеет ту же проблему, что и # 2.

  • Добавить TD как <td>= текст (067, "000" ) </td> . Это также имеет ту же проблему, что и # 2.

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

Ответ 6

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