NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下:

首先说明几点:

1.Excel2003及一下:后缀xls,单个sheet最大行数为65335

Excel2007 单个sheet :后缀xlsx 单个sheet 最大行数为 1048576

2.在用NPOI.dll时,导出的excel两种形式(xls,xlsx)用到的组件不一样,xls是HSSF,xlsx是XSSF,

由于某种原因我选择的是HSSF组件的:
以linq 匿名类得到数据为数据源导出Excel
类如以这样为数据源的:

var buildingCustomsPass = from CityBuilding in cityBuilding
select new
{

MapBuildingModelID = 0,
MapModelID = 0,
BuildingModelID = CityBuilding.BuildingModelID,
BuildingLevel = CityBuilding.BuildingLevel,
UnitPosX = CityBuilding.UnitPosX,
UnitPosY = CityBuilding.UnitPosY,
GarrisonIndex = 0,
BuildingUID = CityBuilding.BuildingUID
};

做的时候利用的是NPOI.dll这个开源项目,当然要引入NPOI.dll(自己网上搜,很多,这里就不提供了)

一:Excel导出单个sheet

//创建一个有Excel(构造的大概框架,标题)
public HSSFWorkbook CreateExcel(string[] titles)
{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();

//标题样式
ICellStyle cellStyleLable = sheet.Workbook.CreateCellStyle();
cellStyleLable.Alignment = HorizontalAlignment.CENTER;
cellStyleLable.VerticalAlignment = VerticalAlignment.CENTER;
cellStyleLable.FillPattern = FillPatternType.SOLID_FOREGROUND;
cellStyleLable.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;
//设置字体
IFont font = workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.BOLD;
cellStyleLable.SetFont(font);

//文本样式
 //ICellStyle cellStyleText = sheet.Workbook.CreateCellStyle();
 //cellStyleText.Alignment = HorizontalAlignment.CENTER;
 //cellStyleText.VerticalAlignment = VerticalAlignment.CENTER;
 //cellStyleText.BorderBottom = BorderStyle.THIN;
 //cellStyleText.BorderTop = BorderStyle.THIN;
 //cellStyleText.BorderRight = BorderStyle.THIN;
 //cellStyleText.BorderLeft = BorderStyle.THIN;

IRow row = sheet.CreateRow(0);
 for (int i = 0; i < titles.Length; i++)
{
ICell cell = row.CreateCell(i);
cell.CellStyle = cellStyleLable;
cell.SetCellValue(titles[i]);

sheet.SetColumnWidth(i, 20 * 256);

}
 return workbook;
}

//导出

