c# applibrary实现一个Sheet表中存放多张DataTable数据
1、工具类(applibrary.dll)
public class ExcelHelper {
/// <summary>
/// 文件名
/// </summary>
public string fileName { get; set; }
/// <summary>
/// 工作簿列表
/// </summary>
public List<WorkSheet> workSheets { get; set; }
/// <summary>
/// Excel文档对象
/// </summary>
public XlsDocument doc { get; set; }
public string message { get; set; }
public ExcelHelper() {
doc = new XlsDocument();
workSheets = new List<WorkSheet>();
}
/// <summary>
/// 导出Excel
/// </summary>
/// <returns></returns>
public bool ToExcel() {
if (string.IsNullOrEmpty(fileName)) {
message = "请输入文件名";
return false;
}
if (workSheets.Count == ) {
message = "请指定工作簿数据";
return false;
}
doc.FileName = fileName;
foreach (var workSheet in workSheets) {
AppLibrary.WriteExcel.Worksheet sheet = null;
//判断Worksheet是否存在
try {
sheet = doc.Workbook.Worksheets[workSheet.name];
} catch (Exception ex) {
sheet = doc.Workbook.Worksheets.Add(workSheet.name);
}
AppLibrary.WriteExcel.Cells cells = sheet.Cells;
var dt = workSheet.table;
for (int j = ; j <= dt.Columns.Count - ; j++) {
if (workSheet.xf != null) {
cells.Add(workSheet.startX, workSheet.startY + j, dt.Columns[j].ColumnName, workSheet.xf);
} else {
cells.Add(workSheet.startX, workSheet.startY + j, dt.Columns[j].ColumnName);
}
}
for (int i = ; i <= dt.Rows.Count - ; i++) {
for (int j = ; j <= dt.Columns.Count - ; j++) {
cells.Add(i + + workSheet.startX, j + workSheet.startY, dt.Rows[i][j].ToEString());
}
}
}
doc.Send();
return true;
}
}
public class WorkSheet {
private int _startX = ;
private int _startY = ;
public string name { get; set; }
public DataTable table { get; set; }
public int startX {
get {
return _startX;
}
set {
if (value > ) {
_startX = value;
}
}
}
public int startY {
get {
return _startY;
}
set {
if (value > ) {
_startY = value;
}
}
}
public AppLibrary.WriteExcel.XF xf { get; set; }
}
2、调用代码:
ExcelHelper excel = new ExcelHelper();
excel.fileName = batchNo + ".xls"; //汇总
sql = string.Format(@"SELECT * from SKU WHERE batchNo='{0}'", batchNo);
ret = dbHelper.Query(sql);
AppLibrary.WriteExcel.XF xfcolumn = excel.doc.NewXF();
xfcolumn.Font.Bold = true;
xfcolumn.Pattern = ;
xfcolumn.PatternColor = AppLibrary.WriteExcel.Colors.Cyan;
excel.workSheets.Add(new WorkSheet() { name = "自动汇总", table = ret.Tables[], xf = xfcolumn });
3、设置样式和宽度,表头和单元格样式要分开设置,申明两个XF变量。
#region 设置样式
//设置单元格样式
var xf = doc.NewXF();
xf.UseBorder = true;
xf.LeftLineStyle = ;
xf.RightLineStyle = ;
xf.TopLineStyle = ;
xf.BottomLineStyle = ;
xf.LeftLineColor = AppLibrary.WriteExcel.Colors.Black;
xf.RightLineColor = AppLibrary.WriteExcel.Colors.Black;
xf.TopLineColor = AppLibrary.WriteExcel.Colors.Black;
xf.BottomLineColor = AppLibrary.WriteExcel.Colors.Black;
xf.UseFont = true;
//设置表头样式
var thXf = doc.NewXF();
thXf.Pattern = ;
thXf.PatternColor = AppLibrary.WriteExcel.Colors.Default1B;
thXf.UseBorder = true;
thXf.LeftLineStyle = ;
thXf.RightLineStyle = ;
thXf.TopLineStyle = ;
thXf.BottomLineStyle = ;
thXf.LeftLineColor = AppLibrary.WriteExcel.Colors.Black;
thXf.RightLineColor = AppLibrary.WriteExcel.Colors.Black;
thXf.TopLineColor = AppLibrary.WriteExcel.Colors.Black;
thXf.BottomLineColor = AppLibrary.WriteExcel.Colors.Black;
thXf.Font.Bold = true; #endregion
#region 宽度
AddColumnInfo(doc, sheet, , , );
AddColumnInfo(doc, sheet, , , );
AddColumnInfo(doc, sheet, , , );
#endregion private static void AddColumnInfo(AppLibrary.WriteExcel.XlsDocument doc, AppLibrary.WriteExcel.Worksheet sheet, int start, int end, int width) {
AppLibrary.WriteExcel.ColumnInfo colInfo = new AppLibrary.WriteExcel.ColumnInfo(doc, sheet);
colInfo.ColumnIndexStart = (ushort)start;
colInfo.ColumnIndexEnd = (ushort)end;
colInfo.Width = (ushort)(width * );
sheet.AddColumnInfo(colInfo);
}
说明:
1、一个Sheet表中可以存放多张DataTable数据
2、服务端无需安装Excel
3、Send方法直接导出到浏览器端,无需先存本地再读取本地文件转换成byte输出
c# applibrary实现一个Sheet表中存放多张DataTable数据的更多相关文章
- pandans导出Excel并将数据保存到不同的Sheet表中
数据存在mongodb中,按照类别导出到Excel文件,问题是想把同一类的数据放到一个sheet表中,最后只导出到一个excel文件中# coding=utf-8import pandas as pd ...
- pandas 将多个dataframe保存为一个excel文件的多个sheet表中
# 创建文件 def create(): df1 = pd.DataFrame({"a1": [1, 2, 3], "b1": [4, 5, 6]}) df2 ...
- 解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据
我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动 ...
- exp导出一个表中符合查询条件的数据
原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)
从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...
- C语言:将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。-在m行m列的二维数组中存放如下规律的数据,
//将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边. #include <stdio.h> #define M 3 #define N 5 ...
- 解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题
https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id ...
随机推荐
- (转)漫谈SOA(面向服务架构)
http://blog.csdn.net/luohuacanyue/article/details/12521699 面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西.我简单的认为服务化是模 ...
- 亚马逊EC2弹性IP收费
刚收到亚马逊云账单,被扣了4.44刀,吓尿,麻溜的去查账单详情,发现之前弃用的美国实例有个弹性IP没释放掉,占着茅坑还不拉屎,被扣钱宝宝无话可说,赶紧释放... $0.005 per Elastic ...
- poj 1626
传送门:http://poj.org/problem?id=1636 题意:有两个监狱,每个监狱有n个人,有m种关系,表示A监狱第i个人不能跟B监狱第j个人在一个监狱,问你最多能换几组人(从A,B监狱 ...
- angular的ng-repeat使用
ng-repeat是angular的一个指令,用来循环生成某些东西.常用的是拿到数据循环生成样式展示在视图中. <!--orderStatuses表示$scope传递的数据$scope.orde ...
- intel82599在centos6.5下编译安装
.intel驱动下载地址:https://sourceforge.net/projects/e1000/files/ixgbe%20stable/ .编译安装步骤 yum install kernel ...
- WCF中的流
https://msdn.microsoft.com/zh-cn/library/ms733742.aspx
- Query Designer:Variable 变量
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- mutation annovar
1.annovar 很全面 http://annovar.openbioinformatics.org: 2.http://blog.goldenhelix.com/:
- SQLServer语句执行效率及性能测试
写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...
- Photoshop投影和CSS box-shadow转换
"混合模式":Photoshop提供了各式各样的混合模式,但是CSS3阴影只支持正常模式(normal). "颜色(color)":阴影颜色.对应于CSS3阴影 ...