引用命名空间

  using System.Data.SqlClient;
  using Aspose.Cells;
  using System.Drawing;
  using System.IO;

/// <summary>
       /// 导出EXCEL分页分组函数
       /// </summary>
       /// <param name="PageNum">每页显示数据条数</param>
       /// <param name="PageCount">每页明细+表头的行数</param>
       /// <param name="HeadRow">等於PageCount-PageNum 表頭所占行數</param>
       /// <param name="dtExcel">所有的信息</param>
       /// <param name="dt">按条件分组数据</param>
       /// <param name="imagePath">图片路径</param>
       /// <param name="ExcelName">EXCEL名称</param>
       /// <param name="ImageWidth">图片宽度</param>
       /// <param name="ImageHight">图片高度</param>
        /// <param name="strFlag">分組分頁為1,分組為2,分頁為3</param>
        public void ImportGroupExcel(int PageNum,int PageCount,int HeadRow,DataTable dtExcel,DataTable dt,string imagePath,string ExcelName,int ImageWidth,int ImageHight,string strFlag)
        {
            Workbook workbook = new Workbook();

Worksheet sheet = (Worksheet)workbook.Worksheets[0];
            Cells cells = sheet.Cells;//单元格

byte[] bytes = SmallImageDatabytes(imagePath,ImageWidth,ImageHight);//自動縮小圖片後轉換為二進制流
            MemoryStream ms = new MemoryStream(bytes);

sheet.Pictures.Add(0, 0, ms);//導入圖片到EXC
          
           int intCount = 0;
            int intflag = 0;
            int intGroup = 0;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //串過濾條件
                string strWhere = "";
                for (int t = 0; t < dt.Columns.Count; t++)
                {

if (strWhere == "")
                        strWhere = dt.Columns[t].ToString() + "='" + dt.Rows[i][dt.Columns[t].ToString()] + "'";
                    else
                        strWhere += "and" + dt.Columns[t].ToString() + "='" + "dt[" + i + "][" + dt.Columns[t].ToString() + "]'";
                }

DataRow[] arrayDR = dtExcel.Select(strWhere);
                int intOrdernoNum = dtExcel.Select(strWhere).Length;

if (strFlag == "1")
                {
                    if (intOrdernoNum > PageNum)
                    {
                        int intPageNum = 0;

intPageNum = int.Parse(Math.Ceiling(intOrdernoNum / decimal.Parse(PageNum.ToString())).ToString());

intflag += 1;
                        for (int n = 1; n <= intPageNum; n++)
                        {
                           
                            sheet.Pictures.Add((n + intCount - intflag + i) * PageCount, 0, ms);
                            for (int m = 0; m < PageNum; m++)
                            {

if (intOrdernoNum == m + (n - 1) * PageNum)
                                    break;
                                for (int k = 0; k < dtExcel.Columns.Count; k++)
                                {
                                    Cell cell = sheet.Cells[m + HeadRow-1 + (n + intCount - intflag + i) * PageCount, k];
                                    cell.PutValue(arrayDR[m + (n - 1) * PageNum][dtExcel.Columns[k].ToString()].ToString());
                                }
                               
                            }

}
                        intCount += intPageNum;

}
                    else
                    {
                        sheet.Pictures.Add((i + intCount - intflag) * PageCount, 0, ms);
                        for (int j = 0; j < PageNum; j++)
                        {
                            if (intOrdernoNum == j)
                                break;
                            for (int k = 0; k < dtExcel.Columns.Count; k++)
                            {
                                Cell cell = sheet.Cells[j + HeadRow-1 + (i + intCount - intflag) * PageCount, k];
                                cell.PutValue(arrayDR[j][dtExcel.Columns[k].ToString()].ToString());
                            }
                           
                        }

}

}

else if (strFlag == "2")
                {
                  
                    for (int r = 0; r < intOrdernoNum; r++)
                    {
                        for (int k = 0; k < dtExcel.Columns.Count; k++)
                        {
                            Cell cell = sheet.Cells[r + HeadRow-1 + intGroup + i * HeadRow, k];
                            cell.PutValue(arrayDR[r][dtExcel.Columns[k].ToString()].ToString());
                        }
                    }
                    intGroup += intOrdernoNum;
                }
              
            }
            if (strFlag == "3")
            {
                for (int intPagecount = 1; intPagecount <= int.Parse(Math.Ceiling(dtExcel.Rows.Count / decimal.Parse(PageNum.ToString())).ToString()); intPagecount++)
                {
                    sheet.Pictures.Add((intPagecount - 1) * PageCount, 0, ms);
                    for (int n = 0; n < PageNum; n++)
                    {
            if (n + (intPagecount - 1) * PageNum == dtExcel.Rows.Count)
                            break;
                        for (int t = 0; t < dtExcel.Columns.Count; t++)
                        {
                            Cell cell = sheet.Cells[n + HeadRow + (intPagecount - 1) * PageCount, t];
                            cell.PutValue(dtExcel.Rows[n + (intPagecount-1) * PageNum][dtExcel.Columns[t].ToString()].ToString());
                        }
                    }

}
            }
            string filename = string.Format("{0}{1}.xls", ExcelName, Convert.ToDateTime(DateTime.Now).ToString("yyyyMMdd")); //文件默认命名方式,可以自定义
          
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "utf-8";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename);
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(workbook.SaveToStream().ToArray());
            Response.End(); 
        }

