Экспорт в Excel
-
22-08-2019 - |
Вопрос
Я хотел бы экспортировать GridView в Excel, что достаточно просто.Но над сеткой, в Excel, я хотел бы получить некоторую другую информацию для идентификации.Могу ли я каким-то образом экспортировать вещи, отличные от gridviews, а затем поместить в gridview ниже?
Редактировать: По какой-то причине, когда виден GridView1 и я пытаюсь экспортировать, экспортируется вся страница, а не только gridview.Не уверен, почему!
Protected Sub btnExport_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExport.Click
'Create a StringWriter and HtmlTextWriter
Dim sw As System.IO.StringWriter = New System.IO.StringWriter()
Dim htw As New System.Web.UI.HtmlTextWriter(sw)
'Clear the Response object's content and specify the header for the HTML response and type of application file to create
Response.ClearContent()
Response.AddHeader("content-disposition", "attachment; filename=SaveFile.xls")
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
EnableViewState = False
htw.WriteLine("Test, test, test")
Try
'Check for the number of GridView rows
If GridView1.Rows.Count < 65535 Then
'Turn sorting and paging off and rebind the GridView control
GridView1.AllowSorting = False
GridView1.AllowPaging = False
GridView1.PageSize = GridView1.Rows.Count
GridView1.AutoGenerateSelectButton() = False
GridView1.DataBind()
'Render the GridView1 as HTML - this will cause an error that will fire the VerifyRenderingInServerForm event -- this event is trapped by the Overriding sub procedure given at the end of the program listing
GridView1.RenderControl(htw)
'Write the response
Response.Write(sw.ToString())
Response.End()
'Turn sorting and paging on and rebind the GridView control
GridView1.AllowSorting = True
GridView1.AllowPaging = True
'.GridView1.PageSize = 10
GridView1.AutoGenerateSelectButton() = True
GridView1.DataBind()
End If
Catch ex As Exception
End Try
End Sub
Решение
Да, ты можешь.
Сделайте что-то вроде этого:
HttpContext.Current.Response.Write("some string value")
прежде чем вы передадите свой gridview.
Другие советы
Если вы хотите экспортировать свой контент в ExcelML, ознакомьтесь с Радгрид из Телерика
Вы также можете вставить информацию о заголовке в сетку и т.д.
Вот мой код для выполнения того же самого
protected void ExportExcel_OnClick(object sender, EventArgs e) { Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=brugere.xls"); Response.Charset = "windows-1252"; Response.ContentType = "application/vnd.xls"; using (StringWriter stringWrite = new StringWriter()) using (HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite)) { GridView1.AllowPaging = false; GridView1.DataBind(); GridView1.RenderControl(htmlWrite); string html = stringWrite.ToString(); string result = Replacer.Replace(html, ""); Response.Write(result); } Response.End(); }
Обратите внимание, что я обрезаю результирующий html-код с помощью регулярного выражения, чтобы избежать форматирования, изображений, divs и прочего.
static readonly Regex Replacer = new Regex("(<input[^<>]*>)|"+ "(class=\"[^\"]*\")|(style=\"[^\"]*\")|"+ "(<a[^]*>)|(</a>)|(<div>)|(</div>)|" + "(cellspacing=\"[^\"]*\")|(cellpadding=\"[^\"]*\")|" + "(id=\"[^\"]*\")|(border=\"[^\"]*\")", RegexOptions.IgnoreCase);
Не забудьте переопределить следующее, чтобы гарантировать, что сетка будет отображаться за пределами Страницы
public override void VerifyRenderingInServerForm(Control control) { return; }
Открытие этого файла в Excel приведет к появлению предупреждающего сообщения.Я бы использовал одну из библиотек экспорта с открытым исходным кодом, такую как NPOI.http://npoi.codeplex.com/
Если вы по-прежнему предпочитаете использовать выходные данные HTML, вы можете рассмотреть возможность загрузки документации Microsoft по формату Office HTML по этой ссылке:http://msdn.microsoft.com/en-us/library/aa155477%28office.10%29.aspx
Вам нужен только файл CHM из этого архива (упакованный в EXE).
Удачи.
Если ваш GridView заполнен с использованием данных из DataTable, набора данных или списка<> затем следующая библиотека позволит вам экспортировать его в файл Excel 2007 (.xlsx), просто вызвав один "CreateExcelDocument Создать документ" функция.
// 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.\r\nException: " + ex.Message);
return;
}
Предоставляется полный исходный код, так что вы можете адаптировать его, чтобы добавить дополнительные строки данных в верхней части одного или нескольких листов.
Эта библиотека использует Открытый XML библиотеки, так что это абсолютно бесплатно.http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm