Epplus DataTable一次性导出
public void Export()
{ string fileName = "";
if (string.IsNullOrEmpty(fileName) == true)
{
fileName = DateTime.Now.ToString("yyyyMMdd");
}
string tmpPath = context.Server.MapPath("~/upfiles/") + "Template_" + DateTime.Now.Ticks + ".xlsx";
FileInfo file = new FileInfo(tmpPath);
//导出Excel
FileStream fs = new FileStream(tmpPath, FileMode.CreateNew, FileAccess.ReadWrite);
try
{
ExcelPackage package = new ExcelPackage(fs);
DataSet ds = new DataSet();
//接收最后结果
string drResult = string.Empty;
DataTable dt = pmt.GetMyTaskList().Tables[];
#region 这一块是因为公司有个需求 要在单元格内进行换行,有多少个\n就需要换多少行,如果没有这个需求的 就不用要这一段了。
foreach (DataRow dr in dt.Rows) {
string [] st4=dr["approvalInfo"].ToString().Split(new string[] { "\\n" }, StringSplitOptions.None);
for(int i = ; i < st4.Length; i++)
{
drResult += st4[i] + " " + System.Environment.NewLine; //换行的关键字,这一句掉了 就没什么卵用了,为了这个换行,我差点没被逼死,这次就留着,我不想下次又找不到了。
}
dr["approvalInfo"] = drResult;
drResult = ""; }
#endregion
#region
ExcelWorksheet sheet2 = package.Workbook.Worksheets.Add("sheet1");
sheet2.DefaultColWidth = ;
sheet2.Cells.Style.Font.Name = "宋体";
sheet2.Cells.Style.Numberformat.Format = "@";
sheet2.Cells.Style.WrapText = true;
sheet2.Cells["A1"].LoadFromDataTable(dt, true); ///设置边框
sheet2.Cells[, , , dt.Columns.Count].Style.Fill.PatternType = ExcelFillStyle.Solid;
sheet2.Cells[, , , dt.Columns.Count].Style.Fill.BackgroundColor.SetColor(Color.LightGray); sheet2.Cells[, , , dt.Columns.Count].Style.Fill.PatternType = ExcelFillStyle.Solid;
sheet2.Cells[, , , dt.Columns.Count].Style.Fill.BackgroundColor.SetColor(Color.LightGray);
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.Border.Left.Style = ExcelBorderStyle.Thin;
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.Border.Right.Style = ExcelBorderStyle.Thin;
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.Border.Top.Style = ExcelBorderStyle.Thin;
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
sheet2.Cells[, , dt.Rows.Count + , dt.Columns.Count].Style.ShrinkToFit = true;//自适应宽度
#endregion package.Save();
}
catch (Exception ex)
{
Logger.Log.Error("导出Excel错误:" + ex.ToString());
}
finally
{
fs.Close();
} byte[] data = null; FileStream steam = File.Open(tmpPath, FileMode.Open, FileAccess.Read);
data = new byte[steam.Length];
int result = steam.Read(data, , data.Length);
if (data.Length <= )
data = new Byte[] { , };
steam.Close();
File.Delete(tmpPath); if (context.Request.UserAgent.ToLower().IndexOf("firefox") > -)
{
HttpContext.Current.Response.AddHeader("Content-Disposition",
"attachment; filename*=\"" +
HttpUtility.UrlEncode(fileName + ".xlsx") + "\"");
}
else
{
HttpContext.Current.Response.AddHeader("Content-Disposition",
"inline; filename=" +
HttpUtility.UrlEncode(fileName + ".xlsx", System.Text.Encoding.UTF8));
}
HttpContext.Current.Response.AddHeader("Content-Length", data.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.BinaryWrite(data);
HttpContext.Current.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
单行读取的我就不写了网上多得很。 在写就有多多此一举了, 新人要不断摸索啊,我可是踩了半个月的坑,一个人日日夜夜的研究,才搞出来Epplus的图表和现在的单元格内换行啊,痛苦的不行,所以不能让你们太幸福了 哈哈~~~~~~~~~~~~~~~~~~~~~~~~~~
Epplus DataTable一次性导出的更多相关文章
- 从DataTable高效率导出数据到Excel
首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...
- Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域
上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...
- 【C#常用方法】3.将DataTable一次性插入数据库表中(使用SqlBulkCopy)
将DataTable一次性插入数据库表中(使用SqlBulkCopy) 1.SqlBulkCopy简介 SqlBulkCopy类是ADO.NET中专门用于数据库批量插入数据的类,其批量插入的执行速度是 ...
- C#将DataTable数据导出CSV文件
C#将DataTable数据导出CSV文件通用方法! //导出按钮调用导出方法 protected void btnCSV_Click(object sender, EventArgs e) ...
- 利用 NUget包 EPPlus 实现数据导出到Excel(适用于DTcms)
首先安装EPPlus 包
- DataTable数据导出CSV文件
public static void SaveAsExcel(DataTable dt1) { //System.Windows.Forms.SaveFileDialog sfd = new Syst ...
- 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel
步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...
- 利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvoAAABpCAIAAADEEBBGAAAJdElEQVR4nO3cy2ob5wLA8TxKnqTrrr
- 将DataTable内容导出到Excel表格的两种方法
方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...
随机推荐
- SOUI taobao SVN目录结构说明
- Linux基础性笔记
声明:这是我整理的韩顺平老师的课程,仅供自己参考!!! 给自己的一碗汤:学东西要专一(比较难) 第一节 Linux特点总结: 1. 免费的.开源的. 2. 支持多线程(并发).多用户. 3. 安全性比 ...
- linux(CentOS)磁盘挂载数据盘
linux(CentOS)磁盘挂载数据盘:第一步:查看是否存在需要挂载的磁盘: sudo fdisk -l 第二步:为需要挂载的磁盘创建分区: sudo fdisk /dev/vdb 执行中:依次选择 ...
- [tensorflow]图像处理相关模块的安装(python3中PIL)
直接上过程图(平台为Anaconda): 默认已经配置完了tensorflow的3.5的环境 我这里已经安装完成 接下来,就可以在python文件中引入模块了 from PIL import Imag ...
- [C#] 動的にアセンブリをロードする
アプリケーション ドメインにおいて起動時に読み込まれない別のアセンブリ (.dll や .exe) を読み込む場合.System.Reflection.Assemby クラスの Load メソッドを使 ...
- Tarjan求割点(割顶) 割边(桥)
割点的定义: 感性理解,所谓割点就是在无向连通图中去掉这个点和所有和这个点有关的边之后,原先连通的块就会相互分离变成至少两个分离的连通块的点. 举个例子: 图中的4号点就是割点,因为去掉4号点和有关边 ...
- js获取手机信息
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- __x__(8)0906第三天__乱码问题
需要知道: 计算机只认 0 1 任何内容,计算机都会以 0 1 去存储 所以 0 1 与内容的编码方式/解码方式需要依照一定的规则,实现 0 1 与内容之间的转换. 字符集:一定的规则,由编码/解码采 ...
- 关于*.ashx 处理程序调试时 未能创建类型 错误
出现改问题的根本原因是因为,我更改过改类型的名字,而IDE并没有更改 ***.ashx. 注册类型名字. 所更改的类的名字应该是 "项目名字.文件名字“ 例如下图 应该更改类为 ”Wx_ ...
- [LeetCode] Max Increase to Keep City Skyline 保持城市天际线的最大增高
In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located the ...