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'(表示一个占 ...
随机推荐
- 常用的js正则验证整理
一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0| ...
- vba 读取数据库
1.安装数据库 2.创建数据源 Private Sub Worksheet_Change(ByVal Target As Range) Then Call mySQL End If End Sub P ...
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109D.html 题意 所有边权都是 [1,m] 中的整数的所有 n 个点的树中,点 a 到点 b 的距离 ...
- asp+SqlServer2008开发【第四集:windows server 2008 r2的操作记录】
1,使用powershell server和putty像远程linux一样操作windows服务器,解决使用mstsc命令无法远程桌面的问题. 2,使用IMM管理,使用浏览器查看IBM服务器的工作状况 ...
- String hashcode的兴趣试玩
今天突然看到Hashcode和equals,==比较时,一时兴起,想了解一下hashcode生成规则,为什么hashcode相同,无法说明对象相等,但用equals说明相同,却可以推出对象的hashc ...
- php curl 跨域情趣
function curl_post($url='',$postdata='',$options=array()){ $ch=curl_init($url); curl_setopt($ch,CURL ...
- 【C语言程序】基因编码
输入一个长为n=2k(k≤8)01串s,按照"ABC编码规则"进行编码,ABC编码规则是: A //若s串全是0 T(s)= ...
- Node.js_ express.Router 路由器_模块化管理路由
路由器 express.Router 路由器 模块化管理 路由 基本使用: 路由模块 1. 引入 express const express = require('express'); 其他相关模块 ...
- duilib 新增数据迁移界面
xml界面配置: <?xml version="1.0" encoding="utf-8"?> <Window caption="0 ...
- 不让浏览器缓存index.html
参考文档:https://www.2cto.com/ask/question/4598 location = /index.html { add_header Cache-Control " ...