#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的更多相关文章

  1. NPOI从数据库中调取数据直接导出到EXCEL中

    关于NPOI NPOI是POI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex. ...

  2. C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

    其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...

  3. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  4. 把数据库里面的stu表中的数据,导出到excel中

    # 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...

  5. 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?

    https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...

  6. c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式

    Microsoft.Office.Interop.Excel.Application excel =                new Microsoft.Office.Interop.Excel ...

  7. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  8. vs 2015 rdlc报表绑定datagridview中的数据

    这几天一直想要实现rdlc报表绑定datagridview中的数据,始终在虚拟表向rdlc报表绑定这一步上出错.今天从下午4点到七点四十一直在尝试.最终还是实现了,最然并不知所以然,这个问题还是以后在 ...

  9. 【SqlServer】在SqlServer中把数据导入导出为Excel文件

    这里笔者介绍利用SqlServer数据库操作EXECEL文件. 1.将Excel表中的数据导入为SqlServer数据库 把Excel表中的数据导入为SqlServer数据库中的数据. 新建一个Exc ...

随机推荐

  1. 【算法基础】卡尔曼滤波KF

    kalman filter KCF 尺度变化是跟踪中比较基本和常见的问题,前面介绍的三个算法都没有尺度更新,如果目标缩小,滤波器就会学习到大量背景信息,如果目标扩大,滤波器就跟着目标局部纹理走了,这两 ...

  2. spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比 (附:遇到的坑)

    转载:https://www.cnblogs.com/yskcoder/p/4718198.html 这两天在用spring进行上传上遇到问题,今天进行了问题的排查,这个过程也增加了我看spring源 ...

  3. Django自定义查询对象

    在Django中,objects对象类继承于models.Manager 1.声明 EntryManager 类,继承自 models.Manager 允许在 EntryManager中增加自定义函数 ...

  4. cocos2dx九宫图使用方法

    九宫格Sprite: itemBg = Scale9Sprite::create("pop/achieve_itembg.png");if(!itemBg)return false ...

  5. set_uid set_gid stick_bit 软硬链接

    1.set_uid,里面的s权限   即运行一个命令时,普通用户临时拥有root权限 ( 增加和移除s权限 chmod u+s  file_name chmod u-s file_name 大S  和 ...

  6. SQL-数据库操作-002

    数据库的创建:create database data_name on primary ( name=data_1, filename='D\Data\data_name.mdf', size=50m ...

  7. 《DSP using MATLAB》Problem 5.30

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  8. 逍遥大佬分享mysql知识

    设计表规则: 0),数据库名字以db_开始,编码UTF8 1),表名都以tb_开始 2),字段都是用小写,比如是否删除is_delete 3),表都是innodb,utf8格式的 4),最重要的,表名 ...

  9. Java 中各种空(""、\u0000、null)的区别?

  10. LG4071 [SDOI2016]排列计数

    题意 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 ...