Я создаю таблицу HTML, которая будет открыта в виде таблицы в Excel. Какой HTML-тег или стиль CSS я могу использовать, чтобы "рассказать" Excel для отображения содержимого ячейки в виде текста?
Форматировать ячейку таблицы HTML, чтобы 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 = '​' + someColumn
FROM, etc.
и удалить его в выражении поля SSRS:
=Replace(Fields!someColumn.Value, "​", "")
- единственное, что я нашел, что работает. Спасибо!
Ответ 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'>​");
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
Вы также можете решить эту проблему, добавив неразрывное пространство:
до значения элемента <td>
.
Пример:
<td> 0:12:12.185</td>
Вместо:
<td>0:12:12.185</td>