.net mvc中epplus导出excel
帮助类
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web; namespace EpPlus.Demo.Models
{
public class EpPlusHelper
{
ExcelPackage package;
ExcelWorksheet worksheet; /// <summary>
/// 构造函数
/// </summary>
/// <param name="sheetName"></param>
/// <param name="path"></param>
public EpPlusHelper(string sheetName = "", string path = "")
{
try
{
if (!string.IsNullOrEmpty(path))
{
package = new ExcelPackage(new FileInfo(path));
}
else
{
package = new ExcelPackage();
} if (package.Workbook.Worksheets.Count > 0)
{
worksheet = package.Workbook.Worksheets[0];
}
else
{
CreateSheet(DateTime.Now.ToString("yyyyMMdd"));
} if (!string.IsNullOrWhiteSpace(sheetName))
{
worksheet.Name = sheetName;
}
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 创建工作薄
/// </summary>
/// <param name="sheetName"></param>
public void CreateSheet(string sheetName)
{
try
{
worksheet = package.Workbook.Worksheets.Add(sheetName);//创建worksheet
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 切换工作薄
/// </summary>
/// <param name="index"></param>
public void ChangeSheet(int index)
{
try
{
worksheet = package.Workbook.Worksheets[index];
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 切换工作簿
/// </summary>
/// <param name="sheetName"></param>
public void ChangeSheet(string sheetName)
{
try
{
worksheet = package.Workbook.Worksheets[sheetName];
}
catch (Exception ex)
{
throw ex; }
} /// <summary>
/// 保存excel
/// </summary>
/// <param name="password"></param>
public void SaveExcel(HttpResponseBase response, string excelName)
{
try
{
if (package != null)
{
if (!string.IsNullOrEmpty(excelName))
{
//package.Save();
//package.SaveAs();
response.BinaryWrite(package.GetAsByteArray());
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("content-disposition", "attachment; filename=" + excelName + ".xlsx");
}
else
{
response.BinaryWrite(package.GetAsByteArray());
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("content-disposition", "attachment; filename=" + (DateTime.Now.ToString("yyyyMMddHHmmss")) + ".xlsx");
}
}
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 通过索引赋值,索引从1开始
/// </summary>
/// <param name="x">行</param>
/// <param name="y">列</param>
/// <param name="value"></param>
public void SetValue(int x, int y, string value)
{
worksheet.Cells[x, y].Value = value;//直接指定行列数进行赋值
} /// <summary>
/// 单元格赋值
/// </summary>
/// <param name="cell">单元格,如:A1</param>
/// <param name="value"></param>
public void SetValue(string cell, string value)
{
worksheet.Cells[cell].Value = value;//直接指定单元格进行赋值
} /// <summary>
/// 设置样式
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="isWrapText">是否换行</param>
/// <param name="horizontal">水平格式</param>
/// <param name="vertical">垂直格式</param>
/// <param name="isBold">是否粗体</param>
/// <param name="size">文字大小</param>
/// <param name="height">行高</param>
/// <param name="isShowGridLines">是否显示网格线</param>
public void SetStyle(int x, int y, bool isWrapText = true, ExcelHorizontalAlignment horizontal = ExcelHorizontalAlignment.Center, ExcelVerticalAlignment vertical = ExcelVerticalAlignment.Center, bool isBold = false, int size = 12, int height = 15, bool isShowGridLines = false)
{
//worksheet.Cells[x, y].Style.Numberformat.Format = "#,##0.00";//这是保留两位小数 worksheet.Cells[x, y].Style.HorizontalAlignment = horizontal;//水平居中
worksheet.Cells[x, y].Style.VerticalAlignment = vertical;//垂直居中
//worksheet.Cells[1, 4, 1, 5].Merge = true;//合并单元格
worksheet.Cells.Style.WrapText = isWrapText;//自动换行 worksheet.Cells[x, y].Style.Font.Bold = isBold;//字体为粗体
//worksheet.Cells[1, 1].Style.Font.Color.SetColor(Color.White);//字体颜色
//worksheet.Cells[1, 1].Style.Font.Name = "微软雅黑";//字体
worksheet.Cells[x, y].Style.Font.Size = size;//字体大小 //worksheet.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
//worksheet.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(128, 128, 128));//设置单元格背景色 worksheet.Cells[x, y].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));//设置单元格所有边框
worksheet.Cells[x, y].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;//单独设置单元格底部边框样式和颜色(上下左右均可分开设置)
worksheet.Cells[x, y].Style.Border.Bottom.Color.SetColor(Color.FromArgb(191, 191, 191)); //worksheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小
worksheet.Row(x).Height = height;//设置行高
//worksheet.Row(1).CustomHeight = true;//自动调整行高
//worksheet.Column(1).Width = 15;//设置列宽 worksheet.View.ShowGridLines = isShowGridLines;//去掉sheet的网格线
//worksheet.Cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
//worksheet.Cells.Style.Fill.BackgroundColor.SetColor(Color.LightGray);//设置背景色
//worksheet.BackgroundImage.Image = Image.FromFile(@"firstbg.jpg");//设置背景图片
} public void SetMergeCell(int x1, int y1, int x2, int y2)
{
worksheet.Cells[x1, y1, x2, y2].Merge = true;//合并单元格
} public void TableToExcel(DataTable dt, string title)
{
DataColumnCollection columns = dt.Columns; int addIndex = 1; //表格标题
if (!string.IsNullOrEmpty(title))
{
addIndex = 2;
SetMergeCell(1, 1, 1, columns.Count);
SetStyle(1, 1, false, ExcelHorizontalAlignment.Center, ExcelVerticalAlignment.Center, true, 16, 25);
//worksheet.Cells.Merge(1, 1, 1, columns.Count);
SetValue(1, 1, title);
} //表头
if (columns.Count > 0)
{
int columnIndex = 1; foreach (DataColumn dc in columns)
{
SetStyle(addIndex, columnIndex);
SetValue(addIndex, columnIndex, dc.ColumnName);
columnIndex += 1;
}
} //数据
if (dt.Rows.Count > 0)
{
int rowIndex = 1 + addIndex; foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < columns.Count; i++)
{
SetStyle(rowIndex, i + 1);
SetValue(rowIndex, i + 1, dr[i].ToString());
} rowIndex += 1;
}
}
}
}
}
demo
public void ExcelDemo02()
{
EpPlusHelper ep = new EpPlusHelper(Server.MapPath("/ExcelModel/model.xlsx")); ep.SetValue(3, 2, "龙富工业区");
ep.SetValue(3, 4, "2018.6.1 0:00-2018.6.30 24:00"); DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("平台", typeof(string));
dt.Columns.Add("DeviceType", typeof(string));
dt.Columns.Add("DeviceStatus", typeof(string));
dt.Columns.Add("Count", typeof(string));
dt.Columns.Add("Remark", typeof(string)); for (int i = 1; i < 10; i++)
{
DataRow dr = dt.NewRow(); dr["ID"] = i.ToString();
dr["Address"] = "地址" + i.ToString();
dr["平台"] = "平台" + i.ToString();
dr["DeviceType"] = "类型" + i.ToString();
dr["DeviceStatus"] = "状况" + i.ToString();
dr["Count"] = i.ToString();
dr["Remark"] = "备注" + i.ToString(); dt.Rows.Add(dr);
} int index = 6; foreach (DataRow dr in dt.Rows)
{
ep.SetValue(index, 1, Convert.ToString(dr["ID"]));
ep.SetStyle(index, 1); ep.SetValue(index, 2, Convert.ToString(dr["Address"]));
ep.SetStyle(index, 2); ep.SetValue(index, 3, Convert.ToString(dr["平台"]));
ep.SetStyle(index, 3); ep.SetValue(index, 4, Convert.ToString(dr["DeviceType"]));
ep.SetStyle(index, 4); ep.SetValue(index, 5, Convert.ToString(dr["DeviceStatus"]));
ep.SetStyle(index, 5); ep.SetValue(index, 6, Convert.ToString(dr["Count"]));
ep.SetStyle(index, 6); ep.SetValue(index, 7, Convert.ToString(dr["Remark"]));
ep.SetStyle(index, 7); index++;
} ep.SaveExcel(Response,"自定义名称");
}
.net mvc中epplus导出excel的更多相关文章
- C# NPOI导出Excel和EPPlus导出Excel比较
系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...
- C# NPOI导出Excel和EPPlus导出Excel
转自:http://www.cnblogs.com/tanpeng/p/6155749.html 系统中经常会使用导出Excel的功能.之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到 ...
- C# 使用Epplus导出Excel [1]:导出固定列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- 从SQL Server中导入/导出Excel的基本方法(转)
从sql server中导入/导出 excel 的基本方法 /*=========== 导入/导出 excel 的基本方法 ===========*/ 从excel文档中,导入数据到sql数据库中,很 ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- C# 使用Epplus导出Excel [5]:样式
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- C# 使用Epplus导出Excel [4]:合并指定行
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- C# 使用Epplus导出Excel [3]:合并列连续相同数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- C# 使用Epplus导出Excel [2]:导出动态列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
随机推荐
- java架构之路-(netty专题)netty的编解码(出入战)与粘包拆包
上次回归: 上次博客我们主要说了netty的基本使用,都是一些固定的模式去写的,我们只需要关注我们的拦截器怎么去写就可以了,然后我们用我们的基础示例,改造了一个简单的聊天室程序,可以看到内部加了一个S ...
- 开发中常见的common.js--1
common.js 1.基于代码重用的目的,方便在页面中调用: 2.跟普通的js包含文件并没有其他不一样,主要是一些js经常用到的函数,或者字符串.数组方法的简单扩展: 3.封装的兼容性的方法.[po ...
- C2440 “初始化”: 无法从“std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>”转换为“std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>”
错误原因vs已经提醒的很清楚了:无法将const_iterator转换为iterator 我的出错代码是这样的 思考了很久,最后发现原来是因为将函数定义为const的缘故. 总结:当将函数定义为con ...
- vue hash模式下微信分享后打开首页,三种完美解决方案
微信分享功能给我们带来了很大的便利,使得基于微信开发出来的 H5 页面可以很好的通过微信平台进行传播.所以呢,基本上每个基于微信开发的 H5 都会集成微信分享功能.但是,前几天在对接微信分享 API ...
- zabbix 自定义监控项报警给单独的人
需求就是某个交换机的流量达到某个值后需要报警,但报警的内容不是发给所有的人,而是只发给特定的一个人,而其他的报警信息不能让他收到,他只能收到这一个报警项的报警 1:创建好用户定义好手机号 2:新增加一 ...
- Cobalt Strike生成后门
Cobalt Strike生成后门 1.Payload概念 Payload在渗透测试之中大家可以简单地理解为一段漏洞利用/植入后门的代码或程序. 2.Cobalt Strike生成后门 攻击--> ...
- docker实战部署Javaweb项目
一.部署环境说明 docker服务版本:version 18.09.0nginx服务版本:version: nginx/1.15.10redis服务版本:version: redis/5.0.3tom ...
- vue自带的实例属性和方法($打头)
Vue 实例内置了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来.例如: var data = { a: 1 } var vm = new Vue({ el: '#examp ...
- 论文翻译:2015_DNN-Based Speech Bandwidth Expansion and Its Application to Adding High-Frequency Missing Features for Automatic Speech Recognition of Narrowband Speech
论文地址:基于DNN的语音带宽扩展及其在窄带语音自动识别中加入高频缺失特征的应用 论文代码:github 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never ...
- AF(操作者框架)系列(2)-在Actor框架中派生Actor核心(命令模式)
为了能够提高程序的复用性,我们准备用Actor Framework框架,来演示其满足了这个需求(本章及后面的内容,需要有OOP的基础知识). 首先,简述一下ActorFramework的运行过程: 在 ...