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 ...
随机推荐
- 20161013001 DataGridView 数据转 DataTable
DataTable dt2 = GetDgvToTable(Form_CY_ProjectRequirements_D); MessageBox.Show( dt2.Rows.Count.To ...
- 【ASM C/C++】 Makefile 规则说明
make 命令会自动读取当前目录下的 Makefile 文件[31],完成相应的编译步骤.Makefile 由一组规则(Rule)组成,每条规则的格式是:target ... : prerequisi ...
- 在Excel中制作金字塔条形图
使用场景:一项市场调查研究中,男性和女性.赞同和反对.满意和不满意的两方面的消费者,他们在某些项目上的指标分布特性一项产品组合决策中,乐观场景和悲观场景下各产品的获利情况一个产品试销活动中,不同门店渠 ...
- tomact的work目录
1. 用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的j ...
- python os模块(2)
os模块主要用于:目录.文件(删除.判断.分割文件名和后缀) 目录 (1)获取当前目录(2)修改目录(3)生成目录(4)删除目录(5)查看目录下的内容(6)重命名目录(7)修改时间属性(8)链接目录( ...
- dm9000网口收发控制以及mac地址过滤设置
目的 :完成网口收发调试 过程 : 1.网口初始化,根据芯片数据手册配置 2.网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送: 3.网口接收 . ...
- 如何为数据源向导填加一种自定义的数据源类型(win示例)
https://www.devexpress.com/Support/Center/Example/Details/T310160
- linkedin开源的kafka-monitor安装文档
linkedin开源的kafka-monitor安装文档 linkedin 开源的kafka-monitor的安装使用可以参考官方的readme:流程介绍的已经比较清楚,但是还是有一些地方需要修正.让 ...
- c#_1:后台post请求
1:aspx内容 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Push.as ...
- PHP Mysqli 数据库连接
---恢复内容开始--- $connection=new mysqli($db_host,$db_user,$db_password,$db_name);if(!mysqli_connect_errn ...