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的路由系统. 例子
随机推荐
- oracle存储过程随笔
有时间要把最近总结的存储过程的问题总结一下,先占坑: create or replace procedure test_proc2 as cursor cur is select YWR,YWRZJH ...
- mysql表关联问题(第一卷:外键1对多之1)
表关联的问题在开发中是必不可少的,现在我先简单的谈谈我的学习经验.先来说一下外键一对多的问题. 步骤1:准备数据: (1)设计模拟场景: 一个游戏为了测试游戏的运行情况,招来了一批用户来试玩,现需要录 ...
- MyBatisUtil
package com.it.util; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io. ...
- JXJJOI2018_T3_catch
题目描述 Lemon因为偶然的原因,当上了警察局长.而一上任,他就碰到了个大麻烦:追捕周克华. 周克华是人尽皆知的抢劫杀人犯,而就在几天前,他在Lemon辖区内的银行门口,枪杀了一名储户后逃之夭夭.L ...
- [BZOJ 3144][HNOI 2013] 切糕
题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...
- MyBatis连接MySQL8配置
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...
- 3——PHP 简单运算符的使用
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- Pandorabox固件路由器上申请Let's Encrypt证书,为内网里的多个web服务提供SSL支持
对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险:如果在NAS上使用自签名证书,再端口转发, ...
- Linux 环境 搭建Git 服务器,并且修改SSH端口使用
1.环境配置说明 服务器 CentOS 7 + git(git version 1.8.3.1) 客户端 Windows10 + SourceTree 2.安装 Git 服务器端安装: sudo yu ...
- 关于Newtonsoft.Json引用报错
自己运行的vs版本是2012,然后同事用了2017的,我把代码发给他后运行发现报以下错误: {未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0, Cul ...