NPOI将DataGridView中的数据导出+导出Chart图表图片至Excel
#region 导出Excel
private HSSFWorkbook Workbook = null;
private Sheet SheetOne = null;
private DataFormat DataFormat;//创建格式
private string TempImagePath = Application.StartupPath + "\\TempImages\\";
private void btnExportExcel_Click(object sender, EventArgs e)
{
if (!Directory.Exists(TempImagePath)) Directory.CreateDirectory(TempImagePath);
TempImagePath = TempImagePath + DateTime.Now.ToString("yyyyMMddhhmmss") + "CodeChart.jpg";
this.chartImage.SaveImage(TempImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
ExportDGVToExcel("号源信息");
} /// <summary>
/// 导出到Excel
/// </summary>
private void ExportDGVToExcel(string sheetName)
{
if (this.dgvList.Rows.Count == 0) return;
SaveFileDialog sf = new SaveFileDialog();
sf.Filter = "Excel文件(*.xls)|*.xls";
if (sf.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
string filePath = sf.FileName; try
{
if (File.Exists(filePath)) File.Delete(filePath); if (Workbook == null) Workbook = new HSSFWorkbook();//创建一个workbook
if (SheetOne == null) SheetOne = Workbook.CreateSheet(sheetName);//创建一个sheet
if (DataFormat == null) DataFormat = Workbook.CreateDataFormat();//创建格式
//获取设置样式
CellStyle headerCellStyle = GetHeaderCellStyle();
CellStyle cellStyle = GetValueCellStyle();
//将数据保存到Excel
SaveDgvValueToExcel(headerCellStyle, cellStyle);
//将Chart图片保存到Excel
if (File.Exists(TempImagePath))
{
SaveChartImgToExcel(Workbook, SheetOne, headerCellStyle);
File.Delete(TempImagePath);
} FileStream file = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);//创建文件
MemoryStream ms = new MemoryStream();
Workbook.Write(ms);//写入到流
//转换为字节数组
byte[] bytes = ms.ToArray();
file.Write(bytes, 0, bytes.Length);
file.Flush(); //释放资源
bytes = null;
ms.Close();
ms.Dispose(); file.Close();
file.Dispose(); Workbook.Dispose();
SheetOne = null;
Workbook = null;
DialogResult result = ShowMessage.Instance.Show("提示", filePath+"--保存完成\n是否查看?", true);
if (DialogResult.OK.Equals(result)) System.Diagnostics.Process.Start(filePath);
}
catch (Exception ex)
{
ShowMessage.Instance.Show("失败", "保存的过程中发现如下异常:\n" + ex.Message, false);
}
}
/// <summary>
/// 获取Excel内容列样式
/// </summary>
/// <returns></returns>
private CellStyle GetValueCellStyle()
{
CellStyle style = Workbook.CreateCellStyle(); //创建单元格样式
style.DataFormat = DataFormat.GetFormat("@");//设置为文本格式,也可以为 text,即 dataFormat.GetFormat("text");
//设置字体
HSSFFont font = (HSSFFont)Workbook.CreateFont();
//font.Boldweight = (short)FontBoldWeight.BOLD;
font.FontHeightInPoints = 11;//字号
font.FontName = "微软雅黑";
//font.Color = short.Parse("#4169E1");//字体颜色
font.Color = HSSFColor.DARK_TEAL.index;
style.SetFont(font);
//设置居中
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;//垂直对齐
//style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;//水平对齐
return style;
}
/// <summary>
/// 获取Excel标题列样式
/// </summary>
/// <returns></returns>
private CellStyle GetHeaderCellStyle()
{
CellStyle style = Workbook.CreateCellStyle();//表头单元格格式
style.DataFormat = DataFormat.GetFormat("@");
//设置背景色
style.FillForegroundColor = HSSFColor.LIGHT_BLUE.index;
style.FillPattern = FillPatternType.SOLID_FOREGROUND;
//设置字体
HSSFFont font = (HSSFFont)Workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.BOLD;
font.FontHeightInPoints = 12;//字号
font.FontName = "微软雅黑";
//font.Color = short.Parse("#4169E1");//字体颜色
font.Color = HSSFColor.WHITE.index;
style.SetFont(font);
//设置边框
style.BorderBottom = CellBorderType.THIN;
style.BorderLeft = CellBorderType.THIN;
style.BorderRight = CellBorderType.THIN;
style.BorderTop = CellBorderType.THIN;
//设置居中
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;//垂直对齐
return style;
}
/// <summary>
/// 将数据保存到Excel
/// </summary>
/// <param name="headerCellStyle">标题样式</param>
/// <param name="cellStyle">内容单元格样式</param>
private void SaveDgvValueToExcel(CellStyle headerCellStyle, CellStyle cellStyle)
{
//设置标题行
int index = 0;
Row rowH = SheetOne.CreateRow(0);//创建一行
rowH.Height = 450;//第一行行高
for (int j = 1; j < this.dgvList.Columns.Count; j++)
{
DataGridViewColumn col = this.dgvList.Columns[j];
if (col.Visible)//不可见列不保存
{
Cell cellH = rowH.CreateCell(index);
cellH.SetCellValue(col.HeaderText);
cellH.CellStyle = headerCellStyle;
SheetOne.SetColumnWidth(index, col.Width * 35);
index++;
}
}
//写入行数据
for (int i = 0; i < this.dgvList.Rows.Count; i++)
{
Row row = SheetOne.CreateRow(i + 1);//跳过第一行
index = 0;
for (int j = 1; j < this.dgvList.Columns.Count; j++)
{
if (this.dgvList.Columns[j].Visible)
{
Cell cell = row.CreateCell(index);
cell.SetCellValue(this.dgvList.Rows[i].Cells[j].Value == null ? "" : this.dgvList.Rows[i].Cells[j].Value.ToString());
cell.CellStyle = cellStyle;
index++;
}
}
}
}
/// <summary>
/// 将Chart图片保存到Excel
/// </summary>
/// <param name="workbook">HSSFWorkbook workbook</param>
/// <param name="sheet">Sheet sheet</param>
/// <param name="headerCellStyle">标题样式</param>
private void SaveChartImgToExcel(HSSFWorkbook workbook, Sheet sheet, CellStyle headerCellStyle)
{
int rowLine = this.dgvList.Rows.Count + 2;
Row titleRow = sheet.CreateRow(rowLine);//跳过第一行
Row imgRow = sheet.CreateRow(rowLine + 1);//跳过第一行
imgRow.Height = 10000;
//填入生产单号
//titleRow.CreateCell(0, CellType.STRING).SetCellValue(""号源图标信息如下:"");
Cell cellTitle = titleRow.CreateCell(0);
cellTitle.SetCellValue("号源图标信息如下:");
cellTitle.CellStyle = headerCellStyle;
Cell nouse = titleRow.CreateCell(1);
nouse.CellStyle = headerCellStyle;
//将图片文件读入一个字符串
HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
SetPic(workbook, patriarch, TempImagePath, rowLine + 1, 0);
}
/// <summary>
/// 将图片插入到指定位置
/// </summary>
/// <param name="workbook">HSSFWorkbook workbook</param>
/// <param name="patriarch">HSSFPatriarch patriarch</param>
/// <param name="path">图片路径</param>
/// <param name="rowline">行索引</param>
/// <param name="col">列索引</param>
private void SetPic(HSSFWorkbook workbook, HSSFPatriarch patriarch, string path, int rowline, int col)
{
if (string.IsNullOrEmpty(path)) return;
byte[] bytes = System.IO.File.ReadAllBytes(path);
int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);
//margin左上右下列、行、span clo
HSSFClientAnchor anchor = new HSSFClientAnchor(70, 10, 0, 0, col, rowline, col + 8, rowline + 1);
//把图片插到相应的位置
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
} #endregion
运行效果如下:

