c# 导出excel的两种常见方法
1,不是用第三方插件(html直接输出)
StringBuilder ssb = new StringBuilder();
StringBuilder sb = new StringBuilder();
sb.AppendFormat(@"<html>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<body>
<table border='1'>
<tr>
<td align='center' colspan='1'>运单信息</td>
<td align='center' colspan='4'>收件人信息</td>
<td align='center' colspan='3'>托寄物信息</td>
<td align='center' colspan='2'>保价信息</td>
<td align='center' colspan='1'>订单金额</td>
<td align='center' colspan='1'>服务类型</td>
<td align='center' colspan='1'>运单备注</td>
<td align='center' colspan='1'>配送业务类型</td>
<td align='center' colspan='1'>运单信息</td>
</tr>
<tr>
<td>关联订单</td>
<td>姓名</td>
<td>手机</td>
<td>座机</td>
<td>地址</td>
<td>物品内容</td>
<td>包裹数量</td>
<td>重量(kg)</td>
<td>保价</td>
<td>保价金额(元)</td>
<td>订单金额(元)</td>
<td>代收货款</td>
<td>备注信息</td>
<td>配送业务类型</td>
<td>京东订单号</td>
</tr>{0}
</table>
</body>
</html>", ssb); string excelHtml = sb.ToString();// context.Request["excelHtml"];
string name = DateTime.Now.ToString();
context.Response.Buffer = true;
//输出的应用类型
context.Response.ContentType = "application/vnd.ms-excel";
//设定编码方式,若输出的excel有乱码,可优先从编码方面解决
context.Response.Charset = "utf-8";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
//filenames是自定义的文件名
context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + name + ".xls");
//content是步骤1的html,注意是string类型
context.Response.Write(excelHtml);
context.Response.End();
2,使用NPOI(管理NuGet程序包→搜索NPOI安装),也可以去NPOI官网下载引用
/// <summary>
/// 导出excel(使用NPOI的方式)
/// </summary>
/// <param name="DT"></param>
public string ExportExcel(string ids)
{
try
{
DataTable DT = mallData.GetOrderListByIds(ids);
string path = AppDomain.CurrentDomain.BaseDirectory;
HSSFWorkbook hssfworkbookDown;
string modelExlPath = path + "attachments/excel/import.xls";
if (File.Exists(modelExlPath) == false)//模板不存在
{
return null;
}
using (FileStream file = new FileStream(modelExlPath, FileMode.Open, FileAccess.Read))
{
hssfworkbookDown = new HSSFWorkbook(file);
file.Close();
}
if (DT.Rows.Count > )
{
WriterExcel(hssfworkbookDown, , DT); string filename = DateTime.Now.ToString("yyyyMMddHHmmss")+LibSysUtils.NewRefId().ToString().Substring(,)+".xls";
string strFilePath = path + "attachments/excel";
if (Directory.Exists(strFilePath) == false)
{
Directory.CreateDirectory(strFilePath);
}
strFilePath = strFilePath + "/" + filename;
FileStream files = new FileStream(strFilePath, FileMode.Create);
hssfworkbookDown.Write(files);
files.Close();
if (File.Exists(strFilePath) == false)//附件生成失败
{
return null;
} return strFilePath;
}
}
catch (Exception ex)
{ }
return null;
}
/// <summary>
/// 写入Excel
/// </summary>
/// <param name="hssfworkbookDown"></param>
/// <param name="sheetIndex"></param>
/// <param name="DT"></param>
public void WriterExcel(HSSFWorkbook hssfworkbookDown, int sheetIndex, DataTable DT)
{
try
{
#region 设置单元格样式
//字体
HSSFFont fontS9 = (HSSFFont)hssfworkbookDown.CreateFont();
fontS9.FontName = "Arial";
fontS9.FontHeightInPoints = ;
fontS9.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.NORMAL;
//表格
ICellStyle TableS9 = (ICellStyle)hssfworkbookDown.CreateCellStyle();
TableS9.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
TableS9.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
TableS9.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
TableS9.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
TableS9.WrapText = true;
TableS9.SetFont(fontS9);
#endregion HSSFSheet sheet = (HSSFSheet)hssfworkbookDown.GetSheetAt(sheetIndex);
hssfworkbookDown.SetSheetHidden(sheetIndex, false);
hssfworkbookDown.SetActiveSheet(sheetIndex); int n = ;//因为模板有表头,所以从第3行开始写
for (int j = ; j < DT.Rows.Count; j++)
{
HSSFRow dataRow = (HSSFRow)sheet.CreateRow(j + n);
dataRow.CreateCell();
dataRow.Cells[].SetCellValue(DT.Rows[j]["order_id"].ToString());
dataRow.CreateCell();
dataRow.Cells[].SetCellValue(DT.Rows[j]["consignee_name"].ToString());
dataRow.CreateCell();
dataRow.Cells[].SetCellValue(DT.Rows[j]["consignee_tel"].ToString());
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue(DT.Rows[j]["consignee_address"].ToString());
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue();
dataRow.CreateCell();
dataRow.Cells[].SetCellValue();
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("否");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue();
dataRow.CreateCell();
dataRow.Cells[].SetCellValue();
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("否");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue("普通");
dataRow.CreateCell();
dataRow.Cells[].SetCellValue(""); for (int i = ; i <= ; i++)//循环列,添加样式
{
dataRow.Cells[i].CellStyle = TableS9;
}
}
//设定第一行,第一列的单元格选中
sheet.SetActiveCell(, );
}
catch (Exception ex)
{
}
}
模板格式如下:
c# 导出excel的两种常见方法的更多相关文章
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- vue中this.$router.push()路由传值和获取的两种常见方法
1.路由传值 this.$router.push() (1) 路由跳转使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的 ...
- jdbc至sql server的两种常见方法
Statement和prepareStatement sql server中已建立BookPhone数据库,包含bookPhone表,eclipse中有BookPhone类,三个string类型的值 ...
- html笔记04:在html之中导入css两种常见方法
1.导入式: <html> <head> <title></title> <style type="text/css"> ...
- .NET导出Excel的四种方法及评测
.NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...
- [转帖].NET导出Excel的四种方法及评测
.NET导出Excel的四种方法及评测 https://www.cnblogs.com/sdflysha/p/20190824-dotnet-excel-compare.html 导出Excel是.N ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- SQL Server 导出Excel有换行的解决方法
参考地址::https://vcoo.cc/blog/1234/ 从 SQL Server 查询结果中复制结果数据粘贴到 Excel 中存在这么个问题:如果字段内容中有换行符,那么粘贴到 Excel ...
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
随机推荐
- .net core && python
最近.net core的发展,确实值得激动,强力推荐传教文章<.NET:持续进化的统一开发平台>http://www.cnblogs.com/wer-ltm/p/8776846.html ...
- python读取配置文件报keyerror-文件路径不正确导致的错误
- 在其他模块使用反射读取配置文件报错,但是在反射模块中读取GetData.check_list又是正确的 反射模块如下: # get_data.py from API_AUTO.p2p_projec ...
- C++中的大数乘的实现
代码 来源:面试常考 大数加减乘除 #include <iostream> #include <vector> #include <string> using na ...
- ffmpeg android移植
CMake语法简介(androidstudio中利用CMake开发NDK): http://blog.csdn.net/u013718120/article/details/62883711FFmpe ...
- mysql-5.7.14-winx64解压版配置
1.下载最新的MySQL文件并且解压 我的位置是 F:\mysql-5.7.14-winx64 2.F:\mysql-5.7.14-winx64\bin; 添加到环境变量-系统变量-PATH下 3.复 ...
- 使用Connector / Python连接MySQL/查询数据
使用Connector / Python连接MySQL connect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象 在python中有以下几种方法可以连接到M ...
- 生死状:苹果VS他的供应商
据知情人士透露,苹果已经组建了代号为Titan的汽车团队,并招募了数百名员工,准备进入汽车领域,iCar大有呼之欲出之势.事实上,苹果CEO蒂姆-库克早在去年就参观了宝马位于莱比锡的核心工厂,学习如何 ...
- 20170220-coroutine
协程 coroutine 最近频繁的听说到 "协程" 这个词,花了一段时间肤浅的研究了一下.对于 "它是一个什么东西" 有了一个大概的了解. from wiki ...
- 47-Python进阶小结
目录 Python进阶小结 一.异常TODO 二.深浅拷贝 2.1拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字 ...
- linux同步当前网络时间
[root@root ~]# yum install -y ntpdate 执行:ntpdate[root@root ~]# ntpdate 120.24.81.91或[root@root ~]# n ...