ASP.Net 后台执行导出Excel list集合 有跨行合并
来源:互联网 发布:多线程ping java 编辑:程序博客网 时间:2024/06/05 15:46
/// <summary> /// 导出成交报告应收应付到EXCEL /// </summary> public void InExportToExcelAgreement(HtmlViewCondition htmlView, SearchAgreementViewModel search) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Excel(*.xls)|*.xls|All Files(*.*)|*.*"; dialog.FileName = "应收应付统计.xls"; BaseCommon.CheckInitHtmlViewCondition(ref htmlView); var xlApp = new Microsoft.Office.Interop.Excel.Application(); object missing = System.Reflection.Missing.Value; try { if (xlApp == null) { MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel"); return; } Workbooks xlBooks = xlApp.Workbooks; Workbook xlBook = xlBooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet xlSheet = (Worksheet)xlBook.Worksheets[1]; //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错 //xlApp.Application.Workbooks.Add(true); Range range = null; //****** 抬头 ********************************************************************************* range = xlSheet.Range["A1", "K1"];// range.Merge(Missing.Value); // 合并单元格 range.Columns.AutoFit(); // 设置列宽为自动适应 // 设置单元格左边框加粗 range.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick; // 设置单元格右边框加粗 range.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick; range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中 range.Value2 = "应收应付清单"; range.Font.Size = 18; // 设置字体大小 range.Font.ColorIndex = 5; // 设置字体颜色 //range.Interior.ColorIndex = 6; // 设置单元格背景色 range.RowHeight = 25; // 设置行高 range.ColumnWidth = 20; // 设置列宽 //给第二行赋值,即表格的标题 xlSheet.Cells[2, 1] = "合同编号"; xlSheet.Cells[2, 2] = "成交日期"; xlSheet.Cells[2, 3] = "类型"; xlSheet.Cells[2, 4] = "物业地址"; xlSheet.Cells[2, 5] = "签约人"; xlSheet.Cells[2, 6] = "业主/客户"; xlSheet.Cells[2, 7] = "收付日"; xlSheet.Cells[2, 8] = "款类"; xlSheet.Cells[2, 9] = "应收"; xlSheet.Cells[2, 10] = "实收"; xlSheet.Cells[2, 11] = "状态"; int rowIndex = 3;//这个用来标记数据有多少行位置,从第三行开始显示数据 int myrowIndex = 3; int totalsize = 0; var lvwList = AgreementLogic.GetAgreementFollow(htmlView, out totalsize, search);//取出数据信息 foreach (var model in lvwList) { var count = AgreementLogic.GetAgreementIncomingOutgoing(model.Id).Count;//取单个成交报告收支表的个数 myrowIndex = myrowIndex + count; } //标题栏 range = xlSheet.Range[xlSheet.Cells[2, 1], xlSheet.Cells[2, 11]]; range.Interior.ColorIndex = 45;//设置标题背景色为 浅橙色 range.Font.Bold = true;//标题字体加粗 foreach (var objItem in lvwList) { var type = ""; if (objItem.DeamndType == 0) { type = "出售"; } if (objItem.DeamndType == 1) { type = "出租"; } if (objItem.DeamndType == 2) { type = "办证"; } var agreement = AgreementLogic.BrowseAgreementDetial(objItem.Id); xlSheet.Cells[rowIndex, 1] = objItem.SerialNumber;//合同编号 xlSheet.Cells[rowIndex, 2] = Convert.ToDateTime(objItem.DealTime).ToString("yyyy-MM-dd");//成交日期 xlSheet.Cells[rowIndex, 3] = string.Format("{0}{1}", type, HaoyoujuDict.Haoyoujudict.DeamndTypeDict[objItem.PropertyType]);//类型 xlSheet.Cells[rowIndex, 4] = objItem.PropertyAddress;//物业地址 xlSheet.Cells[rowIndex, 5] = objItem.Name;//签约人 xlSheet.Cells[rowIndex, 6] = string.Format("{0}/{1}", agreement.ForSaleName, agreement.ToBuyName);//业主客户 xlSheet.Cells[rowIndex, 11] = string.Format("{0}-{1}", HaoyoujuDict.Haoyoujudict.AgreementStatusDict[objItem.Status], objItem.IsLock ? "锁定" : "正常");//状态 var list = AgreementLogic.GetAgreementIncomingOutgoing(objItem.Id);//去成交报告的收支信息 int count = 0; if (list.Count == 0)//如果收支信息为空 { xlSheet.Cells[rowIndex, 7] = null;//收付日 xlSheet.Cells[rowIndex, 8] = null;//款类 xlSheet.Cells[rowIndex, 9] = null;//应收 xlSheet.Cells[rowIndex, 10] = null;//实收 count = 1; } else { foreach (var m in list)//取出每个成交报告下的收支详细信息 { xlSheet.Cells[rowIndex + count, 7] = Convert.ToDateTime(m.BillTime).ToString("yyyy-MM-dd");//收付日 xlSheet.Cells[rowIndex + count, 8] = HaoyoujuDict.Haoyoujudict.AgreementIncomingTypeDict[m.Type];//款类 xlSheet.Cells[rowIndex + count, 9] = string.Format("{0}元", m.MustAmount);//应收 xlSheet.Cells[rowIndex + count, 10] = string.Format("{0}元", m.ActualAmount);//实收 count += 1; } } #region 合并单元格 //如果一个成交报告的收支信息的数量超过两条,则需要合并单元格 if (list.Count >= 2) { range = xlSheet.Range[xlSheet.Cells[rowIndex, 1], xlSheet.Cells[rowIndex + count - 1, 1]]; range.Merge(Missing.Value); range.Value2 = objItem.SerialNumber;//合同编号 range = xlSheet.Range[xlSheet.Cells[rowIndex, 2], xlSheet.Cells[rowIndex + count - 1, 2]]; range.Merge(Missing.Value); range.Value2 = Convert.ToDateTime(objItem.DealTime).ToString("yyyy-MM-dd");//成交日期 range = xlSheet.Range[xlSheet.Cells[rowIndex, 3], xlSheet.Cells[rowIndex + count - 1, 3]]; range.Merge(Missing.Value); range.Value2 = string.Format("{0}{1}", type, HaoyoujuDict.Haoyoujudict.DeamndTypeDict[objItem.PropertyType]);//类型 range = xlSheet.Range[xlSheet.Cells[rowIndex, 4], xlSheet.Cells[rowIndex + count - 1, 4]]; range.Merge(Missing.Value); range.Value2 = objItem.PropertyAddress;//物业地址 range = xlSheet.Range[xlSheet.Cells[rowIndex, 5], xlSheet.Cells[rowIndex + count - 1, 5]]; range.Merge(Missing.Value); range.Value2 = objItem.Name;//签约人 range = xlSheet.Range[xlSheet.Cells[rowIndex, 6], xlSheet.Cells[rowIndex + count - 1, 6]]; range.Merge(Missing.Value); range.Value2 = string.Format("{0}/{1}", agreement.ForSaleName, agreement.ToBuyName);//业主客户 range = xlSheet.Range[xlSheet.Cells[rowIndex, 11], xlSheet.Cells[rowIndex + count - 1, 11]]; range.Merge(Missing.Value); range.Value2 = string.Format("{0}-{1}", HaoyoujuDict.Haoyoujudict.AgreementStatusDict[objItem.Status], objItem.IsLock ? "锁定" : "正常");//状态 } #endregion rowIndex = rowIndex + count; } //数据区域 range = xlSheet.Range[xlSheet.Cells[2, 1], xlSheet.Cells[rowIndex, 11]]; range.Borders.LineStyle = 1; range.Font.Size = 11; range.Columns.AutoFit(); range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中 range = xlSheet.Range[xlSheet.Cells[rowIndex, 1], xlSheet.Cells[rowIndex, 11]]; range.Merge(Missing.Value); // 合并单元格 range.RowHeight = 20; range.Value2 = "导出时间: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); range.HorizontalAlignment = XlHAlign.xlHAlignRight;// 设置单元格水平居中 //***** 格式设定 ****************************************************************************** if (xlSheet != null) { xlApp.Visible = false;//显示填充效果 xlBook.SaveCopyAs("D:\\"+dialog.FileName);//保存到服务器地址 xlBook.Close(false, null, null); //关闭excel xlApp.Quit();//关掉任务管理器的进程 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet); GC.Collect();//销毁 string path = "D:\\"+dialog.FileName;//找到服务器下载路径 System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear();//清除原有会话 Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8 ; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 Response.AddHeader("content-disposition", "attachment;filename=" + file.Name); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 //Response.AddHeader("Content-Length", file.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 Response.WriteFile(file.FullName); // 停止页面的执行 Response.End(); } } catch (Exception ex) { Logs.Context.Error(this, ex); xlApp.Quit(); GC.Collect();//销毁 } }
加上页面JS吧
$("#btn_toSubmit").click(function () { var url = '@(Url.Action("InExportToExcelAgreement", "ExcelTonji"))?{0}'.format($("#form1").serialize()); $("#form1").attr("action", url); $("#form1").submit(); $("#form1").attr("action", ""); });
- ASP.Net 后台执行导出Excel list集合 有跨行合并
- asp.net导出Excel带合并单元格
- ASP.NET ,EXT.NET都适用的Excel导出,主要使用List集合转化为Excel输出
- .NET后台导出EXCEL
- Java后台list导出excel
- asp.net合并excel
- asp.net导出excel
- asp.net导出Excel
- asp.net导出excel
- asp.net导出Excel
- Asp.net 导出Excel
- asp.net导出excel
- asp.net 导出excel
- asp.net 导出Excel
- asp.net 导出 excel
- asp.net导出Excel
- ASP.NET Excel导出
- asp.net导出EXCEL
- 前台利用jcrop做头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切
- linux 下gitolite服务器搭建
- POJ 2564 Edit Step Ladders
- C语言的指针要怎么理解
- 无法访问Github,该如何更新OpenStack代码? ( by quqi99 )
- ASP.Net 后台执行导出Excel list集合 有跨行合并
- NFS服务器的配置
- java 中break和continue的区别
- SQL Server视频
- shape的使用
- AJAX 跨域请求 – JSONP的使用,PHP实例详解
- 循环陷阱
- Linux中替换文件中的字符串
- 简单的缓冲区溢出