Форматирование ячеек Excel в ASP.NET - PullRequest
3 голосов
/ 07 декабря 2008

У меня проблема. Например, одним из значений столбцов с датой является строковое значение «001200». Когда документ Excel создает значение, становится «1200». Как я могу сохранить формат данных как есть? Я работаю с ASP.NET 1.1.

Часть кода:

private void lnkExport_Click( object sender, System.EventArgs e ) 
{

Response.Clear();

Response.Buffer= true;

Response.ContentType = "application/vnd.ms-excel";

Response.AddHeader( "Content-Disposition", "attachment; filename=" + "CartsList.xls" );

Response.Charset = "iso-8859-8";

Response.Cache.SetCacheability( HttpCacheability.Public );

Response.ContentEncoding = System.Text.Encoding.UTF7;

this.EnableViewState = false;

System.IO.StringWriter oStringWriter = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter( oStringWriter );

this.ClearControls( dtgCarts );

dtgCarts.RenderControl( oHtmlTextWriter );

Response.Write( oStringWriter.ToString() );

Response.End();

}

Спасибо

Ответы [ 8 ]

4 голосов
/ 07 декабря 2008

Добавьте апостроф (одинарную кавычку) в начало - это должно исправить это. Это заставляет Excel обрабатывать ячейку как текст вместо числа.

Редактировать: просто для ясности - апостроф - это встроенная функция Excel, а не просто выбранный случайный символ Не могу найти ссылку для него.

1 голос
/ 29 декабря 2009

Эта ссылка содержит ТОЧНЫЙ ответ на ваш вопрос. В статье используется точно такая же техника, которую вы используете для рендеринга HTML, чтобы преуспеть.

Хитрость заключается в использовании свойств Excel CSS

<style> .text { mso-number-format:\@; } </style> 

[Изменить]
Еще одна ссылка с похожей проблемой. (Это в холодном синтезе, но может быть применена часть CSS)

1 голос
/ 07 декабря 2008

Вы пробовали просто переформатировать ячейку в Excel? Вероятно, просто Excel выбирает другой формат (целочисленный, а не строковый).

Вот статья о форматировании Excel из .Net.

0 голосов
/ 16 февраля 2013

Добавьте еще одну строку перед

Response.Write ( "

 td { mso-number-format:\@; } 
");

так просто

0 голосов
/ 18 мая 2011

У меня были подобные проблемы несколько месяцев назад, и я отказался от Excel ... Я бы порекомендовал вам использовать компонент Excel Jet Cell .NET .

имеет бесплатную версию с некоторыми ограничениями размера. Посмотрите на Excel C # образец :

// Open template
string xlfile = @"d:\prj\HrePro.xlsx";
ExcelWorkbook Wbook = ExcelWorkbook.ReadXLSX(xlfile);
ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells;

// Save values and excel file
Cells["b2"].Value = "001";
Cells["b2"].Style.StringFormat = DefinedFormats.Textual;

Wbook.WriteXLSX(@"d:\prj\HReport.xlsx");
0 голосов
/ 18 мая 2011

Если вы можете изменить значение ячейки, но оно не является частью формулы, попробуйте изменить цифры на буквы, например: 001200 -> OO12OO:)

0 голосов
/ 07 декабря 2008

Я столкнулся с чем-то похожим на вашу проблему, но в другом направлении.

Это расширенная настройка свойств для файла Excel 2007.
"Расширенные свойства = 'Excel 12.0 Xml; HDR = ДА; IMEX = 1;'";

Вы также можете написать фиктивные записи с форматом данных, которые вы хотите использовать. Объявление чего-либо как текста в Excel не обязательно преобразует данные так, как вы хотите.

За кадром есть что-то, что автоматически устанавливает тип данных, используемый во время передачи. Система использует первые 8 записей, чтобы определить это. Если вам нужны строковые значения, буферизуйте столбец любым текстом, если вам нужно что-то более длинное, я думаю, вам нужно буферизовать его текстом из 512+ символов.

Кстати, я попробовал большинство из приведенных выше предложений, прежде чем обнаружил, что система тайно переопределяет то, что вы программно установили.

0 голосов
/ 07 декабря 2008

Можете ли вы предшествовать любым, которые должны быть сохранены в виде чисел, одной кавычкой при экспорте в Excel, например

'001200

Это должно сохранить текст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...