Экспорт в Excel теряет формат даты - PullRequest
2 голосов
/ 13 октября 2011

Я экспортирую содержимое SP в Excel.В одном из столбцов формат даты указан как 08/2015, но при экспорте в Excel формат меняется на август 2015 года.

Я сделал то же самое в Google и обнаружил, что включение приведенного ниже кода помогает;

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

Экспортирование в Excel (набор данных в Excel) работает ниже;

 /// <summary>
    /// This method can be used for exporting data to excel from dataset
    /// </summary>
    /// <param name="dgrExport">System.Data.DataSet</param>
    /// <param name="response">System.Web.Httpresponse</param>
    public static void DataSetToExcel(System.Data.DataSet dtExport, System.Web.HttpResponse response, string strFileName)
    {

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

        //Clean up the response Object
        response.Clear();
        response.Charset = "";

        //Set the respomse MIME type to excel
        response.ContentType = "application/vnd.ms-excel";

        //Opens the attachment in new window
        response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName.ToString() + ".xls;");
        response.ContentEncoding = Encoding.Unicode;
        response.BinaryWrite(Encoding.Unicode.GetPreamble());

        //Create a string writer
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();

        //Create an htmltextwriter which uses the stringwriter
        System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);

        //Instantiate the datagrid

        System.Web.UI.WebControls.GridView dgrExport = new System.Web.UI.WebControls.GridView();

        //Set input datagrid to dataset table
        dgrExport.DataSource = dtExport.Tables[0];

        //bind the data with datagrid
        dgrExport.DataBind();

        //Make header text bold
        dgrExport.HeaderStyle.Font.Bold = true;

        //bind the modified datagrid
        dgrExport.DataBind();

        //Tell the datagrid to render itself to our htmltextwriter
        dgrExport.RenderControl(htmlWrite);

        response.Write(style);

        //Output the HTML
        response.Write(stringWrite.ToString());

        response.End();
    }

Где я делаю ошибку?пожалуйста, руководство!

Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Проблема не в формате даты, Excel преобразует данные в соответствии с типом данных (Default is GENERAL) CELL.Чтобы предотвратить преобразование данных, вы должны предоставить тип данных (TEXT) вместе с данными.

вы использовали правильный код, но таблица стилей .text не применяется к вашим данным.Примените таблицу стилей ко ВСЕМ тегам <TD>.Он будет работать на 100% и сохранит ваши данные так, как вы их предоставите (Date- 08/2015, 0001 or any data).

string style = @"<style> TD { mso-number-format:\@; } </style> ";
1 голос
/ 24 января 2014

Вот пример кода.

Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid g = new DataGrid();
DataTable d = new System.Data.DataTable();
d = (DataTable)Session["ReportData"];        
g.DataSource = d;
g.DataBind();       
foreach (DataGridItem i in g.Items)
{
    foreach (TableCell tc in i.Cells)
        tc.Attributes.Add("class", "text");
}
g.RenderControl(htmlWrite);
string style = @"<style> .text { mso-number-format:\@; } </style> ";
Response.Write(style);
Response.Write(stringWrite.ToString());
Response.End();
0 голосов
/ 13 октября 2011

Я не совсем понимаю код (не свободно владею asp.net), но скажу, что если вы хотите использовать текст в листе Excel, вам нужно определить целевую область как текст, прежде чем помещать данных там.

Если мое понимание кода верно, то это:

response.Write(style);

Должен быть до этого.

dgrExport.RenderControl(htmlWrite);

Редактировать: Возможно, альтернативное решение

Бит кода Google, который вы нашли, устанавливает формат ячеек как текст. По всей вероятности, вы хотите, чтобы Excel воспринимал дату как дату с форматом отображения MM / YYYY.

возможно, попробуйте заменить это:

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

с

string style = @"<style> .text { mso-number-format:\mm/yyyy; } </style> "

Я не уверен, является ли / или \ escape-символом в ASP.net, поэтому точный snytax может отличаться. В формате Excel числовой формат @ означает текст, а мм / гггг - дату с требуемым форматом отображения.

...