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的路由系统. 例子
随机推荐
- 《你不知道的Javascript》学习笔记
简介 众所周知,JavaScript 既是一门充满吸引力.简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的JavaScript 开发者,如果没有认真学习的话也无法真正理解它们. 如 ...
- <JZOJ5913>林下风气
快乐dp 反正考场写挂 #include<cstdio> #include<cstring> #include<cctype> #include<iostre ...
- 基于Dockerfile制作tomcat镜像
Docker 概述: 在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...
- Jupyter自定义设置详解
今天专门花时间总结梳理一下jupyter的一些高级设置,jupyter我已经介绍过一次基本内容了,Setup and Linux | James Chen's Blogs,尤其是如何在服务器运行jup ...
- vue项目实战
本篇文章主要介绍了vue的环境配置,vue项目的目录结构以及在开发vue项目中问题的一些解决方案. 环境配置及目录结构 1.安装node.js(http://www.runoob.com/nodejs ...
- Go基础学习(二)
数组[array] 数组定义[定义后长度不可变] 12 symbol := [...]string{USD: "$", EUR: "€", GBP: " ...
- 在虚拟机单机部署OpenStack Grizzly
安装过程 安装Ubuntu 我手头有的是Ubuntu Server 12.04 64位版,就直接用了,默认安装即可,配置的时候很简单,如下 内存:1G 硬盘:20G 处理器:2 网络:NAT 装好以后 ...
- 20190407-ORID
2019-04-07 Objective 关于今天的课程,你记得什么? 给代码建立分支的操作 完成了什么? 完成了rails101前6节 Relective 今天的高峰是什么? 成功完成rails10 ...
- MVC06
1.校验机制 我们可以在Model中使用属性进行校验 using System; using System.ComponentModel.DataAnnotations; using System.D ...
- 学习经典算法—JavaScript篇(一)排序算法
前端攻城狮--学习常用的排序算法 一.冒泡排序 优点: 所有排序中最简单的,易于理解: 缺点: 时间复杂度O(n^2),平均来说是最差的一种排序方式: 因为在默认情况下,对于已经排好序的部分,此排序任 ...