2008-12-07 5 views
3

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

Часть кода:

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

} 

Спасибо

+0

Boo, за титул. –

+0

Обновить название, пожалуйста - люди обратят внимание на вопрос иначе. – xan

+0

Я отправил ТОЧНЫЙ ответ на ваш вопрос, даже образец кода, указанный в моем решении, соответствует вашим! –

ответ

1

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

Here is an article на форматирование Excel из .Net.

4

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

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

0

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

'001200 

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

0

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

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

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

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

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

1

This link имеет ТОЧНЫЙ ответ на ваш вопрос. В статье используется тот же метод, который вы используете для рендеринга html.

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

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

[Редактировать]
One more link с подобной проблемой. (Его можно использовать в холодном сплаве, но можно использовать часть приложения CSS)

+0

Йода удаляет мои бредовые комментарии и его ответ! Хм, интересно, почему ... вы могли бы хотя бы поддержать меня, а потом удалить :) –

0

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

0

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

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

// 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

Добавить One More Line Перед

Response.Write ("

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

так просто

Смежные вопросы