Экспорт в Excel

#asp.net

#asp.net

Вопрос:

У меня есть представление в виде таблицы. Пытаюсь экспортировать в Excel. Код выглядит следующим образом :

 public override void VerifyRenderingInServerForm(Control gvReport1)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string attachment = "attachment; filename=Report.xls";
        Response.ClearContent();
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset = "";
        this.EnableViewState = false;
        StringWriter stw = new StringWriter();
        HtmlTextWriter htextw = new HtmlTextWriter(stw);
        gvReport1.RenderControl(htextw);
        Response.Write(stw.ToString());
        Response.End();
    }
  

Теперь проблема в том, что файл Excel открывается, но данные не отображаются. Я предполагаю, что данные не читаются, и что еще более странно, у меня есть две веб-страницы. На первой веб-странице экспорт в Excel работает должным образом, но на второй странице он не работает.

Ответ №1:

Вероятно, есть более элегантный способ…

Есть.

Взгляните на это: Экспорт в библиотеку Excel

Это полностью бесплатная библиотека, которая использует библиотеки Microsoft Open XML для создания подлинного файла Excel 2007 .xlsx.

Все, что вам нужно сделать, это вызвать одну функцию «CreateExcelDocument» и передать в DataTable, набор данных или список<>, который содержит данные, которые вы используете для заполнения вашего GridView.

 // Step 1: Create a DataSet, and put some sample data in it
DataSet ds = CreateSampleData();

// Step 2: Create the Excel .xlsx file
try
{
    string excelFilename = "C:\Sample.xlsx";
    CreateExcelFile.CreateExcelDocument(ds, excelFilename);
}
catch (Exception ex)
{ 
    MessageBox.Show("Couldn't create Excel file.rnException: "   ex.Message);
    return;
}
  

Наслаждайтесь и удачи!!

Ответ №2:

 Response.Write(stw.ToString());
  

Неверно, это просто вернет имя типа, сначала вам нужно записать выходные данные RenderControl в строку, затем записать содержимое строки, используя Response.Write().

РЕДАКТИРОВАТЬ: Вот пример того, как вы могли бы получить содержимое отображаемого элемента управления:

      // Obtain the content about to be rendered.
     var ms = new MemoryStream();
     var w = new StreamWriter(ms);
     var r = new StreamReader(ms);
     using (var htmlw = new HtmlTextWriter(w))
     {
        gvReport1.RenderControl(htmlw);
        htmlw.Flush();
     }

     ms.Position = 0;
     var content = r.ReadToEnd();
     r.Close();
  

Вероятно, есть более элегантный способ…

Ответ №3:

Я надеюсь, вы найдете то, что искали здесь :

 .doc


application/msword

.dot


application/msword

.docx


application/vnd.openxmlformats-officedocument.wordprocessingml.document

.dotx


application/vnd.openxmlformats-officedocument.wordprocessingml.template

.docm


application/vnd.ms-word.document.macroEnabled.12

.dotm


application/vnd.ms-word.template.macroEnabled.12

.xls


application/vnd.ms-excel

.xlt


application/vnd.ms-excel

.xla


application/vnd.ms-excel

.xlsx


application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

.xltx


application/vnd.openxmlformats-officedocument.spreadsheetml.template

.xlsm


application/vnd.ms-excel.sheet.macroEnabled.12

.xltm


application/vnd.ms-excel.template.macroEnabled.12

.xlam


application/vnd.ms-excel.addin.macroEnabled.12

.xlsb


application/vnd.ms-excel.sheet.binary.macroEnabled.12

.ppt


application/vnd.ms-powerpoint

.pot


application/vnd.ms-powerpoint

.pps


application/vnd.ms-powerpoint

.ppa


application/vnd.ms-powerpoint

.pptx


application/vnd.openxmlformats-officedocument.presentationml.presentation

.potx


application/vnd.openxmlformats-officedocument.presentationml.template

.ppsx


application/vnd.openxmlformats-officedocument.presentationml.slideshow

.ppam


application/vnd.ms-powerpoint.addin.macroEnabled.12

.pptm


application/vnd.ms-powerpoint.presentation.macroEnabled.12

.potm


application/vnd.ms-powerpoint.presentation.macroEnabled.12

.ppsm


application/vnd.ms-powerpoint.slideshow.macroEnabled.12