按Excel的模板导出数据
思路:把Excel模板上传到服务器;然后读取文档,写入数据,另存为新的文件

然后就是导出的时候处理数据定义的字符串,按数据导出;注意读取的数据流要处理下,不然会报异常
public Stream GetExcelStream(op_client_template_mapping model)//model 配置文件模型
{
string fileUrl = _BillFileService.GetHttp() + "/" + model.filePath + "/" + model.fileNames;
return WebRequest.Create(fileUrl).GetResponse().GetResponseStream();
}
//文件里转换成能处理的流
public MemoryStream StreamToMemoryStream(Stream instream)
{
MemoryStream outstream = new MemoryStream();
const int bufferLen = ;
byte[] buffer = new byte[bufferLen];
int count = ;
while ((count = instream.Read(buffer, , bufferLen)) > )
{
outstream.Write(buffer, , count);
}
return outstream;
}
导出数据大概
public void AsposeToExcel<T>(List<T> data, ExcelModel excelModel, op_client_template_mapping mapping, string path)
{
try
{
Stream sm = GetExcelStream(mapping);
var ms = StreamToMemoryStream(sm);
ms.Seek(, SeekOrigin.Begin); int buffsize = (int)ms.Length; //rs.Length 此流不支持查找,先转为MemoryStream
byte[] bytes = new byte[buffsize]; ms.Read(bytes, , buffsize);
Workbook workbook = new Workbook(ms);
ms.Flush(); ms.Close();
sm.Flush(); sm.Close();
Worksheet worksheet = workbook.Worksheets[]; //工作表 if (excelModel.Title != null && !string.IsNullOrEmpty(excelModel.Title?.cloumnName))
{
SetTitle(worksheet, excelModel.Title.cloumnName, excelModel.Title.Letter + excelModel.Title.Index);
}
SetCellData(worksheet, data, excelModel); workbook.Save(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
} private static void SetTitle(Worksheet sheet, string title, string index)
{
sheet.Cells[index].PutValue(title);
} /// <summary>
/// 填充字段
/// </summary>
private static void SetCellData<T>(Worksheet sheet, List<T> data, ExcelModel excelModel)
{
var noData = excelModel.ExcelCloumns.Where(it => it.colunmEnglish.Equals(""));//没有绑定的数据取默认值
int i = ;
foreach (T item in data)
{
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(T)))
{
var column = excelModel.ExcelCloumns.Where(it => it.colunmEnglish.Equals(pd.Name)).FirstOrDefault();
if (column != null)//存在该字段就赋值
{
int row = column.Index + i;
if (pd.PropertyType.ToString() == "System.DateTime")
{
sheet.Cells[column.Letter + row].PutValue(pd.GetValue(item).ToString());//(column.Letter + row)等于 A2,C2这样赋值
}
else
{
sheet.Cells[column.Letter + row].PutValue(pd.GetValue(item));
}
}
}
foreach (var it in noData)//赋值默认值
{
int row = it.Index + i;
if (it.cloumnName == "序号")
{
sheet.Cells[it.Letter + row].PutValue(i+);
}
else
{
sheet.Cells[it.Letter + row].PutValue(it.DefaultValue ?? "");
}
}
i++;
}
sheet.AutoFitColumns();
}
#endregion
按Excel的模板导出数据的更多相关文章
- kettle 使用excel模板导出数据
通过excel进行高速开发报表: 建设思路: 1.首先制订相关的execl模板. 2.通过etl工具(kettle)能够高速的 将数据库中的数据按excel模板导出成新的excel就可以. 当中ket ...
- C# Winform Excel的导出,根据excel模板导出数据
namespace dxhbskymDemo { public partial class ExcelForm : DevExpress.XtraEditors.XtraForm { public E ...
- Aspose.cell中的Excel模板导出数据
//Excel模板导数据(Eexcel中根据DataTable中的个数,给多个Sheet中的模板赋值) public void DataSetToManyExcel(string fileName, ...
- JXLS导出Excel(模板导出)
1.导包 在pom.xml中加入依赖如下: <dependency> <groupId>org.jxls</groupId> <artifactId>j ...
- POI实现导出Excel和模板导出Excel
一.导出过程 1.用户请求导出 2.先访问数据库,查询需要导出的结果集 3.创建导出的Excel工作簿 4.遍历结果集,写入工作簿 5.将Excel已文件下载的形式回复给请求客户端 二.具体实现(截取 ...
- java代码导出数据到Excel、js导出数据到Excel(三)
jsp内容忽略,仅写个出发按钮: <button style="width: 100px" onclick="expertExcel()&quo ...
- POI操作Excel(批量导出数据/下载excel)
目录 1.第一个demo:创建工作簿,创建sheet页,创建单元格 2.创建一个时间格式的单元格 3.遍历工作簿的行和列并获取单元格内容 4.文本提取 5.单元格对齐方式 ...
- C# 使用Word模板导出数据
使用NPOI控件导出数据到Word模板中方式: 效果如下: Word模板: 运行结果: 实现如下: Student.cs using System; using System.Collections. ...
- Net 自定义Excel模板导出数据
转载自:http://www.cnblogs.com/jbps/p/3549671.html?utm_source=tuicool&utm_medium=referral 1 using Sy ...
随机推荐
- 全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案
第二章 Python语言基本语法元素 一.选择题C B B C A D B A D B二.编程题1.获得用户输入的一个整数N,计算并输出N的32次方.在这里插入图片描述2.获得用户输入的一段文字,将这 ...
- mysql数据库每个表的备份脚本
对mysql数据库中的每张表进行按日期备份,思想是:先把每张表的表名取出取出,然后通过for循环去对每个表进行按日期备份 [root@ZFVM-APP-- backup]# vim dataname. ...
- WebService技术规则
1.基于web的系统级接口规范 - 一个普通适用标准 :http+xml - 任何网络通信的操作系统 - 自包含.自描述.模块化 - 发布.定位.通过web调用 2. ...
- prometheus监控插件mysqld_exporter
1,首先需要增加授权 mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDEN ...
- 五指MUD协议
//MUD转义协议 #ifndef __WZMUD__ #define __WZMUD__ #define WZKEY "ZWUxMTIyMDAwMw==" #define ESA ...
- IIS中应用Application Request Route 配置负载均衡
转自:https://blog.csdn.net/wucong60/article/details/84930234 简介ApplicationRequest Route(后面简称为ARR)是一个寄宿 ...
- How to Create and Use Facebook Messenger Codes (June 2019)
How to Create and Use Facebook Messenger Codes (June 2019) By Gerardo Salandra What is a Messenger ...
- 01.03 vim编辑器使用
==========linux基础命令的使用==========================绝对路径:由根目录(/)开始写起的文件名或目录名称相对路径:相对于目前路径的文件名写法(开头不是/就属于 ...
- C# volatile 摘录
C# 参考 volatile 关键字指示一个字段可以由多个同时执行的线程修改. 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制. 这样可以确保该字段在任何时间呈现的都是最新 ...
- Debezium系列随笔
0.Debezium简介 1.Run Debezium for Mysql in docker step by step 2.Run Debezium for SQLServer in docker ...