ASP.NET导出EXCEl方法使用EXCEl对象
导出功能必须使用 office中EXCEl对象,整个操作如同在操作EXCEl一样,建立EXCEl应用----建立工作簿---建立sheet表单页,
代码实现过程中,如果想对单元格实现一些操作,或者汇总功能,可以先使用,EXCEl中的宏来操作。
使用方法 第一步:工具---宏----录制新宏---保存-----第二步:工具---宏---宏---编辑(编辑框中的代码就是在程序中所要使用的对象,和参数设置,可以通过excel对象来调用对象,直接在代码中操作excel)
protected string PrintExcel(string _printType, string _userid)
{
Excel.Application xApp = null;
Excel.Workbook xBook = null;
Excel.Worksheet xSheet = null;
Excel.Range xRange = null;
try
{
string targetDic = System.Web.HttpContext.Current.Server.MapPath("../") + "ReportFile\\";
string targetName = Session["RWTJHZ_txtDateStart"].ToString() + "至" + Session["RWTJHZ_txtDateEnd"].ToString() + "工作量汇总统计.xls";
xApp = new Excel.ApplicationClass();
xBook = xApp.Workbooks.Add(true);
xSheet = (Excel.Worksheet)xBook.Sheets[1];
DataTable _dt;
int _rowIndex = 0;
switch (_printType)
{
case "detail":
DataSet _dsContent = (DataSet)Session["RWTJHZ_dsContent"];
_dsContent.Tables[0].DefaultView.RowFilter = "userid='" + _userid + "'";
_dt = _dsContent.Tables[0].DefaultView.ToTable();
_dsContent.Tables[0].DefaultView.RowFilter = "";
string _biaozhi = "", _proType = "";
//如果是查询个人的工作量则修改文件名称
targetName = Session["RWTJHZ_txtDateStart"].ToString() + "至" + Session["RWTJHZ_txtDateEnd"].ToString() + "工作量汇总统计" + "(" + _dt.Rows[0]["username"] + ")" + ".xls";
//在填入内容之前先合并单元格
xRange = xSheet.get_Range(xApp.Cells[1, 1], xApp.Cells[1, 8]);
xRange.MergeCells = true;
xRange = xSheet.get_Range(xApp.Cells[3, 1], xApp.Cells[9, 1]);
xRange.MergeCells = true;
#region 标题
xRange = xSheet.get_Range(xApp.Cells[1, 1], xApp.Cells[1, 8]);
//合并标题单元格
xRange.MergeCells = true;
//内容
xRange.Value2 = targetName.TrimEnd('.', 'x', 'l', 's');
//设置居中
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
//字体大小为14
xRange.Font.Size = 16;
//字体加粗
xRange.Font.Bold = true;
#endregion
#region 表头
//姓名
xRange = xSheet.get_Range(xApp.Cells[2, 1], xApp.Cells[2, 1]);
xRange.Value2 = "姓名";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("A:A", Type.Missing).ColumnWidth = 21;
//工作名称
xRange = xSheet.get_Range(xApp.Cells[2, 2], xApp.Cells[2, 2]);
xRange.Value2 = "工作名称";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("B:B", Type.Missing).ColumnWidth = 18;
//类型
xRange = xSheet.get_Range(xApp.Cells[2, 3], xApp.Cells[2, 3]);
xRange.Value2 = "类型";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("C:C", Type.Missing).ColumnWidth = 10;
//地点
xRange = xSheet.get_Range(xApp.Cells[2, 4], xApp.Cells[2, 4]);
xRange.Value2 = "地点";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("D:D", Type.Missing).ColumnWidth = 15;
//工作开始时间
xRange = xSheet.get_Range(xApp.Cells[2, 5], xApp.Cells[2, 5]);
xRange.Value2 = "工作开始时间";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("E:E", Type.Missing).ColumnWidth = 16;
//工作结束时间
xRange = xSheet.get_Range(xApp.Cells[2, 6], xApp.Cells[2, 6]);
xRange.Value2 = "工作结束时间";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("F:F", Type.Missing).ColumnWidth = 16;
//工时
xRange = xSheet.get_Range(xApp.Cells[2, 7], xApp.Cells[2, 7]);
xRange.Value2 = "工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//备注
xRange = xSheet.get_Range(xApp.Cells[2, 8], xApp.Cells[2, 8]);
xRange.Value2 = "备注";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
#endregion
#region 内容
//人员汇总信息
string _outlineMsg = "";
_outlineMsg += _dt.Rows[0]["username"].ToString();
_outlineMsg += "(" + _dt.Rows[0]["department"].ToString() + ")\r\n";
_outlineMsg += "节目制作工时:" + GetShowLength(_userid) + "\r\n";
_outlineMsg += "节目制作场次:" + GetShowCount(_userid) + "\r\n";
_outlineMsg += "值班工时:" + GetDutyLength(_userid) + "\r\n";
_outlineMsg += "派单出机工时:" + GetDispatchLength(_userid) + "\r\n";
_outlineMsg += "其他任务工时:" + GetRenWuLength(_userid) + "\r\n";
_outlineMsg += "总工时:" + GetWorkLength(_userid);
//xSheet.get_Range(xApp.Cells[3, 1], xApp.Cells[GVData.Rows.Count + 3, 1]).NumberFormatLocal = "@";
xSheet.get_Range(xApp.Cells[3, 1], xApp.Cells[9, 1]).Value2 = _outlineMsg;
for (int i = 0; i < _dt.Rows.Count; i++)
{
_rowIndex = i + 3;
//工作名称
xSheet.get_Range(xApp.Cells[_rowIndex, 2], xApp.Cells[_rowIndex, 2]).Value2 = _dt.Rows[i]["pro_Title"].ToString();
//类型
_biaozhi = _dt.Rows[i]["tableType"].ToString().Trim();
_proType = _dt.Rows[i]["pro_type"].ToString().Trim();
switch (_biaozhi)
{
case "pro":
if (_proType == "节目制作单")
{
xSheet.get_Range(xApp.Cells[_rowIndex, 3], xApp.Cells[_rowIndex, 3]).Value2 = "节目制作";
}
else if (_proType == "简单任务")
{
xSheet.get_Range(xApp.Cells[_rowIndex, 3], xApp.Cells[_rowIndex, 3]).Value2 = "其他任务";
}
break;
case "duty":
xSheet.get_Range(xApp.Cells[_rowIndex, 3], xApp.Cells[_rowIndex, 3]).Value2 = "值班";
break;
case "dis":
xSheet.get_Range(xApp.Cells[_rowIndex, 3], xApp.Cells[_rowIndex, 3]).Value2 = "出机";
break;
}
//地点
xSheet.get_Range(xApp.Cells[_rowIndex, 4], xApp.Cells[_rowIndex, 4]).Value2 = _dt.Rows[i]["pro_Place"].ToString();
//工作开始时间
xSheet.get_Range(xApp.Cells[_rowIndex, 5], xApp.Cells[_rowIndex, 5]).Value2 = _dt.Rows[i]["timeFr"].ToString();
//工作结束时间
xSheet.get_Range(xApp.Cells[_rowIndex, 6], xApp.Cells[_rowIndex, 6]).Value2 = _dt.Rows[i]["timeTo"].ToString();
//工时
xSheet.get_Range(xApp.Cells[_rowIndex, 7], xApp.Cells[_rowIndex, 7]).Value2 = _dt.Rows[i]["ot"].ToString();
//备注
xSheet.get_Range(xApp.Cells[_rowIndex, 8], xApp.Cells[_rowIndex, 8]).Value2 = _dt.Rows[i]["note"].ToString();
}
#endregion
//显示边框
xRange = xSheet.get_Range(xApp.Cells[1, 1], xApp.Cells[_rowIndex, 8]);
xRange.Borders.LineStyle = 1;
//取向
xSheet.PageSetup.Orientation = Excel.XlPageOrientation.xlLandscape;
break;
case "outline":
_dt = ((DataTable)Session["RWTJHZ_dtOutline"]).DefaultView.ToTable();
#region 标题
xRange = xSheet.get_Range(xApp.Cells[1, 1], xApp.Cells[1, 8]);
//合并标题单元格
xRange.MergeCells = true;
//内容
xRange.Value2 = targetName.TrimEnd('.', 'x', 'l', 's');
//设置居中
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
//字体大小为14
xRange.Font.Size = 16;
//字体加粗
xRange.Font.Bold = true;
#endregion
#region 表头
//组别
xRange = xSheet.get_Range(xApp.Cells[2, 1], xApp.Cells[2, 1]);
xRange.Value2 = "组别";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
xSheet.Columns.get_Range("A:A", Type.Missing).ColumnWidth = 16;
//姓名
xRange = xSheet.get_Range(xApp.Cells[2, 2], xApp.Cells[2, 2]);
xRange.Value2 = "姓名";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//节目制作工时
xRange = xSheet.get_Range(xApp.Cells[2, 3], xApp.Cells[2, 3]);
xRange.Value2 = "节目制作工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//节目制作场次
xRange = xSheet.get_Range(xApp.Cells[2, 4], xApp.Cells[2, 4]);
xRange.Value2 = "节目制作场次";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//值班工时
xRange = xSheet.get_Range(xApp.Cells[2, 5], xApp.Cells[2, 5]);
xRange.Value2 = "值班工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//派单出机工时
xRange = xSheet.get_Range(xApp.Cells[2, 6], xApp.Cells[2, 6]);
xRange.Value2 = "派单出机工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//其他任务工时
xRange = xSheet.get_Range(xApp.Cells[2, 7], xApp.Cells[2, 7]);
xRange.Value2 = "其他任务工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
//总工时
xRange = xSheet.get_Range(xApp.Cells[2, 8], xApp.Cells[2, 8]);
xRange.Value2 = "总工时";
xRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
xRange.WrapText = true;
xRange.Font.Size = 12;
xRange.Font.Bold = true;
#endregion
#region 内容
for (int i = 0; i < _dt.Rows.Count; i++)
{
_rowIndex = i + 3;
//组别
xSheet.get_Range(xApp.Cells[_rowIndex, 1], xApp.Cells[_rowIndex, 1]).Value2 = _dt.Rows[i]["department"].ToString();
//姓名
xSheet.get_Range(xApp.Cells[_rowIndex, 2], xApp.Cells[_rowIndex, 2]).Value2 = _dt.Rows[i]["username"].ToString();
//节目制作工时
xSheet.get_Range(xApp.Cells[_rowIndex, 3], xApp.Cells[_rowIndex, 3]).Value2 = _dt.Rows[i]["proLength"].ToString();
//节目制作场次
xSheet.get_Range(xApp.Cells[_rowIndex, 4], xApp.Cells[_rowIndex, 4]).Value2 = _dt.Rows[i]["proCount"].ToString();
//值班工时
xSheet.get_Range(xApp.Cells[_rowIndex, 5], xApp.Cells[_rowIndex, 5]).Value2 = _dt.Rows[i]["dutyLength"].ToString();
//派单出机工时
xSheet.get_Range(xApp.Cells[_rowIndex, 6], xApp.Cells[_rowIndex, 6]).Value2 = _dt.Rows[i]["disLength"].ToString();
//其他任务工时
xSheet.get_Range(xApp.Cells[_rowIndex, 7], xApp.Cells[_rowIndex, 7]).Value2 = _dt.Rows[i]["otherLength"].ToString();
//总工时
xSheet.get_Range(xApp.Cells[_rowIndex, 8], xApp.Cells[_rowIndex, 8]).Value2 = _dt.Rows[i]["totalLength"].ToString();
}
#endregion
break;
}
xBook.SaveCopyAs(targetDic + targetName);
#region 代码回收
try
{
if (xSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xSheet);
xSheet = null;
}
if (xBook != null)
{
try
{
xBook.Close(false, System.Type.Missing, System.Type.Missing);
}
catch { }
System.Runtime.InteropServices.Marshal.ReleaseComObject(xBook);
xBook = null;
}
if (xApp != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xApp);
xApp = null;
}
}
catch { }
xApp = null;
GC.Collect();
#endregion
return targetDic + targetName;
}
catch (Exception ex)
{
ZWL.Common.PublicMethod.errorLog("PrintExcel", ex);
#region 代码回收
try
{
if (xSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xSheet);
xSheet = null;
}
if (xBook != null)
{
try
{
xBook.Close(false, System.Type.Missing, System.Type.Missing);
}
catch { }
System.Runtime.InteropServices.Marshal.ReleaseComObject(xBook);
xBook = null;
}
if (xApp != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xApp);
xApp = null;
}
}
catch { }
xApp = null;
GC.Collect();
#endregion
return "";
}
}
ASP.NET导出EXCEl方法使用EXCEl对象的更多相关文章
- ASP.NET导出EXCEl方法使用COM.EXCEL不使用EXCEl对象
第一种:导出gridVIEW中的数据,用hansTABLE做离线表,将数据库中指定表中的所有数据按GRIDVIEW中绑定的ID导出 只能导出数据不能去操作相应的EXCEl表格,不能对EXCEL中的数据 ...
- 【转】asp.net导出数据到Excel的三种方法
来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/ ...
- ASP.NET常用导出Excel方法汇总
本文转载:http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html http://geekswithblogs.net/a ...
- ASP.NET导出Excel文件
第一种最常见,并且最简单的方式,直接把GridView导出,导出格式为文本表格形式. protected void btnSaveExcel_Click(object sender, EventArg ...
- asp.net 导出excel文件
之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现 ...
- asp.net导出excel科学计数问题
方法一: 在asp.net 中 我一般都是将要导出的数据放到gridview网格里,首先对网格邦定数据时 字符串形式处理,然后再用普通的形式导出excel就把问题解决了. 我的代码非常简单:在邦定gr ...
- .NET导入导出Excel方法总结
最近,应项目的需求,需要实现Excel的导入导出功能,对于Web架构的Excel导入导出功能,比较传统的实现方式是: 1)导入Excel:将Excel文件上传到服务器的某一文件夹下,然后在服务端完成E ...
- Asp.net导出Excel续章(自定义合并单元格,非Office组件)
结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...
- ASP.NET使用NPOI加载Excel模板并导出下载
1.为什么要使用NPOI导出Excel? 一.解决传统操作Excel遇到的问题: 如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导 ...
随机推荐
- UITableViewCell性能优化
5.UITableViewCell性能优化 > 定义一个循环利用标识 static NSString *ID = @"C1"; > 从缓存池中取出可循环利用的cell ...
- 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
- php操作路径的经典方法
function create_folders($dir){ return is_dir($dir) or ( create_folders( dirname( $dir ) ) and mkd ...
- Android 主线程和线程之间相互发送消息
通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...
- bootstrap注意事项(八)一些辅助信息
1.三角符号 通过使用三角符号可以指示某个元素具有下拉菜单的功能.注意,向上弹出式菜单中的三角符号是反方向的. <!DOCTYPE HTML><html><head> ...
- VMware vSphere Client为虚拟机制定物理网卡(图文并茂)
1.首先,查看我的服务器有几张网卡,如下图共3张,接下来我将为虚拟主机制定一张网卡,以及为当中的两台虚拟的CentOS7各制定一张网卡. 2.打开“硬件”---->“网络”,如图,已经启用一张网 ...
- Lua的元方法__newindex元方法
上一篇介绍了__index元方法,总结来说:__index元方法是用于处理访问table中不存在的字段时的情况. 而今天,介绍的__newindex元方法,总结来说,就是:用于处理给table中不存在 ...
- java获得平台相关的行分隔符和java路径分隔符的方法
System.getProperties(): 行分隔符在windows 下是 \r\n,在Linux下面是 \n, 在Mac下是 \r路径分隔符在windows下是 \ ,在LInux下是 / Sy ...
- jsp获取枚举的值
Struts2的Action传回页面一个list,页面迭代这个list,获取下拉框的值,获取过来是枚举类型. 在jsp页面获取枚举的常量值和枚举的值的例子如下: jsp页面: <td >状 ...
- Mysql中表名作为参数的问题
近期由于程序的异常,导致数据库中创建了大量的表(约4000个),纠结的是表中的数据还都是有用的. 需要合并到一个表中,首先想到的就是使用存储过程来处理,但由于表名都是动态生成的,需要解决在存储过程中处 ...