根据datatable导出Excel

//这里我也是把查到的资料稍微的整理了一下,写出来后直接把源代码贴出来了,为了方便以后可以直接套!!!

//这篇是Excel导出,下篇还得把Excel导出入也得弄出来................................................

private void Exprot(DataTable dt, string fileName)

{
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//- 创建 Sheet
var sheet = hssfworkbook.CreateSheet("sheet1");


//- Sheet 里的每一个 Row
NPOI.SS.UserModel.IRow row;
//- 创建一个“绘画器”,这个绘画器用于 所有的图片写入。
//- 请注意,是所有的图片,不可一张图片创建一个!否则将导致没有图片
var patriarch = sheet.CreateDrawingPatriarch();


//- 默认单元格的样式以及字体,是“Excel 级”的,如果对其进行设置,将导致所有的单元格都是这些字体以及样式
//- 创建一个新的字体以及样式,可以确保这些“单元格”独立的字体与样式。
//- 这里是创建一个标题的样式
var cellFont = hssfworkbook.CreateFont();
var cellStyle = hssfworkbook.CreateCellStyle();


//- 加粗,白色前景色(对Excel的其他具体的设置什么的可以自行再去百度相关的方法)
cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;
cellFont.Color = NPOI.HSSF.Util.HSSFColor.WHITE.index;
//- 很费解 FillForegroundColor 这个属性,我设置了是背景色,可从字义上来说,这个似乎叫“前景色”?
//- 更令人无语的是,还有 FillBackgroundColor 属性。真不知道做什么的。
cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.GREY_40_PERCENT.index;
//- 这个是填充的模式,可以是网格、花式等。如果需要填充单色,请使用:SOLID_FOREGROUND
cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
//- 设置这个样式的字体,如果没有设置,将与所有单元格拥有共同字体!
cellStyle.SetFont(cellFont);


#region 表头
row = sheet.CreateRow(0);
for (int j = 0; j < dt.Columns.Count; j++)
{
string CaptionName = dt.Columns[j].Caption;


//- 创建当前 row 指定列索引的 cell
NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
row.HeightInPoints = 50f; //- 设置行高 row.Height 需要 乘以 20
cell.SetCellValue(CaptionName); //-设置单元格内容
cell.CellStyle = cellStyle; //- 设置单元格的独立样式


//- 居中
cell.CellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
cell.CellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;


//- 细边缘
cell.CellStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN;


cell.CellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
}
#endregion


for (int i = 0; i < dt.Rows.Count; i++)
{//- 遍历行 这是 GridControl 控件的 GridView,i <= gridView1.RowCount的原因是首行我们设置为 标题行
row = sheet.CreateRow(i + 1);


for (int j = 0; j < dt.Columns.Count; j++)
{
//- 创建当前 row 指定列索引的 cell
NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
row.HeightInPoints = 157.5f; // 设置行高 row.Height 需要 乘以 20
object value = dt.Rows[i][j];
//- 如果是一个图片
if (value != null && value.GetType() == typeof(byte[]))
{
sheet.SetColumnWidth(j, 30 * 256);//- 设置列宽,需要 乘以 256
//- 插入图片到 Excel,并返回一个图片的标识
var pictureIdx = hssfworkbook.AddPicture((byte[])value, NPOI.SS.UserModel.PictureType.JPEG);
//- 创建图片的位置
var anchor = new HSSFClientAnchor(
12, 12, //- 上左 到 上右 的位置,是基于下面的行列位置
0, 0, //- 下左 到 下右 的位置,是基于下面的行列位置
j, i + 1,
j + 1, i + 2);
//- 图片输出的位置这么计算的:
//- 假设我们要将图片放置于第 5(E) 列的第 2 行
//- 对应索引为是 4 : 1 (默认位置)
//- 放置的位置就等于(默认位置)到(默认位置各自加上一行、一列)


//patriarch.CreatePicture(anchor, pictureIdx);//- 使用绘画器绘画图片
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
//pict.Resize();
//sheet.setColumnWidth((short)column,(short)width);
//row.setHeight((short)height);
}
else
{
cell.SetCellValue(StringHelper.ToString(value));
}
//- 居中
cell.CellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
cell.CellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;


//- 细边缘
cell.CellStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN;
cell.CellStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN;


cell.CellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
cell.CellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
}
}
FileStream file = new FileStream(fileName + ".xls", FileMode.Create);


Response.ContentType = "application/vnd.ms-excel";
//设置下载的Excel文件名
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName + ".xls"));
//Clear方法删除所有缓存中的HTML输出。但此方法只删除Response显示输入信息,不删除Response头信息。以免影响导出数据的完整性。
Response.Clear();
//using(MemoryStreamms=newMemoryStream())
{
//将工作簿的内容放到内存流中
hssfworkbook.Write(file);
//将内存流转换成字节数组发送到客户端
Response.BinaryWrite(ReadFile(file));
Response.End();
}
file.Close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值