protected void ButtonExport_Click(object sender, EventArgs e){

这里是以linq得到的匿名类为数据源

var buildingCustomsPass = from CityBuilding in cityBuilding
select new
{

MapBuildingModelID = 0,
MapModelID = 0,
BuildingModelID = CityBuilding.BuildingModelID,
BuildingLevel = CityBuilding.BuildingLevel,
UnitPosX = CityBuilding.UnitPosX,
UnitPosY = CityBuilding.UnitPosY,
GarrisonIndex = 0,
BuildingUID = CityBuilding.BuildingUID
};
if (buildingCustomsPass.Count() > 0)
{
HSSFWorkbook workbook = CreateExcel(new string[] { "MapBuildingModelID", "MapModelID", "BuildingModelID", "BuildingLevel", "UnitPosX", "UnitPosY", "GarrisonIndex" });

int i = 0;

foreach (var building in buildingCustomsPass)
{
 IRow row = workbook.GetSheetAt(0).CreateRow(i + 1);
 row.CreateCell(0).SetCellValue(building.MapBuildingModelID);
 row.CreateCell(1).SetCellValue(building.MapModelID);
row.CreateCell(2).SetCellValue(building.BuildingModelID);
row.CreateCell(3).SetCellValue(building.BuildingLevel);
row.CreateCell(4).SetCellValue(building.UnitPosX);
row.CreateCell(5).SetCellValue(building.UnitPosY);
row.CreateCell(6).SetCellValue(building.GarrisonIndex);
 i = i + 1;

}

MemoryStream ms = new MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();

}

二.Excel 多个sheet(这里是数据超过65335时写入另一个sheet)

/// <summary>
/// 生成Excel表头(这里只是生成表头)
/// </summary>
/// <param name="sheet"></param>
/// <param name="titles"></param>
public void CreateHeader(HSSFSheet sheet, string[] titles)
{
//标题样式
ICellStyle cellStyleLable = sheet.Workbook.CreateCellStyle();
cellStyleLable.Alignment = HorizontalAlignment.CENTER;
cellStyleLable.VerticalAlignment = VerticalAlignment.CENTER;
cellStyleLable.FillPattern = FillPatternType.SOLID_FOREGROUND;
cellStyleLable.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;
IRow row = sheet.CreateRow(0);
for (int i = 0; i < titles.Length; i++)
{
ICell cell = row.CreateCell(i);
cell.CellStyle = cellStyleLable;
cell.SetCellValue(titles[i]);
sheet.SetColumnWidth(i, 20 * 256);
}
}

//导出

protected void ButtonExporet_Click(object sender, EventArgs e){

NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();

var customFighter = from
CityFighter in cityFighter
select new { CustomFighterSetID =0,
CustomModelID = 0,
FighterModelID = CityFighter.FighterModelID,
FighterLevel = CityFighter.FighterLevel,
IsForeignAid = 0,
BonusRatePer =0 };
if (customFighter.Count() > 0)
{
int rowCount = 0;
int sheetCount = 1;
//添加一个sheet
NPOI.SS.UserModel.ISheet newSheet = null;
newSheet = book.CreateSheet("Sheet" + sheetCount);

CreateHeader((HSSFSheet)newSheet, new string[] { "CustomFighterSetID", "CustomModelID", "FighterModelID", "FighterLevel", "IsForeignAid", "BonusRatePer" });
foreach (var fighter in customFighter)
{
rowCount++;
if (rowCount == 65335)
{
rowCount = 1;
sheetCount++;
newSheet = book.CreateSheet("Sheet" + sheetCount);
CreateHeader((HSSFSheet)newSheet, new string[] { "CustomFighterSetID", "CustomModelID", "FighterModelID", "FighterLevel", "IsForeignAid", "BonusRatePer" });
}
// IRow row = book.GetSheetAt(sheetCount).CreateRow(rowCount + 1);
IRow row = newSheet.CreateRow(rowCount);
row.CreateCell(0).SetCellValue(fighter.CustomFighterSetID);
row.CreateCell(1).SetCellValue(fighter.CustomModelID);
row.CreateCell(2).SetCellValue(fighter.FighterModelID);
row.CreateCell(3).SetCellValue(fighter.FighterLevel);
row.CreateCell(4).SetCellValue(fighter.IsForeignAid);
row.CreateCell(5).SetCellValue(fighter.BonusRatePer);
}
MemoryStream ms = new MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();

}

三.Excel下的重新的sheet(类似2)

/// <summary>
/// 生成Excel头
/// </summary>
/// <param name="sheet"></param>
/// <param name="titles"></param>
public void CreateHeader(HSSFSheet sheet, string[] titles)
{
//标题样式
ICellStyle cellStyleLable = sheet.Workbook.CreateCellStyle();
cellStyleLable.Alignment = HorizontalAlignment.CENTER;
cellStyleLable.VerticalAlignment = VerticalAlignment.CENTER;
cellStyleLable.FillPattern = FillPatternType.SOLID_FOREGROUND;
cellStyleLable.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
cellStyleLable.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;
IRow row = sheet.CreateRow(0);
for (int i = 0; i < titles.Length; i++)
{
ICell cell = row.CreateCell(i);
cell.CellStyle = cellStyleLable;
cell.SetCellValue(titles[i]);
sheet.SetColumnWidth(i, 20 * 256);
}
}

//开始导出 这里是导出一个Excel里面有来自三个数据源生成三个sheet

protected void ButtonSearch_export(object sender, EventArgs e)

{

if (playerInfo != null)
{
DBContext dbContext = DBHelper.GetGameDBContext(iServerId);
using (ISession session = dbContext.OpenSession())
{
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//sheet
NPOI.SS.UserModel.ISheet newSheet = null;
PlayerCity[] playerCity = session.CreateCriteria(typeof(PlayerCity)).Add(Restrictions.Eq("PlayerUID", playerInfo.PlayerUID)).List<PlayerCity>().ToArray();
ICollection<CityBuilding> cityBuilding = session.CreateCriteria(typeof(CityBuilding)).Add(Restrictions.Eq("CityUID", playerCity[0].CityUID)).List<CityBuilding>().ToArray();
var buildingCustomsPass = from CityBuilding in cityBuilding
select new
{
MapBuildingModelID = 0,
MapModelID = 0,
BuildingModelID = CityBuilding.BuildingModelID,
BuildingLevel = CityBuilding.BuildingLevel,
UnitPosX = CityBuilding.UnitPosX,
UnitPosY = CityBuilding.UnitPosY,
GarrisonIndex = 0,
BuildingUID = CityBuilding.BuildingUID
};
if (buildingCustomsPass.Count() > 0)
{
int rowCount = 0;
newSheet = book.CreateSheet("建筑");
CreateHeader((HSSFSheet)newSheet, new string[] { "MapBuildingModelID", "MapModelID", "BuildingModelID", "BuildingLevel", "UnitPosX", "UnitPosY", "GarrisonIndex", "BuildingUID" });
foreach (var building in buildingCustomsPass)
{
rowCount++;
IRow row = newSheet.CreateRow(rowCount);
row.CreateCell(0).SetCellValue(building.MapBuildingModelID);
row.CreateCell(1).SetCellValue(building.MapModelID);
row.CreateCell(2).SetCellValue(building.BuildingModelID);
row.CreateCell(3).SetCellValue(building.BuildingLevel);
row.CreateCell(4).SetCellValue(building.UnitPosX);
row.CreateCell(5).SetCellValue(building.UnitPosY);
row.CreateCell(6).SetCellValue(building.GarrisonIndex);
row.CreateCell(7).SetCellValue(building.BuildingUID.ToString());

}
newSheet = null;
}
//英雄
Guid guid = new Guid("00000000-0000-0000-0000-000000000000");
ICollection<CityWarrior> cityWarrior = session.CreateCriteria(typeof(CityWarrior)).Add(Restrictions.Eq("CityUID", playerCity[0].CityUID)).Add(Restrictions.Not(Restrictions.Eq("BuildingUID", guid))).List<CityWarrior>().ToArray();
var customWarrior = from CityWarrior in cityWarrior
select new
{
CustomWarriorSetID = 0,
CustomModelID = 0,
WarriorModelID = CityWarrior.WarriorModelID,
Rank = CityWarrior.Rank,
FighterLevel = CityWarrior.FighterLevel,
Coordination = CityWarrior.Coordination,
Formation_STR = CityWarrior.Formation_STR,
SpellsLevelSet_STR = CityWarrior.SpellsLevelSet_STR,
EquimentSpellsSlot = CityWarrior.EquimentSpellsSlot,
AstrolabeSlotState_STR = CityWarrior.AstrolabeSlotState_STR,
DetachTime = 0,
UnitPosX = 0,
UnitPosY = 0,
Direction = 0,
GarrisonIndex = 0,
IsForeignAid = 0,
HitRate = 0,
BonusRatePer = 0,
HitPointBonusRatePer = 0,
DamageBonusRatePer = 0,
DefenseBonusRatePer = 0
};
if (customWarrior.Count() > 0)
{
int rowCount = 0;
newSheet = book.CreateSheet("英雄");
CreateHeader((HSSFSheet)newSheet, new string[] { "CustomWarriorSetID", " CustomModelID", "WarriorModelID", "Rank", "FighterLevel", "Coordination", "Formation_STR", "SpellsLevelSet_STR", "EquimentSpellsSlot ", "AstrolabeSlotState_STR", "DetachTime", "UnitPosX", "UnitPosY", "Direction", "GarrisonIndex", "IsForeignAid", "HitRate", "BonusRatePer", "HitPointBonusRatePer", "DamageBonusRatePer", "DefenseBonusRatePer" });
foreach (var warrior in customWarrior)
{
rowCount++;
IRow row = newSheet.CreateRow(rowCount);
row.CreateCell(0).SetCellValue(warrior.CustomWarriorSetID);
row.CreateCell(1).SetCellValue(warrior.CustomModelID);
row.CreateCell(2).SetCellValue(warrior.WarriorModelID);
row.CreateCell(3).SetCellValue(warrior.Rank.ToString());
row.CreateCell(4).SetCellValue(warrior.FighterLevel);
row.CreateCell(5).SetCellValue(warrior.Coordination.ToString());
row.CreateCell(6).SetCellValue(warrior.Formation_STR);
row.CreateCell(7).SetCellValue(warrior.SpellsLevelSet_STR);
row.CreateCell(8).SetCellValue(warrior.EquimentSpellsSlot);
row.CreateCell(9).SetCellValue(warrior.AstrolabeSlotState_STR);
row.CreateCell(10).SetCellValue(warrior.DetachTime);
row.CreateCell(11).SetCellValue(warrior.UnitPosX);
row.CreateCell(12).SetCellValue(warrior.UnitPosY);
row.CreateCell(13).SetCellValue(warrior.Direction.ToString());
row.CreateCell(14).SetCellValue(warrior.GarrisonIndex);
row.CreateCell(15).SetCellValue(warrior.IsForeignAid);
row.CreateCell(16).SetCellValue(warrior.HitRate);
row.CreateCell(17).SetCellValue(warrior.BonusRatePer);
row.CreateCell(18).SetCellValue(warrior.HitPointBonusRatePer);
row.CreateCell(19).SetCellValue(warrior.DamageBonusRatePer);
row.CreateCell(20).SetCellValue(warrior.DefenseBonusRatePer);
}
newSheet = null;
}
ICollection<CityFighter> cityFighter = session.CreateCriteria(typeof(CityFighter)).Add(Restrictions.Eq("CityUID", playerCity[0].CityUID)).List<CityFighter>().ToArray();
var customFighter = from
CityFighter in cityFighter
select new
{
CustomFighterSetID = 0,
CustomModelID = 0,
FighterModelID = CityFighter.FighterModelID,
FighterLevel = CityFighter.FighterLevel,
IsForeignAid = 0,
BonusRatePer = 0
};
if (customFighter.Count() > 0)
{
int rowCount = 0;
newSheet = book.CreateSheet("部队");
CreateHeader((HSSFSheet)newSheet, new string[] { "CustomFighterSetID", "CustomModelID", "FighterModelID", "FighterLevel", "IsForeignAid", "BonusRatePer" });
foreach (var fighter in customFighter)
{
rowCount++;
IRow row = newSheet.CreateRow(rowCount);
row.CreateCell(0).SetCellValue(fighter.CustomFighterSetID);
row.CreateCell(1).SetCellValue(fighter.CustomModelID);
row.CreateCell(2).SetCellValue(fighter.FighterModelID);
row.CreateCell(3).SetCellValue(fighter.FighterLevel);
row.CreateCell(4).SetCellValue(fighter.IsForeignAid);
row.CreateCell(5).SetCellValue(fighter.BonusRatePer);
}
newSheet = null;
}
MemoryStream ms = new MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();
}
}
else
{
LabelError.Text = "该玩家不存在";
return;
}

}

用到了就整理了一下,table数据源导出,类似上面,只是循环出table中的数据

NPOI导出Excel(含有超过65335的处理情况)的更多相关文章

  1. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  2. .NET NPOI导出Excel详解

    NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...

  3. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  4. NPOI导出EXCEL 打印设置分页及打印标题

    在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而 ...

  5. [转]NPOI导出EXCEL 打印设置分页及打印标题

    本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...

  6. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

  7. 用NPOI导出Excel

    用NPOI导出Excel public void ProcessRequest(HttpContext context) { context.Response.ContentType = " ...

  8. NPOI导出Excel示例

    摘要:使用开源程序NPOI导出Excel示例.NPOI首页地址:http://npoi.codeplex.com/,NPOI示例博客:http://tonyqus.sinaapp.com/. 示例编写 ...

  9. NPOI导出excel(带图片)

    近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新 ...

随机推荐

  1. Ajax的封装03

    一.Ajax   1.原理:基于http协议的     内置对象:XMLHttpRequest 发起请求 那会相应     步骤: var xhr=new XMLHttpRequest(); // 请 ...

  2. Servlet学习五——流的分发

    在上一节中有提到,流的传输,可以考虑Stream,但如果需要同时分发流和其它信息,,就需要再考虑其它方式了. 在coding中,服务端查询结果都是以gson进行传输,当需要传输一个语音并且同时需要传输 ...

  3. Spark 读取HBase和SolrCloud数据

    Spark1.6.2读取SolrCloud 5.5.1 //httpmime-4.4.1.jar // solr-solrj-5.5.1.jar //spark-solr-2.2.2-20161007 ...

  4. vim 标记 mark 详解 (转载)

    http://www.cnblogs.com/jianyungsun/archive/2011/02/14/1954057.html Vim 允许你在文本中放置自定义的标记.命令 "ma&q ...

  5. R常见的几种常见统计图

    1,向日葵散点图 2,热图  (颜色越深,数值越大) 3,折线图(散点图),绘制散点图集用 paris(data.frame)

  6. CSS布局中的水平垂直居中

    CSS布局中的水平垂直居中 各位好,先说两句题外话.今天是我开通博客园的博客第一天,虽然我申请博客园的账号已经有一年半了,但是由于各种原因迟迟没有开通自己的博客.今天非常有幸开通博客,在此也写一篇关于 ...

  7. 修改linux文件权限命令:chmod(转)

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

  8. jQuery小节

    jQuery 语法 jQuery 选择器 在前面的章节中,我们展示了一些有关如何选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是如何准确地选取您希望应用效果的元素. jQuery 元 ...

  9. EL使用:打印集合

    <%@page import="java.util.HashMap"%><%@page import="java.util.Map"%> ...

  10. Window10+VS2015+DevExpress.net 15.1.7完美破解(图)

    终于找到一个可用的破解工具了,并更新到最新的组件包DevExpressComponents-15.1.7.15288.exe,先看图 破解方法: 先安装DevExpressUniversalTrial ...