NPOI2.0操作导出excel
来源:互联网 发布:航海家软件骗局 编辑:程序博客网 时间:2024/04/30 22:57
3.导出excel代码using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.Util;
/// <summary>
/// 从数据库查询数据并导出excel
/// </summary>
/// <param name="InventBatchId"></param>
protected void ExportExcel(string g)
{
UserProFileBLL bll = new UserProFileBLL();
System.Data.DataTable dt = new System.Data.DataTable();
//查询数据库语句
string sql = "select * from InventBatch a where a.InventBatchId in(" + g + ")";
dt = bll.QueryDT(sql);
if (dt.Rows.Count > 0)
{
//打开模板
string modelExlPath = Server.MapPath(@"~/Template/模板.xls");
HSSFWorkbook hssfworkbookDown;
//读入刚复制的要导出的excel文件
using (FileStream file = new FileStream(modelExlPath, FileMode.Open, FileAccess.Read))
{
hssfworkbookDown = new HSSFWorkbook(file);
file.Close();
}
HSSFSheet sheet1 = (HSSFSheet)hssfworkbookDown.GetSheetAt(0);
IRow sourceRow = sheet1.GetRow(6);
MyInsertRow(sheet1, 6, dt.Rows.Count - 1);
int i = 0;
string Cust = " ";
foreach (DataRow dr in dt.Rows)
{
i++;
IRow row = sheet1.CreateRow(5 + i);
//获取源行的高度
row.Height = sourceRow.Height;
//复制单元格样式start
for (int m = sourceRow.FirstCellNum; m < sourceRow.LastCellNum; m++)
{
ICell cell = row.CreateCell(m);
// cell.SetCellValue("0");
ICellStyle cellStyle = sourceRow.Cells[m].CellStyle;
cellStyle.Alignment = HorizontalAlignment.Center;
cell.CellStyle = cellStyle;
cell.SetCellType(sourceRow.Cells[m].CellType);
}
//复制单元格样式end
//合并单元格
sheet1.AddMergedRegion(new CellRangeAddress(5 + i, 5 + i, 4, 5));
//指定单元格插入图片start
byte[] bytes = System.IO.File.ReadAllBytes(Server.MapPath(@"~/images/IDO.png"));
int pictureIdx = hssfworkbookDown.AddPicture(bytes, PictureType.PNG);
HSSFSheet sheet2 = (HSSFSheet)hssfworkbookDown.GetSheetAt(0);
HSSFPatriarch patriarch = (HSSFPatriarch)sheet2.CreateDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(255, 1, 1023, 100, 8, i+5, 8, i+5);
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
pict.Resize();
//指定单元格插入图片end
//向excel单元格中写入数据start
if (Cust.IndexOf(dr["a"].ToString()) < 0)
{
Cust += dr["a"].ToString() + "/";
}
row.GetCell(0).SetCellValue(i.ToString());
string content = "原资料:" + dr["f"].ToString() + " ";
if (Convert.ToDouble(dr["e"].ToString()) == 0)
{
content += "D" + Math.Floor(Convert.ToDouble(dr["KTL_ViceStoneQty"])*100)/100+ "\n";
}
else
{
content += "D" + Math.Floor(Convert.ToDouble(dr["d"]) * 100) / 100;
if (Convert.ToDouble(dr["c"]) == 0)
{
content += "\n";
}
else
{
content +=" d" + Math.Floor(Convert.ToDouble(dr["b"]) * 100) / 100 + "\n";
}
}
row.GetCell(4).SetCellValue(content);
row.GetCell(11).SetCellValue(dr["g"].ToString());
//向excel单元格中写入数据end
}
IRow headRow = sheet1.GetRow(1);
headRow.GetCell(11).SetCellValue(DateTime.Now.ToString("yyyy/MM/dd"));
headRow.GetCell(2).SetCellValue(Cust.Substring(0,Cust.Length-1));
//添加函数
IRow footRow = sheet1.GetRow(dt.Rows.Count+6);
footRow.GetCell(3).SetCellFormula("sum(D7:D" + (dt.Rows.Count + 6) + ")");
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//不保存excel在服务器直接输出到客户端进行下载
hssfworkbookDown.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
hssfworkbookDown = null;
ms.Close();
ms.Dispose();
}
}
/// <summary>
/// 将指定行数向下移动
/// </summary>
/// <param name="targetSheet">sheet</param>
/// <param name="fromRowIndex">起始第几行</param>
/// <param name="rowCount">需要移动的行数</param>
private void MyInsertRow(HSSFSheet targetSheet, int fromRowIndex, int rowCount)
{
targetSheet.ShiftRows(fromRowIndex + 1, targetSheet.LastRowNum, rowCount, true, false, true);
}
- NPOI2.0操作导出excel
- NPOI2.0操作导出excel2007
- 关于使用NPOI2.0 进行Excel导出的一些笔记
- C# NPOI2.1.3 版本数据导入导出到excel
- NPOI2.2.0.0实例详解(七)—设置EXCEL字体
- 在C#中使用NPOI2.0操作Excel2003和Excel2007
- 在C#中使用NPOI2.0操作Excel2003和Excel2007
- 在C#中使用NPOI2.0操作Excel2003和Excel2007
- Excel的导出操作
- Excel的导出操作
- js操作Excel导出
- 操作excel导入、导出
- poi操作导出excel、
- NPOI操作EXCEL导出
- poi导出excel操作
- NPOI读写Excel (使用NPOI2.0 包含03和07版本)
- NPOI2.2.0.0实例详解(二)—使用NPOI创建EXCEL
- NPOI2.2.0.0实例详解(三)—设置EXCEL列宽、行高与合并单元格
- sp_executesql介绍和使用
- 使用反射自动添加sql参数
- 当进行数据量大的更新时显示正在更新的动画
- Java IO Overview
- SQL SERVER SA密码忘记,windows集成身份验证都登录不了不怎么办
- NPOI2.0操作导出excel
- async and await 简单的入门
- C#发送带附件的邮件
- 洛谷 1073
- 使用C#开发Metro 风格应用的路线图 -- 在页面间导航、传值
- 【转载】c# sealed class 的用法
- 【转载】C#之密封类(sealed class)
- framework打包步骤
- Microsoft SQL SERVER 2008 R2 REPORT SERVICE 匿名登录