NPOI将DataGridView中的数据导出+导出Chart图表图片至Excel的更多相关文章
- NPOI从数据库中调取数据直接导出到EXCEL中
关于NPOI NPOI是POI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex. ...
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...
- 将Datagridview中的数据导出至Excel中
首先添加一个模块ImportToExcel,并添加引用 然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...
- 把数据库里面的stu表中的数据,导出到excel中
# 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...
- 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?
https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...
- c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel ...
- c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”
ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述 相关代码 using System; us ...
- vs 2015 rdlc报表绑定datagridview中的数据
这几天一直想要实现rdlc报表绑定datagridview中的数据,始终在虚拟表向rdlc报表绑定这一步上出错.今天从下午4点到七点四十一直在尝试.最终还是实现了,最然并不知所以然,这个问题还是以后在 ...
- 【SqlServer】在SqlServer中把数据导入导出为Excel文件
这里笔者介绍利用SqlServer数据库操作EXECEL文件. 1.将Excel表中的数据导入为SqlServer数据库 把Excel表中的数据导入为SqlServer数据库中的数据. 新建一个Exc ...
随机推荐
- python学习笔记第二周
目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...
- triplet改进,变种
1.一开始是FaceNet 2.一个重要的改进:image-based, Ding etal. 3.对于样本挑选的改进: 1)hard samples: hard positive 和hard neg ...
- HDU - 2892:area (圆与多边形交 求面积)
pro:飞行员去轰炸一个小岛,给出炸弹落地点的位置信息,以及轰炸半径:按顺时针或者逆时针给出小岛的边界点. 求被轰炸的小岛面积. sol:即是求圆和多边形的面积交. (只会套板子的我改头换面,先理解然 ...
- maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)
Glassfish常用命令 asadmin start-domain --verbose #启动Glassfish服务器(默认domain1) ,并在终端显示相关信 ...
- 1px的实现方法
1.用伪元素实现 .border_1px_top{ position:relative;} .border_1px_top:before{ content: ""; positio ...
- xdoj-1279(有趣的线段树--吉司机?!)
题目链接 一 核心: f(x)=91 (x<=100) f(x)=x-10 (x>100) 那么同一区间就可能不同的操作,那么该怎么解决呢? 我门直到同一区间的数据属于同一类别的时候再进行 ...
- A Word-Complexity Lexicon and A Neural Readability Ranking Model for Lexical Simplification-paper
https://github.com/mounicam/lexical_simplification 提供了SimplePPDBpp: SimplePPDB++ resource consisting ...
- java第一节感受
第一节java课考试,感觉自从小学期和实习过了以后就等这个测试了,测试过了以后就是中秋节了,下周再上一节java又放国庆节了. 当时报软工的时候就早早地做好了心理准备,但是当亲身经历一遍后真的有了一种 ...
- 新一代构建工具gradle学习
简介:Gradle的出现,是技术发展的必然,站在了Ant.maven等构建工具的肩膀上,使用了一种强大且具有表达性的基于Groovy的领域特定语言(DSL),使其拥有易用且灵活的方式去实现定制逻辑.方 ...
- KiCad 5.1.0 正式版终于发布
KiCad 5.1.0 正式版终于发布 前几天看到 KiCad 5.1.0 在官方的测试文件夹中,过了三天正式发布了,看来没什么问题了. 据说比 5.0 快了很多. 以下为官方的新闻. KiCad 5 ...