DataGrid 导出到 Excel 的帮助类
//
// 从 DataGrid 或数据源中导出数据到 Excel 并提示下载的帮助类。
//
// Author: Neil Chen (木野狐)
// Date: 2005-1-27
// Version: 1.22
// History:
// v1.00 使用静态方法的形式实现该类,提供多种重载方式。
// v1.01 添加了对 DevExpress.Web.ASPxGrid.ASPxGrid 的直接导出支持。
// v1.20 改写为实体类。 减少了重复代码。
// v1.21 2005-2-1
// 修改了一个构造函数的重载形式中异常检测的代码。延迟到 Export() 方法。
// v1.22 2005-2-3
// 1. 修正了 Export() 方法中缺少 _titles != null 判断的 bug.
// 2. 修正了长的数字被 Excel 自动转换为科学计数法的毛病。
// (修改的办法来自 http://dotnet.aspx.cc)
//
//===============================================================================
namespace RChen.Demos {
using System;
using System.IO;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Globalization;
using System.Collections;
using DevExpress.Web.ASPxGrid;
public class ExcelHelper {
#region Fields
string _fileName;
DataTable _dataSource;
string[] _titles = null;
string[] _fields = null;
int _maxRecords = 1000;
#endregion
#region Properties
/// <summary>
/// 限制输出到 Excel 的最大记录数。超出则抛出异常
/// </summary>
public int MaxRecords {
set { _maxRecords = value; }
get { return _maxRecords; }
}
/// <summary>
/// 输出到浏览器的 Excel 文件名
/// </summary>
public string FileName {
set { _fileName = value; }
get { return _fileName; }
}
#endregion
#region .ctor
/// <summary>
/// 构造函数
/// </summary>
/// <param name="titles">要输出到 Excel 的列标题的数组</param>
/// <param name="fields">要输出到 Excel 的字段名称数组</param>
/// <param name="dataSource">数据源</param>
public ExcelHelper(string[] titles, string[] fields, DataTable dataSource): this(titles, dataSource) {
if (fields == null || fields.Length == 0)
throw new ArgumentNullException("fields");
if (titles.Length != fields.Length)
throw new ArgumentException("titles.Length != fields.Length", "fields");
_fields = fields;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="titles">要输出到 Excel 的列标题的数组</param>
/// <param name="dataSource">数据源</param>
public ExcelHelper(string[] titles, DataTable dataSource): this(dataSource) {
if (titles == null || titles.Length == 0)
throw new ArgumentNullException("titles");
//if (titles.Length != dataSource.Columns.Count)
// throw new ArgumentException("titles.Length != dataSource.Columns.Count", "dataSource");
_titles = titles;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="dataSource">数据源</param>
public ExcelHelper(DataTable dataSource) {
if (dataSource == null)
throw new ArgumentNullException("dataSource");
// maybe more checks needed here (IEnumerable, IList, IListSource, ) ???
// 很难判断,先简单的使用 DataTable
_dataSource = dataSource;
}
public ExcelHelper() {}
#endregion
#region public Methods
/// <summary>
/// 导出到 Excel 并提示下载
/// </summary>
/// <param name="dg">DataGrid</param>
public void Export(DataGrid dg) {
if (dg == null)
throw new ArgumentNullException("dg");
if (dg.AllowPaging || dg.PageCount > 1)
throw new ArgumentException("paged DataGrid can't be exported.", "dg");
// 添加标题样式
dg.HeaderStyle.Font.Bold = true;
dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray;
RenderExcel(dg);
}
/// <summary>
/// 导出到 Excel 并提示下载
/// </summary>
/// <param name="xgrid">ASPxGrid</param>
public void Export(DevExpress.Web.ASPxGrid.ASPxGrid xgrid) {
if (xgrid == null)
throw new ArgumentNullException("xgrid");
if (xgrid.PageCount > 1)
throw new ArgumentException("paged xgird not can't be exported.", "xgrid");
// 添加标题样式
xgrid.HeaderStyle.Font.Bold = true;
xgrid.HeaderStyle.BackColor = System.Drawing.Color.LightGray;
RenderExcel(xgrid);
}
/// <summary>
/// 导出到 Excel 并提示下载
/// </summary>
public void Export() {
if (_dataSource == null)
throw new Exception("数据源尚未初始化");
if (_fields == null && _titles != null && _titles.Length != _dataSource.Columns.Count)
throw new Exception("_titles.Length != _dataSource.Columns.Count");
if (_dataSource.Rows.Count > _maxRecords)
throw new Exception("导出数据条数超过限制。请设置 MaxRecords 属性以定义导出的最多记录数。");
DataGrid dg = new DataGrid();
dg.DataSource = _dataSource;
if (_titles == null) {
dg.AutoGenerateColumns = true;
}
else {
dg.AutoGenerateColumns = false;
int cnt = _titles.Length;
System.Web.UI.WebControls.BoundColumn col;
if (_fields == null) {
for (int i=0; i<cnt; i++) {
col = new System.Web.UI.WebControls.BoundColumn();
col.HeaderText = _titles[i];
col.DataField = _dataSource.Columns[i].ColumnName;
dg.Columns.Add(col);
}
}
else {
for (int i=0; i<cnt; i++) {
col = new System.Web.UI.WebControls.BoundColumn();
col.HeaderText = _titles[i];
col.DataField = _fields[i];
dg.Columns.Add(col);
}
}
}
// 添加标题样式
dg.HeaderStyle.Font.Bold = true;
dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray;
dg.ItemDataBound += new DataGridItemEventHandler(DataGridItemDataBound);
dg.DataBind();
RenderExcel(dg);
}
#endregion
#region private Methods
private void RenderExcel(Control c) {
// 确保有一个合法的输出文件名
if (_fileName == null || _fileName == string.Empty || !(_fileName.ToLower().EndsWith(".xls")))
_fileName = GetRandomFileName();
HttpResponse response = HttpContext.Current.Response;
response.Charset = "GB2312";
response.ContentEncoding = Encoding.GetEncoding("GB2312");
response.ContentType = "application/ms-excel/msword";
response.AppendHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(_fileName));
CultureInfo cult = new CultureInfo("zh-CN", true);
StringWriter sw = new StringWriter(cult);
HtmlTextWriter writer = new HtmlTextWriter(sw);
writer.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GB2312\">");
DataGrid dg = c as DataGrid;
if (dg != null) {
dg.RenderControl(writer);
}
else {
ASPxGrid xgrid = c as ASPxGrid;
if (xgrid != null)
xgrid.RenderControl(writer);
else
throw new ArgumentException("only supports DataGrid or ASPxGrid.", "c");
}
c.Dispose();
response.Write(sw.ToString());
response.End();
}
/// <summary>
/// 得到一个随意的文件名
/// </summary>
/// <returns></returns>
private string GetRandomFileName() {
Random rnd = new Random((int) (DateTime.Now.Ticks));
string s = rnd.Next(Int32.MaxValue).ToString();
return DateTime.Now.ToShortDateString() + "_" + s + ".xls";
}
private void DataGridItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
e.Item.Attributes.Add("style", "vnd.ms-excel.numberformat:@");
//e.Item.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");
}
}
#endregion
}
}
posted on 2005-02-02 00:16 木野狐(Neil Chen) 阅读(10278) 评论(60) 编辑 收藏 网摘 所属分类: .NET
相关推荐
文件`Jquery_easyui_datagrid_js导出excel.doc`可能是文档说明或者包含插件使用的示例代码。通常,jQuery插件能简化Datagrid数据导出的操作。一种常见的方式是使用`html2canvas`和`jsPDF`库,它们可以将HTML内容转换...
"EasyUI Datagrid 导出到Excel"这一主题涉及的是如何将EasyUI Datagrid中的数据显示在Excel表格中,方便用户进行数据处理和分析。以下是对这个知识点的详细说明: 1. EasyUI Datagrid简介: EasyUI Datagrid是基于...
easyui datagrid 导出到Excel js实现 跨浏览器 资源真实可用
VB6 DataGrid中的数据导出到Excel 本篇文章将详细介绍如何使用VB6将DataGridView中的数据导出到Excel文件中。下面将对标题、描述、标签和部分内容进行解释,并生成相关的知识点。 标题:VB6 DataGrid中的数据导出...
AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar
easyui-datagrid导出至Excel插件,中文没有乱码问题。
本例提供的"vb DataGrid导出excel例子"是一个很好的学习资源,它将展示如何在VB中实现这个功能,使得开发人员能够快速地将用户界面的数据转换为可编辑的Excel文件。 首先,我们需要了解VB中与DataGrid和Excel交互的...
flex中dataGrid导出数据到excel中,不存在乱码问题
### DataGrid导出EXCEL的几种方法:深入探讨与实践 在Web开发中,将数据导出为Excel格式是常见的需求之一,尤其是当涉及到大量数据分析和报表制作时。本文将详细解析如何使用ASP.NET中的DataGrid控件实现数据导出至...
将datagrid数据导出到excel或者word 本文主要讲解如何将DataGridView控件中的数据导出到Excel或者Word文档中。 下面是相关的知识点: 1. ASP.NET 中的数据导出:在 ASP.NET 中,可以使用 Response 对象来控制...
asp.net(vb) datagrid导出为excel asp.net(vb) datagrid导出为excel asp.net(vb) datagrid导出为excel asp.net(vb) datagrid导出为excel
FileStream BookStream = new FileStream(saveFileDialog.FileName.ToString(), FileMode.Create, FileAccess.Write);//定义文件流 book.Write(BookStream);... MessageBox.Show("导出保存成功!");
要将datagrid导出到Excel,我们需要使用Microsoft Office Interop库,这是一个允许.NET应用程序与Office应用程序进行交互的API。在VS2003中,首先确保已安装Microsoft Office,然后在项目中引用Microsoft.Office....
private void daochu_Click(object sender, ... if (dataGrid.Columns[i].Visibility == System.Windows.Visibility.Visible)//只导出可见列 { dt.Columns.Add(dataGrid.Columns[i].Header.ToString());//构建表头
将Flex中的Datagrid数据导出到Excel是常见的需求,特别是在需要用户下载和进一步处理大量数据时。 首先,让我们深入理解Flex的Datagrid组件。Datagrid是一种灵活的数据展示工具,它可以显示来自不同数据源的数据,...
在本场景中,我们关注的是如何利用Silverlight技术将DataGrid中的数据导出到Excel文件中。DataGrid是Silverlight提供的一种控件,用于显示和操作表格数据。而Excel则是Microsoft Office套件中的电子表格应用,广泛...
标题与描述中提到的“datagrid数据导出到excel”指的是在VB.NET开发环境下,如何将DataGridView控件中的数据导出为Excel文件的过程。以下是对该过程的详细解析: 一、连接数据库与获取数据 在代码片段的开始部分,...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中使用DataGrid控件来实现数据的显示、编辑、保存以及导出到Excel和Word的功能。这些功能对于开发高效且用户友好的桌面应用程序至关重要...
本教程将详细介绍如何实现从Flex DataGrid导出数据到Excel的功能。 首先,让我们了解Flex DataGrid。它是一个强大的组件,用于显示二维数据集,通常包含可排序和可分页的列。DataGrid可以绑定到各种数据源,包括...
本主题将深入探讨如何在Flex中实现组件DataGrid的数据导出功能,使其能够生成Excel文件供用户下载和处理。 DataGrid是Flex中常用的一个组件,它用于展示结构化数据,通常用于表格形式的展示。在Flex中,我们可以...