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 ...
随机推荐
- Python 学习笔记11
如何要飞得高,就该把天空忘掉.如果时时想着梦想,那就寸步难行.因为会产生很强的挫败感.倾空自己的杯子,把自己放空,才能放得进去东西. 这两天一直在鼓捣要用python写一个博客出来.先是下载了一个放到 ...
- Quartz(任务调度)- 入门学习
参照:http://blog.csdn.net/szwangdf/article/details/6158646 1.自定义定时任务管理类 QuartzManager 参照大神基础上新增:1.添加jo ...
- 了解Sql
什么是数据库: 数据库是一个以某种有组织的方式存储的数据集合,也可以理解为有组织的数据的容器.数据库相当于文件柜. 表相当于文件柜中的抽屉,表用来存储资料,一个数据库中的表必须唯一. 列,表中的一个字 ...
- 《JS权威指南学习总结--3.1数字》
3.1数字 内容要点: 一.数字直接量:当一个数字直接出现在JS程序中,我们称之为数字直接量. 二.JS中的算术运算 Math.pow(2,53) // => 900719925474 ...
- hdu_5807_Keep In Touch(分段dp)
题目链接:hdu_5807_Keep In Touch 题意: 在Byteland一共有nn个城市,编号依次为11到nn,同时有mm条单向道路连接着这些城市,其中第ii条道路的起点为u_iui, ...
- flash 右键菜单隐藏与修改
来源:http://blog.sina.com.cn/s/blog_7264c84401014fmd.html import flash.ui.ContextMenu;import flash.ui. ...
- 访问nginx-php页面的时候 报access denied.
访问页面的时候出现这个时access denied 只需到/usr/local/php/etc/php.ini中修改一下 把这个注释掉 ;open_basedir = 把这个值赋值为1 cgi.f ...
- .Net下HTTP访问穿越多层代理的方法以及代理服务器的验证 转载
https://blog.williamgates.net/2006/07/aspdotnet-through-multi-proxy/ 首先,通过普通的匿名透明代理的方法,是直接使用Socket发送 ...
- LNMP环境的安装配置
0.安装必要的依赖软件 如果已经安装了可能会进行升级,版本完全一致则不会进行任何操作. yum -y install bzip2-devel curl-devel freetype-devel gcc ...
- VS2010中安装AjaxControlToolkit
原文地址:http://www.asp.net/ajaxlibrary/act.ashx 第一步 下载Ajax Control Toolkit 进入网址http://ajaxcontroltoolki ...