/// <summary>
        /// 按給寬與長自動縮小圖片後轉換為二進制流
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="intWidth"></param>
        /// <param name="intHeight"></param>
        /// <returns></returns>
        public static byte[] SmallImageDatabytes(string FilePath, int intWidth, int intHeight)
        {
            if (!File.Exists(FilePath))
                return null;

Bitmap objPic = new System.Drawing.Bitmap(FilePath);

Bitmap myBitmap = new System.Drawing.Bitmap(objPic, intWidth, intHeight);

using (MemoryStream curImageStream = new MemoryStream())
            {
                myBitmap.Save(curImageStream, System.Drawing.Imaging.ImageFormat.Png);
                curImageStream.Flush();

byte[] bmpBytes = curImageStream.ToArray();
                //如果转字符串的话
                //string BmpStr = Convert.ToBase64String(bmpBytes);
                return bmpBytes;
            }
        }

用法:

protected void Button3_Click(object sender, EventArgs e)
        {
           string imagePath = @"D:\mywebform\MyStudyWeb\MyStudyWeb\MyStudyWeb\image\Okahata.bmp";//自動縮小圖片後轉換為二進制流
             DBHelper.strCon = System.Configuration.ConfigurationManager.ConnectionStrings["DBNAME"].ToString();
         
            DataTable dtExcel = DBHelper.GetDataTable("select * from sa030_temp order by orderno ");
          
            DataTable dt = dtExcel.DefaultView.ToTable(true, "orderno");//分组生成新的DATATABLE
           
           ImportGroupExcel(12, 17,5,dtExcel, dt, imagePath, "test", 120, 60,"3");
        }

aspose.cells导出EXCEL分页分组函数相关推荐

  1. aspose.cells html excel导出,C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  2. 使用Aspose.Cells导出excel

    先提供数据源,使用aspose创建excel的单元格和各种样式,插入图片,冻结单元格,行高等 public string ExportDemo()         {             View ...

  3. Aspose.cells导出Excel合并行单元格(Datatable)

    //前台ajax返回成功的数据 $.ajax({             url: "地址?r=" + Math.random,             type: "p ...

  4. asp.net使用Aspose.Cells实现excel预览

    在WEB项目中经常遇到excel文档在线预览的需求,基本的解决思路有以下几大类:excel文档转PDF.excel文档直接转html.后台读取excel数据返回给前端利用Excel效果的表格插件如(H ...

  5. Aspose.Cells导入excel文件异常No data is available for encoding 936.

    Aspose.Cells导入excel文件异常消息: No data is available for encoding 936.For information on defining a custo ...

  6. 报表中的Excel操作之Aspose.Cells(Excel模板)

    本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导出Excel的处理,如果你使用微软Excel的com组件,那么对于简单的操 ...

  7. 使用Aspose.Cells生成Excel的线型图表

    使用Aspose.Cells 根据模板生成excel里面的 line chart 目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3 ...

  8. Aspose.Cells 给EXCEL区域内加上单元格边框

    //设置excel边框样式         private void SetWorkbookStyle(string path)         {             Workbook book ...

  9. 关于导出excel分页与否相关疑惑

    1.导出excel的时候选择[分页] 此时为什么 [是否导出公式]不可用了? 解答:为避免某些计算错误 比如: 按10行分页  并 计算 sum(a1:a21) 导出了这个公式,却在10行分了页,计算 ...

最新文章

  1. JSP 自定义标签介绍
  2. Case when then esle end
  3. 安卓上比较好的python开发软件-手机随时随地写Python,还可以开发安卓APP,太厉害了!...
  4. DB2 导入导出总结
  5. weblogic.rjvm.PeerGoneException
  6. 自由自在珍珠奶茶让奶茶文化更加多元
  7. 编程方法学9:字符串
  8. java 万年历_非常实用的java万年历制作方法
  9. iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架
  10. 使用async关键字进行TCP server的连接
  11. Idea(二) 解决IDEA卡顿问题及相关基本配置
  12. The connection to adb is down, and a severe error has occured
  13. ssh公钥的生成、查看以及config的配置
  14. typescript面试题_vue 248+个知识点(面试题)为你保驾护航
  15. 常见的几款js跳转代码
  16. qml自定义控件:简易的带图标按钮
  17. lisp 阿基米德螺旋_用Auto CAD怎样画椭圆螺旋
  18. mysql将公历农历转换_SQL 日期转换(阳历转阴历)
  19. la la love on my mind
  20. D - The Lucky Week ZOJ - 3939 (思维)

热门文章

  1. 简单大气女性内衣服装类网站html模板
  2. 九度OJ-1435-迷瘴(HDOJ-2570)
  3. 在家里如何用两个或多个路由器发射wifi
  4. Azkaban(一)—— Azkaban介绍
  5. webassembly学习-安全控制
  6. 人工智能:jupyter安装及基本命令
  7. 联想yoga710装linux教程,YOGA 710-14IKB安装Ubuntu16.04笔记
  8. 扫地机器人黑色耐脏吗_扫地机好用吗?给大家讲讲扫地机买后感受
  9. wrong number of arguments的怪异错误
  10. QML QtLocation地图应用学习-1:在Map中展示图元 Item