#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