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数据的更多相关文章

  1. pandans导出Excel并将数据保存到不同的Sheet表中

    数据存在mongodb中,按照类别导出到Excel文件,问题是想把同一类的数据放到一个sheet表中,最后只导出到一个excel文件中# coding=utf-8import pandas as pd ...

  2. pandas 将多个dataframe保存为一个excel文件的多个sheet表中

    # 创建文件 def create(): df1 = pd.DataFrame({"a1": [1, 2, 3], "b1": [4, 5, 6]}) df2 ...

  3. 解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据

    我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据.好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的动 ...

  4. exp导出一个表中符合查询条件的数据

    原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...

  5. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  6. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  7. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  8. C语言:将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。-在m行m列的二维数组中存放如下规律的数据,

    //将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边. #include <stdio.h> #define M 3 #define N 5 ...

  9. 解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题

    https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id ...

随机推荐

  1. Thinkphp学习回顾(一)之基本结构目录

    TP框架的学习一般都是从了解框架的基本结构开始的,每个文件都有其专属的作用,我的TP框架的回顾也从基本结构开始讲起. 一.ThinkPHP的获取 http://www.thinkphp.cn   这是 ...

  2. laravel框架总结(十三) -- redis使用

    一切的前提都是已经安装好了redis服务器,并且能启动(我只总结了mac的安装方法:传送门) 我自己使用的是mac系统,有个教程可以参考下,传送门: 1.安装PHP PRedis 1>PRedi ...

  3. iOS 10 UserNotifications 使用说明

    本教程以贴代码为主.尽可能直观,少量说明. 注意:XCode8的需要手动开启主target Capabilities中的Push Notification. 关于创建多个target后真机测试的证书问 ...

  4. CentOS 7 程序自启动的问题

    Mysql具体的安装方法见http://www.cnblogs.com/yoyotl/p/5752437.html 但是关于自启动部分需要多一些说明. 一.问题现象: 系统重启后,发现mysqld服务 ...

  5. 剑指offer七:两个链表的第一个公共结点

    输入两个链表,找出它们的第一个公共结点. import java.util.*; public class Solution { public ListNode FindFirstCommonNode ...

  6. 百度-official

    1.请描述html5新增的一些标签,描述这些标签的用法和语义 2.css属性position的属性值有哪些,描述它们的作用 3.常见的浏览器端的存储技术有哪些,以及它们的优缺点 4.程序定义如下: v ...

  7. CentOS6.5 简单配置Nginx + tomcat

    1.配置nginx.conf vi /usr/local/nginx/conf/nginx.conf --这是你的安装目录 注:红框地方为任意位置,server在配置文件中已存在 我使用的是两个tom ...

  8. 让PHP开发者事半功倍的十大技巧

    如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择.同样的道理也适用于PHP编程,尽管这样的类比听起来有一些古怪.我们经常听到有人 ...

  9. Linux环境部署(JDK/Tomcat/MySQL/证书)

    #################### 安装JDK1.7.x ####################下载JDK1.7版本的tar包(http://www.oracle.com/technetwor ...

  10. DebugLog 打印方法执行时间

    DebugLog 打印方法执行时间 用于方便调试性能问题的打印插件.给访法加上@DebugLog,就能输出该方法的调用参数,以及执行时间. Project gradle配置 // Top-level ...