aspose.cells导出EXCEL分页分组函数
引用命名空间
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分页分组函数相关推荐
- aspose.cells html excel导出,C#使用Aspose.Cells导出Excel简单实现
首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...
- 使用Aspose.Cells导出excel
先提供数据源,使用aspose创建excel的单元格和各种样式,插入图片,冻结单元格,行高等 public string ExportDemo() { View ...
- Aspose.cells导出Excel合并行单元格(Datatable)
//前台ajax返回成功的数据 $.ajax({ url: "地址?r=" + Math.random, type: "p ...
- asp.net使用Aspose.Cells实现excel预览
在WEB项目中经常遇到excel文档在线预览的需求,基本的解决思路有以下几大类:excel文档转PDF.excel文档直接转html.后台读取excel数据返回给前端利用Excel效果的表格插件如(H ...
- 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 ...
- 报表中的Excel操作之Aspose.Cells(Excel模板)
本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导出Excel的处理,如果你使用微软Excel的com组件,那么对于简单的操 ...
- 使用Aspose.Cells生成Excel的线型图表
使用Aspose.Cells 根据模板生成excel里面的 line chart 目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3 ...
- Aspose.Cells 给EXCEL区域内加上单元格边框
//设置excel边框样式 private void SetWorkbookStyle(string path) { Workbook book ...
- 关于导出excel分页与否相关疑惑
1.导出excel的时候选择[分页] 此时为什么 [是否导出公式]不可用了? 解答:为避免某些计算错误 比如: 按10行分页 并 计算 sum(a1:a21) 导出了这个公式,却在10行分了页,计算 ...
最新文章
- JSP 自定义标签介绍
- Case when then esle end
- 安卓上比较好的python开发软件-手机随时随地写Python,还可以开发安卓APP,太厉害了!...
- DB2 导入导出总结
- weblogic.rjvm.PeerGoneException
- 自由自在珍珠奶茶让奶茶文化更加多元
- 编程方法学9:字符串
- java 万年历_非常实用的java万年历制作方法
- iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架
- 使用async关键字进行TCP server的连接
- Idea(二) 解决IDEA卡顿问题及相关基本配置
- The connection to adb is down, and a severe error has occured
- ssh公钥的生成、查看以及config的配置
- typescript面试题_vue 248+个知识点(面试题)为你保驾护航
- 常见的几款js跳转代码
- qml自定义控件:简易的带图标按钮
- lisp 阿基米德螺旋_用Auto CAD怎样画椭圆螺旋
- mysql将公历农历转换_SQL 日期转换(阳历转阴历)
- la la love on my mind
- D - The Lucky Week ZOJ - 3939 (思维)
热门文章
- 简单大气女性内衣服装类网站html模板
- 九度OJ-1435-迷瘴(HDOJ-2570)
- 在家里如何用两个或多个路由器发射wifi
- Azkaban(一)—— Azkaban介绍
- webassembly学习-安全控制
- 人工智能:jupyter安装及基本命令
- 联想yoga710装linux教程,YOGA 710-14IKB安装Ubuntu16.04笔记
- 扫地机器人黑色耐脏吗_扫地机好用吗?给大家讲讲扫地机买后感受
- wrong number of arguments的怪异错误
- QML QtLocation地图应用学习-1:在Map中展示图元 Item