using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Globalization;
using System.IO;
namespace CSPlatform.Website.Admin
{
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>
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);
}
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
}
}
分享到:
相关推荐
datagridview导出到Excel类 很实用 其中有三种方法
空间名为“whh” ,类中函数名tool_Excel.UpLoadExcel()中有3个参数,参数1:dataGridView对象,参数2:Excel文件存储路径(string),参数3:要创建的表名(string),超级好用,给大家分享。
c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#) winform
在IT行业中,尤其是在开发领域,将数据导出到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换等场景。在.NET框架下,C#作为主要的编程语言之一,提供了多种方式来实现这一功能。本篇将详细介绍使用...
"从DBGrid导出到Excel表格 4种方法" DBGrid 是一個常見的数据-grid 控件,经常用於显示数据库中的数据。不过,DBGrid 的数据如何导出到 Excel 表格中,這是一个大家常见的问题。其实,DBGrid 的数据可以通过多种...
在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...
C#大量数据导出到Excel,超过65536行时自动分页导出
echarts图表导出到excel中的解决方法,做个备忘录,以防忘记
Visual C++源代码 173 如何把水晶报表导出到Excel文件Visual C++源代码 173 如何把水晶报表导出到Excel文件Visual C++源代码 173 如何把水晶报表导出到Excel文件Visual C++源代码 173 如何把水晶报表导出到Excel文件...
总结,C#导出Excel的类主要依赖于像EPPlus这样的第三方库,它们提供了一种方便的方式来创建和操作Excel文件,而无需依赖Excel应用程序。这个类可以帮助开发者快速地将数据导出为Excel格式,为数据分析和报告提供便利...
文件`Jquery_easyui_datagrid_js导出excel.doc`可能是文档说明或者包含插件使用的示例代码。通常,jQuery插件能简化Datagrid数据导出的操作。一种常见的方式是使用`html2canvas`和`jsPDF`库,它们可以将HTML内容转换...
winform中将Datatable数据导出到Excel表格中,该项目包含了例子,能使个人能更加了解winform将datatable数据导出到excel的整个流程,本资源也可拿来即用,只需要稍加修改即可。
Delphi 高效率导出数据到 Excel Delphi 是一个功能强大的开发工具,可以用于开发各种类型的应用程序,而 Excel 是一个非常popular的电子表格软件,经常用于数据分析和处理。在实际开发中,我们经常需要将数据从 ...
根据提供的代码片段,我们可以总结出以下关于“chart图表导出到excel”的相关知识点: ### 1. 使用Excel COM对象导出图表至Excel 在.NET框架中,可以通过引用Microsoft Office对象库来操作Excel文档,实现图表的...
易语言超级列表框导出到Excel表格模块源码例程程序调用API函数实现超级列表框导出到Excel表格。易语言超级列表框导出到Excel表格模块源码使用HTML表格格式写出。资源作者:。资源界面:。资源下载:。
使用Java POI,可以将图片导出到Excel中,这需要使用到Drawings类和Picture类。首先,需要创建一个Drawings对象,然后使用Drawings对象的addPicture方法将图片添加到Excel中。 3. 使用Java POI下载Excel文件 在示例...
导出excel帮助类
在MATLAB Simulink环境中,将示波器数据导出到Excel表格是一项常见的需求,这有助于数据的存储、分析和进一步处理。以下是一份详细的步骤教程: 首先,我们需要准备一个Simulink模型,在模型中添加必要的组件。核心...
如果你需要将`TableView`中的数据导出到Excel格式的文件,这涉及到数据处理和文件操作。以下是实现这个功能的一些关键知识点和步骤: 1. **数据模型**: - QML的`TableView`是基于数据模型来显示数据的。数据模型...
在Java编程中,将List集合数据导出到Excel表格是一个常见的需求,特别是在数据分析、报表生成或数据导出等场景。本实例提供了一个通用工具类,能够处理多种不同类型的对象集合,实现了最大化的通用性,使得开发者...