Экспорт набора данных на лист excel в asp.net С#

Я попытался экспортировать набор данных, содержащий 4 таблицы, на лист Excel, но, к сожалению, не могу. У меня есть код для экспорта таблицы данных в Excel. Поэтому вместо набора данных я вызвал функцию «ExportToExcel», которая есть в моем коде, для экспорта данных, чтобы преуспеть в 4 раза. Но как только он создал первый лист, он останавливает поток управления. Control не вызывает вторую функцию ("ExportToExcel(dsResult.Tables[2], "AthleteSentCount");") Вот код

protected void ExportToExcel(object sender, EventArgs e)
{
     ExportToExcel(dsResult.Tables[3], "AthleteInboxCount");
     ExportToExcel(dsResult.Tables[2], "AthleteSentCount");
     ExportToExcel(dsResult.Tables[0], "CoachInboxCount");
     ExportToExcel(dsResult.Tables[1], "CoachSentCount");
}

void ExportToExcel(DataTable dt, string FileName)
{
    if (dt.Rows.Count > 0)
    {
        string filename = FileName + ".xls";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        DataGrid dgGrid = new DataGrid();
        dgGrid.DataSource = dt;
        dgGrid.DataBind();

        //Get the HTML for the control.
        dgGrid.RenderControl(hw);
        //Write the HTML back to the browser.
        //Response.ContentType = application/vnd.ms-excel;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AppendHeader("Content-Disposition", 
                              "attachment; filename=" + filename + "");
        this.EnableViewState = false;
        Response.Write(tw.ToString());
        Response.End();
    }
}

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


person Arun Kumar T    schedule 15.10.2013    source источник
comment
какая у тебя проблема?   -  person SANDEEP    schedule 15.10.2013
comment
Спасибо за ваш ответ. Control останавливает свою работу, как только он создает свой первый лист Excel, т.е. когда ExportToExcel(dsResult.Tables[3], AthleteInboxCount); функция была выполнена   -  person Arun Kumar T    schedule 15.10.2013
comment
ys, почему бы и нет? попробуйте передать datatabe в цикле до длины набора данных   -  person SANDEEP    schedule 15.10.2013
comment
Я пытался, но он останавливает поток после Response.End(); метод при выполнении первого цикла   -  person Arun Kumar T    schedule 15.10.2013
comment
удалить Ответ.Конец(). это будет работать   -  person SANDEEP    schedule 15.10.2013
comment
да я уже пробовал. Если да, то ошибка поврежденного содержимого Страница, которую вы пытаетесь просмотреть, не может быть показана, так как была обнаружена ошибка при передаче данных. ошибка будет происходить в браузере.   -  person Arun Kumar T    schedule 15.10.2013


Ответы (4)


Прежде всего, ваша функция запускает потоковую передачу контента

 Response.ContentType = "application/vnd.ms-excel";
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");

конечному пользователю и ЗАВЕРШИТЬ его с помощью

Response.End();

Более того, если вы исправите это, ваш код создаст 4 файла excel.

Существует существующий код для создания листов Excel при переполнении стека: Как добавить дополнительные рабочие листы в Excel из DataTable Единственное изменение, которое вам нужно будет сделать, это сохранить xlsx в поток и передать этот поток пользователю.

person Piotr Stapp    schedule 15.10.2013
comment
Спасибо, @Garath, твой пост очень полезен для меня. Я должен внести некоторые небольшие изменения, такие как синтаксис. Но это прекрасно работает. Еще раз спасибо. - person Arun Kumar T; 15.10.2013
comment
Могу ли я узнать, почему элемент управления останавливается, когда он создает первый лист в приведенном выше коде? - person Arun Kumar T; 15.10.2013
comment
@ArunKumarT код не останавливается точно, но поскольку вы вызываете Response.End();, остальная часть кода не отправляется конечному пользователю. - person Piotr Stapp; 15.10.2013

Написано в WCF и ASMX


Но я использовал EPPuls. dll файл своей dll с открытым исходным кодом. Пожалуйста, проверьте ссылку ниже для справки. http://epplus.codeplex.com/.

Код :

string excelFileName = @"E:\GOPI_16122016.xls";
 DataTable dt = ds.Tables[0];
 string worksheetsName = "Report";
 ExcelPackage pack = new ExcelPackage();
 ExcelWorksheet wrkSht = pack.Workbook.Worksheets.Add(worksheetsName);
 wrkSht.Cells["A1"].LoadFromDataTable(dt, true);
 pack.SaveAs(new FileInfo(excelFileName));
  MailMessage msg = new MailMessage();
                msg.To.Add(new MailAddress("[email protected]", "GOPIKRISHNA"));

                msg.From = new MailAddress("[email protected]", "Domain");
                msg.Subject = "REPORTS";
                string str = "Dear Team,<br/> Please find the Reports Details <br/><br/>";
                Attachment attachment = new System.Net.Mail.Attachment(excelFileName);
                msg.Attachments.Add(attachment);
                msg.Body = str ;
                msg.IsBodyHtml = true;
                SmtpClient client = new SmtpClient();
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("[email protected]", "");
                client.Port = 25; // You can use Port 25 if 587 is blocked (mine is!)
                client.Host = "[email protected]";
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.EnableSsl = true;
                client.Send(msg);
person gopi krishna    schedule 16.12.2016
comment
Если бы вы могли немного подробнее рассказать о своем ответе, очистить код и немного адаптировать его к конкретному случаю загрузки файла Excel, а не по электронной почте (например, часть Response), я думаю, что вы не только помогли бы ОП, но и многие другие люди. EPPlus НАСТОЛЬКО мощный и простой, чем многие другие альтернативы - person Andrés Robinet; 16.12.2016

Вы можете загрузить и использовать мою бесплатную библиотеку C# для экспорта набора данных в «настоящий» файл Excel .xlsx.

Он использует библиотеки Microsoft OpenXML и занимает всего одну строку кода.

Экспорт в Excel

Похоже, ваш код предназначен для веб-приложения ASP.Net, поэтому, используя мою библиотеку, ваш код будет выглядеть так:

protected void ExportToExcel(object sender, EventArgs e)
{
    CreateExcelFile.CreateExcelDocument(dsResult, "YourExcelfilename.xlsx", Response);
}

Всего одна строка кода, и вы получите настоящий файл Excel, записанный в Response вашей страницы.

Он будет содержать один рабочий лист для каждой таблицы данных в вашем наборе данных.

person Mike Gledhill    schedule 09.01.2014

Вот пример исходного кода о том, как экспортировать набор данных в Excel. Вы можете использовать метод ExcelWorksheet.easy_insertDataSet для вставки нескольких таблиц данных.

Что касается другого вопроса, проверьте этот код для гистограммы и настройте код для создания гистограммы следующим образом:

xlsChart.easy_setChartType(Chart.CHART_TYPE_BAR_CLUSTERED);
person alex.pulver    schedule 02.06.2014