C#数据表中的数据导出到excel(web,WinFrom)
### C# 数据表中的数据导出到 Excel 的方法详解 #### 一、Web 环境下导出数据到 Excel 在 Web 开发中,经常需要将数据表中的数据导出为 Excel 文件以便用户下载。这里介绍一种使用 C# 在 ASP.NET Web 应用程序中实现这一功能的方法。 ```csharp public void TableToExcel(System.Data.DataTable tb) { try { string Filename = "person"; System.Web.HttpContext context = System.Web.HttpContext.Current; if (tb != null) { context.Response.Clear(); context.Response.Charset = "GB2312"; context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); context.Response.ContentType = "application/ms-excel"; context.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(Filename, System.Text.Encoding.GetEncoding("GB2312")) + ".xls\""); System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo("zh-CN", true); StringWriter sw = new StringWriter(cult); HtmlTextWriter htw = new HtmlTextWriter(sw); DataGrid dgrid = new DataGrid(); dgrid.DataSource = tb.DefaultView; dgrid.AllowPaging = false; dgrid.DataBind(); htw.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GB2312\">"); dgrid.RenderControl(htw); context.Response.Write(sw.ToString()); context.Response.End(); } } catch { // 处理异常 } } ``` **关键知识点:** 1. **设置 HTTP 响应头:** - `context.Response.Clear()` 清除响应头。 - `context.Response.Charset` 设置字符集编码为 GB2312。 - `context.Response.ContentEncoding` 设置响应体编码格式。 - `context.Response.ContentType` 设置内容类型为 Excel 文件。 - `context.Response.AppendHeader` 添加内容处理方式,以附件形式下载文件,并指定文件名。 2. **创建 HTML 表格并填充数据:** - 使用 `DataGrid` 组件绑定数据表数据。 - `RenderControl` 方法渲染 HTML 表格到 `StringWriter` 中。 - 将字符串写入 HTTP 响应体,结束响应。 #### 二、WinForms 环境下导出数据到 Excel 在 WinForms 应用程序中导出数据到 Excel 的方法略有不同,通常涉及到对 Excel 的 COM 自动化操作。 ```csharp #region DataGridView导出到 Excel public bool ExportDataGridview(DataGridView gridView, bool isShowExcle) { if (gridView.Rows.Count == 0) return false; // Excel 对象初始化 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = isShowExcle; // 写入表头 for (int i = 0; i < gridView.ColumnCount; i++) { excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText; } // 写入数据行 for (int i = 0; i < gridView.RowCount - 1; i++) { for (int j = 0; j < gridView.ColumnCount; j++) { if (gridView[j, i].Value.GetType() == typeof(string)) { excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString(); } else { excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString(); } } } return true; } #endregion ``` **关键知识点:** 1. **使用 COM 自动化操作 Excel:** - 需要引用 `Microsoft Excel 11.0 Object Library` 或更高版本的库。 - 创建 `Application` 实例,调用 `Workbooks.Add` 方法新建工作簿。 - 设置 `Visible` 属性决定是否显示 Excel 窗口。 2. **向 Excel 写入数据:** - 循环遍历 `DataGridView` 控件中的列,写入表头。 - 再次循环遍历行和列,写入数据。 - 对于字符串类型的值,在前面加上单引号 `'`,避免被识别为数字或日期等。 3. **事件处理示例:** ```csharp private void excel_Click(object sender, EventArgs e) { if (!comm.ExportDataGridview(info, true)) MessageBox.Show("没有数据可以导出!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } ``` 通过上述方法,可以在 Web 和 WinForms 环境下轻松实现数据表数据的 Excel 导出功能。这些代码片段提供了基本框架,可以根据实际需求进行扩展和优化。例如,可以添加错误处理逻辑、支持导出不同格式的文件(如 .xlsx)、增加样式设置等功能。
public void TableToExcel(System.Data.DataTable tb)
{
try
{
string Filename="person";
System.Web.HttpContext context = System.Web.HttpContext.Current;
if ((tb != null))
{
context.Response.Clear();
context.Response.Charset = "GB2312";
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
context.Response.ContentType = "application/ms-excel";
context.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(Filename, System.Text.Encoding.GetEncoding("GB2312")) + ".xls\"");
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo("zh-CN", true);
StringWriter sw = new StringWriter(cult);
HtmlTextWriter htw = new HtmlTextWriter(sw);
DataGrid dgrid = new DataGrid();
dgrid.DataSource = tb.DefaultView;
dgrid.AllowPaging = false;
dgrid.DataBind();
htw.WriteLine("<meta http-equiv=\"Content-Type\" content=\"textml;charset=GB2312\">");
dgrid.RenderControl(htw);
context.Response.Write(sw.ToString());
context.Response.End();
}
}
- 粉丝: 9
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页