按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 ...
随机推荐
- Nginx 出现 403 Forbidden 最终解决方法
Nginx 出现 403 Forbidden 最终解决 步骤一: 检查目录权限.权限不足的就加个权限吧. 例子:chmod -R 755 / var/www 步骤二: 打开nginx.conf 例子: ...
- centos7 安装 mysql(在线安装)
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...
- Docker 版本的更新和安装
涉及到网址:1.https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#prerequisites (官网) ...
- 安装mysql数据库及问题解决方法
1.mysql官网下载安装包,官网地址:www.mysql.com [root@seiang software]# ll total 580020 -rw-r--r--. 1 root root 59 ...
- PHPCMS全局自定义函数 获取用户信息的办法
在这个文件中增加即可\phpcms\libs\functions\global.func.php /** * 获取当前登陆者的信息 * @param $f 取什么字段F就传什么值 */ functio ...
- 数据集成、变换、归约及相关MATLAB工具箱函数
数据预处理的主要内容包括数据清洗.数据集成.数据变换和数据规约,在数据挖掘的过程中,数据预处理工作量占到了整个过程的60%.数据清洗在上一篇博客中写过,这里主要写后面三部分. 数据集成 数据挖掘需要的 ...
- Visual Studio Code 调试 SpringBoot
Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-based appl ...
- Apache Jmeter教程(一) - 入门
一.下载Jmeter 登录官网Jmeter下载,得到压缩包jmeter-5.0.tgz,下载地址:http://jmeter.apache.org/download_jmeter.cgi. 二.安装 ...
- C语言笔试
1.一个C程序的执行时从本程序的main开始,到main结束. 2.C语言规定else总是与在其之前的未配对的最近if配对. 3.int型数据在内存中的存储形式是补码. 4.数组一旦定义其大小是固定的 ...
- 计算1+2+...+n
牛客上面一道题,闲来无事做做陶冶情操. 这一陶冶还真的陶冶出了骚操作 看一下题目吧: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及 ...