Excel 帮助类
using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Reflection; using Aspose.Cells; namespace Web { /// <summary> /// excel帮助类 /// </summary> public class ExcelHelp { /// <summary> /// Excel帮助类 /// </summary> /// <param name="dataTable"></param> public static byte[] EntityDataToExcel(EntityDataTable dataTable, List<ExcelT> excelTs,bool isMuchHead,string title,int columnCount) { Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[]; Cells cells = sheet.Cells; //插入标题 Range rangeTitle = cells.CreateRange(, , , columnCount); //标题样式 rangeTitle.RowHeight = ; int styleIndex = workbook.Styles.Add(); Style rangeStyle = workbook.Styles[styleIndex]; rangeStyle.ForegroundColor = Color.Yellow; rangeStyle.Pattern = BackgroundType.Solid; rangeStyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; rangeStyle.Font.IsBold=true; rangeStyle.Font.Size = ; rangeStyle.HorizontalAlignment=TextAlignmentType.Center; rangeStyle.VerticalAlignment = TextAlignmentType.Center; Cell cellTitle = rangeTitle[, ]; cellTitle.PutValue(title); cellTitle.Style.Font.Size = ; rangeTitle.Style = rangeStyle; rangeTitle.Merge(); ; ; : ; var count = dataTable.Count; var tCount = excelTs.Count; //头样式 int headIndex = workbook.Styles.Add(); Style headStyle = workbook.Styles[headIndex]; headStyle.HorizontalAlignment=TextAlignmentType.Center; headStyle.VerticalAlignment = TextAlignmentType.Center; headStyle.Font.IsBold = true; //插入头 ; h < tCount; h++) { ExcelT excelHead = excelTs[h]; //有子表头的 ) { var childCount = excelHead.ChildExcelT.Count; Range csHeadRange = cells.CreateRange(rowIndex, colIndex, , childCount); Cell rsCell = csHeadRange[, ]; rsCell.PutValue(excelHead.Head); csHeadRange.Style = headStyle; csHeadRange.Merge(); ; foreach (var childT in excelHead.ChildExcelT) { cells[childRowIndex, colIndex].PutValue(childT.Head); cells[childRowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } else { if (isMuchHead) { Range rsHeadRange = cells.CreateRange(rowIndex, colIndex,,); Cell rsCell = rsHeadRange[, ]; rsCell.PutValue(excelHead.Head); rsHeadRange.Style = headStyle; rsHeadRange.Merge(); colIndex = colIndex + ; } //正常不含多表头的 else { cells[rowIndex, colIndex].PutValue(excelTs[h].Head); cells[rowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } } rowIndex = rowIndex + headRow; //插入数据 ; i < count; i++) { var record = dataTable[i]; var dt = record.DataTable; ; var rowValue = i + rowIndex; ; j < excelTs.Count; j++) { var currentT = excelTs[j]; ) { foreach (var childT in currentT.ChildExcelT) { cells[rowValue, dataI].PutValue(record[childT.DataIndex]); if(childT.Width!=null) { cells.SetColumnWidth(dataI,Convert.ToDouble(childT.Width)); } dataI = dataI + ; } } else { cells[rowValue, dataI].PutValue(record[currentT.DataIndex]); if (currentT.Width != null) { cells.SetColumnWidth(dataI, Convert.ToDouble(currentT.Width)); } dataI = dataI + ; } } } // sheet.AutoFitColumns(); MemoryStream fileStream = new MemoryStream(); fileStream = workbook.SaveToStream(); return fileStream.ToArray(); } /// <summary> /// Excel帮助类 /// </summary> /// <param name="dataTable"></param> public static byte[] DynamicToExcel(List<dynamic> listData, List<ExcelT> excelTs, bool isMuchHead, string title, int columnCount) { Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[]; Cells cells = sheet.Cells; //插入标题 Range rangeTitle = cells.CreateRange(, , , columnCount); //标题样式 rangeTitle.RowHeight = ; int styleIndex = workbook.Styles.Add(); Style rangeStyle = workbook.Styles[styleIndex]; rangeStyle.ForegroundColor = Color.Yellow; rangeStyle.Pattern = BackgroundType.Solid; rangeStyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; rangeStyle.Font.IsBold = true; rangeStyle.Font.Size = ; rangeStyle.HorizontalAlignment = TextAlignmentType.Center; rangeStyle.VerticalAlignment = TextAlignmentType.Center; Cell cellTitle = rangeTitle[, ]; cellTitle.PutValue(title); cellTitle.Style.Font.Size = ; rangeTitle.Style = rangeStyle; rangeTitle.Merge(); ; ; : ; var count = listData.Count; var tCount = excelTs.Count; //头样式 int headIndex = workbook.Styles.Add(); Style headStyle = workbook.Styles[headIndex]; headStyle.HorizontalAlignment = TextAlignmentType.Center; headStyle.VerticalAlignment = TextAlignmentType.Center; headStyle.Font.IsBold = true; //插入头 ; h < tCount; h++) { ExcelT excelHead = excelTs[h]; //有子表头的 ) { var childCount = excelHead.ChildExcelT.Count; Range csHeadRange = cells.CreateRange(rowIndex, colIndex, , childCount); Cell rsCell = csHeadRange[, ]; rsCell.PutValue(excelHead.Head); csHeadRange.Style = headStyle; csHeadRange.Merge(); ; foreach (var childT in excelHead.ChildExcelT) { cells[childRowIndex, colIndex].PutValue(childT.Head); cells[childRowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } else { if (isMuchHead) { Range rsHeadRange = cells.CreateRange(rowIndex, colIndex, , ); Cell rsCell = rsHeadRange[, ]; rsCell.PutValue(excelHead.Head); rsHeadRange.Style = headStyle; rsHeadRange.Merge(); colIndex = colIndex + ; } //正常不含多表头的 else { cells[rowIndex, colIndex].PutValue(excelTs[h].Head); cells[rowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } } rowIndex = rowIndex + headRow; //插入数据 ; i < count; i++) { var currentRow = listData[i]; Type t = currentRow.GetType(); ; var rowValue = i + rowIndex; ; j < excelTs.Count; j++) { var currentT = excelTs[j]; ) { foreach (var childT in currentT.ChildExcelT) { var filedIndex = childT.DataIndex; var currentField = t.GetProperty(filedIndex); var currentValue= currentField.GetValue(currentRow,null); cells[rowValue, dataI].PutValue(currentValue); if (childT.Width != null) { cells.SetColumnWidth(dataI, Convert.ToDouble(childT.Width)); } dataI = dataI + ; } } else { var filedIndex = currentT.DataIndex; var currentField = t.GetProperty(filedIndex); var currentValue = currentField.GetValue(currentRow, null); cells[rowValue, dataI].PutValue(currentValue); if (currentT.Width != null) { cells.SetColumnWidth(dataI, Convert.ToDouble(currentT.Width)); } dataI = dataI + ; } } } // sheet.AutoFitColumns(); MemoryStream fileStream = new MemoryStream(); fileStream = workbook.SaveToStream(); return fileStream.ToArray(); } public static byte[] DataTableToExcel(DataTable dataTable, List<ExcelT> excelTs, bool isMuchHead, string title, int columnCount) { Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[]; Cells cells = sheet.Cells; //插入标题 Range rangeTitle = cells.CreateRange(, , , columnCount); //标题样式 rangeTitle.RowHeight = ; int styleIndex = workbook.Styles.Add(); Style rangeStyle = workbook.Styles[styleIndex]; rangeStyle.ForegroundColor = Color.Yellow; rangeStyle.Pattern = BackgroundType.Solid; rangeStyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; rangeStyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; rangeStyle.Font.IsBold = true; rangeStyle.Font.Size = ; rangeStyle.HorizontalAlignment = TextAlignmentType.Center; rangeStyle.VerticalAlignment = TextAlignmentType.Center; Cell cellTitle = rangeTitle[, ]; cellTitle.PutValue(title); cellTitle.Style.Font.Size = ; rangeTitle.Style = rangeStyle; rangeTitle.Merge(); ; ; : ; var tCount = excelTs.Count; //头样式 int headIndex = workbook.Styles.Add(); Style headStyle = workbook.Styles[headIndex]; headStyle.HorizontalAlignment = TextAlignmentType.Center; headStyle.VerticalAlignment = TextAlignmentType.Center; headStyle.Font.IsBold = true; //插入头 ; h < tCount; h++) { ExcelT excelHead = excelTs[h]; //有子表头的 ) { var childCount = excelHead.ChildExcelT.Count; Range csHeadRange = cells.CreateRange(rowIndex, colIndex, , childCount); Cell rsCell = csHeadRange[, ]; rsCell.PutValue(excelHead.Head); csHeadRange.Style = headStyle; csHeadRange.Merge(); ; foreach (var childT in excelHead.ChildExcelT) { cells[childRowIndex, colIndex].PutValue(childT.Head); cells[childRowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } else { if (isMuchHead) { Range rsHeadRange = cells.CreateRange(rowIndex, colIndex, , ); Cell rsCell = rsHeadRange[, ]; rsCell.PutValue(excelHead.Head); rsHeadRange.Style = headStyle; rsHeadRange.Merge(); colIndex = colIndex + ; } //正常不含多表头的 else { cells[rowIndex, colIndex].PutValue(excelTs[h].Head); cells[rowIndex, colIndex].Style = headStyle; colIndex = colIndex + ; } } } rowIndex = rowIndex + headRow; //插入数据 var count = dataTable.Rows.Count; ; i < count; i++) { DataRow dr = dataTable.Rows[i]; ; var rowValue = i + rowIndex; ; j < excelTs.Count; j++) { var currentT = excelTs[j]; ) { foreach (var childT in currentT.ChildExcelT) { cells[rowValue, dataI].PutValue(dr[childT.DataIndex]); if (childT.Width != null) { cells.SetColumnWidth(dataI, Convert.ToDouble(childT.Width)); } dataI = dataI + ; } } else { cells[rowValue, dataI].PutValue(dr[currentT.DataIndex]); if (currentT.Width != null) { cells.SetColumnWidth(dataI, Convert.ToDouble(currentT.Width)); } dataI = dataI + ; } } } sheet.AutoFitColumns(); MemoryStream fileStream = new MemoryStream(); fileStream = workbook.SaveToStream(); return fileStream.ToArray(); } } }
调用实现实例:
#region 导出费用 public ActionResult ExcelCost(FeeMainSearch feeMainSearch) { //查看所有单位的费用 var payMinList = MainFee.FindFeePayMainComplex(feeMainSearch); List<ExcelT> excelTs = new List<ExcelT>(); //办案单位 ExcelT unitT = new ExcelT(); unitT.DataIndex = "UnitName"; unitT.Head = "办案单位"; unitT.Width = ; excelTs.Add(unitT); //案件编号 ExcelT caseNumberT = new ExcelT(); caseNumberT.DataIndex = "CaseNumber"; caseNumberT.Head = "案件编号"; caseNumberT.Width = ; excelTs.Add(caseNumberT); //应付费用 ExcelT realRoomPayT = new ExcelT(); realRoomPayT.DataIndex = "RealRoomPay"; realRoomPayT.Head = "房间费用"; realRoomPayT.Width = ; excelTs.Add(realRoomPayT); //应付餐费 ExcelT realFoodFeeT = new ExcelT(); realFoodFeeT.DataIndex = "RealFoodFee"; realFoodFeeT.Head = "就餐费用"; realFoodFeeT.Width = ; excelTs.Add(realFoodFeeT); //应付物品费用 ExcelT realGoodFeeT = new ExcelT(); realGoodFeeT.DataIndex = "RealGoodFee"; realGoodFeeT.Head = "物品费用"; realGoodFeeT.Width = ; excelTs.Add(realGoodFeeT); //应付药费 ExcelT realMedicFeeT = new ExcelT(); realMedicFeeT.DataIndex = "RealMedicFee"; realMedicFeeT.Head = "医药费用"; realMedicFeeT.Width = ; excelTs.Add(realMedicFeeT); //应付陪护费 ExcelT realNurseFeeT = new ExcelT(); realNurseFeeT.DataIndex = "RealNurseFee"; realNurseFeeT.Head = "陪护费用"; realNurseFeeT.Width = ; excelTs.Add(realNurseFeeT); //其他费用 ExcelT otherFeeFeeT = new ExcelT(); otherFeeFeeT.DataIndex = "OtherFee"; otherFeeFeeT.Head = "其他费用"; otherFeeFeeT.Width = ; excelTs.Add(otherFeeFeeT); //应付总计 ExcelT realMainToalT = new ExcelT(); realMainToalT.DataIndex = "RealMainToal"; realMainToalT.Head = "费用总计"; realMainToalT.Width = ; excelTs.Add(realMainToalT); //已支付费用 ExcelT mainPayTotalT = new ExcelT(); mainPayTotalT.DataIndex = "MainPayTotal"; mainPayTotalT.Head = "已支付"; excelTs.Add(mainPayTotalT); //已支付费用 ExcelT noMainPayTotalT = new ExcelT(); noMainPayTotalT.DataIndex = "NoMainPayTotal"; noMainPayTotalT.Head = "未支付"; noMainPayTotalT.Width = ; excelTs.Add(noMainPayTotalT); ); return File(fileBytes, "application/ms-excel", Url.Encode("费用单.xls")); } #endregion
Excel 帮助类的更多相关文章
- excel工具类
excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- asp.net(C#) Excel导出类 导出.xls文件
---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft Excel 11.0 Obje ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- C#EXCEL 操作类--C#ExcelHelper操作类
主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...
- Excel 操作类
转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...
- 30 个 PHP 的 Excel 处理类
下面的 PHP Excel 处理类中,包含 Excel 读写.导入导出等相关的类,列表如下: PHP Excel Reader classes 1. Read Excel Spreadsheets u ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- 29 个 PHP 的 Excel 处理类
下面的 PHP Excel 处理类中,包含 Excel 读写.导入导出等相关的类,列表如下: PHP Excel Reader classes 1. Read Excel Spreadsheets u ...
随机推荐
- 38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用comp
//接口Compute package jieKou; public interface Compute { int Computer(int n,int m); } //加 package jieK ...
- socket通信实例
ref: http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html http://blog.csdn.net/love_ga ...
- cookie和session的区别(搜狐笔试考到的一个题目)
一.cookie机制和session机制的区别***************************************************************************** ...
- call ,apply 和 bind的用法与区别
作用都是一样的,官方解释:"调用一个对象的一个方法,以另一个对象替换当前对象", 简单来说就是改变当前使用该方法的对象中的this指向: var xw = { name : &qu ...
- 快速破解ps方法
1.首先现在ps安装包和破解包. 2.运行Block Adobe Activation,防止ADOBE激活程序启动,按操作提示即可. 3.运行Adobe CS6安装程序. 4.选择“试用”. 5.输入 ...
- 转:应用JMeter测试solr请求
使用JMeter测试solr请求 一.安装JMeter 在官网http://jmeter.apache.org/download_jmeter.cgi下载JMeter 直接解压JMeter安装包 Li ...
- ios沙盒查找图片展示
iOS如何找到自己的沙盒 在ios开发我们会用到沙盒,由于自己对沙盒理解的不够,所以找不到沙盒文件在哪里,当然要知道路径了 例如我的路径 NSString* cachepath = [NSHomeDi ...
- html 细线表格
可以<table width="800px" cellpadding="0" border="1px" style="bor ...
- CentOS7 PostgreSQL 主从配置( 三)
postgres 主备切换 主备查看 方法 ps -ef | grep wal (主库 sender)postgres 27873 27864 0 5月06 ? 00:00:10 postgres: ...
- 在linux中创建samba,为Windows共享文件
#首先在linux系统安装samba服务 yum install samba 共享一个目录,使用用户名和密码登录后才可以访问,要求可以读写打开samba的配置文件/etc/samba/smb.con ...