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 帮助类的更多相关文章

  1. excel工具类

    excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...

  2. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  3. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

  4. asp.net(C#) Excel导出类 导出.xls文件

    ---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft   Excel   11.0   Obje ...

  5. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  6. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  7. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  8. 30 个 PHP 的 Excel 处理类

    下面的 PHP Excel 处理类中,包含 Excel 读写.导入导出等相关的类,列表如下: PHP Excel Reader classes 1. Read Excel Spreadsheets u ...

  9. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  10. 29 个 PHP 的 Excel 处理类

    下面的 PHP Excel 处理类中,包含 Excel 读写.导入导出等相关的类,列表如下: PHP Excel Reader classes 1. Read Excel Spreadsheets u ...

随机推荐

  1. 2.定义图形类Shape,该类中有获得面积的方法getArea();定义长方形类Rect,该类是Shape的子类,类中有矩形长和宽的变量double a,double b,设置长和宽的方法setWidth()、setHeight(),使用getArea()求矩形面积;利用getArea方法实现题1中圆面积的求解。

    // 图形类Shape package d922B; public class Shape { double getArea(ShapePara x){ return x.getArea(); } d ...

  2. Hibernate框架--关联映射,一对多,多对多 inverse cascade

    回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...

  3. POJ 3737/三分

    题目链接[http://poj.org/problem?id=3737] 题意:给出一个圆锥的表面积,求最大的体积,并输出最大体积的时候的圆锥的高度和底面积. 方法一: 根据定理:圆锥的表面积一定的时 ...

  4. 《JavaScript高级程序设计》读书笔记 ---if语句

    if语句 大多数编程语言中最为常用的一个语句就是if 语句.以下是if 语句的语法:if (condition) statement1 else statement2其中的condition(条件)可 ...

  5. Struts2--课程笔记1

    第一个Struts程序: 在开发Struts程序之前,首先要导入额外的jar包,基本需求的是14个jar包,关于14个ja包是什么,有什么作用,此处不讲述. 还要配置web.xml文件,注册Strut ...

  6. Java语言进阶过程(转)

    [以下肯定是不完整的列表,欢迎补充] Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1. 熟悉一种文本编辑器,比如Vim, Emacs, Note ...

  7. linux的pvtrace环境配置

    1.查看当前ubuntu版本号 froid@ubuntu:~/Desktop$ lsb_release -aNo LSB modules are available.Distributor ID:   ...

  8. LoadRunner性能测试指标分析

    Memory: ·Available Mbytes 简述:可用物理内存数.如果Available Mbytes的值很小(4 MB或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存. 参考值 ...

  9. js第一天 innerHTML和value 的区别

    innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...

  10. angular 搜索记录保留

    #方法1: 点击后退到home后,再点击搜索, locationChangeStart 事件会多次触发. # $scope.keyword = $location.search().search # ...