#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. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 配置校验器

    Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(J ...

  2. 使用Python中的log模块将loss输出到终端与保存到文件

    记得之前对深度学习中得loss输出,经常自己会将输出流重新定向到一个文件中, 比如 python main.py > & | tee log.txt 对于caffe这种c++框架而言,用 ...

  3. 田螺便利店——联想笔记本进入不了BIOS的解决方法

    当计算机遇到问题时,很多情况下需要进入BIOS进行解决.但很多新出的联想笔记本电脑在开机时,无论怎么疯狂的按F2,Fn+F2,F12或者Del,都无法进入BIOS,十分气人.       这种现象出现 ...

  4. EasyUI datagrid 格式 二

    单击保存,改表的状态 { field: 'ck', checkbox: true }, $("tr").each(function () { if ($(this).find(&q ...

  5. switch语句和switch-case与if-else之间的转换

    switch语句格式:switch(变量){case 常量1:语句1;break;case 常量2:语句2;break;......default:语句;break;}特点:1.根据变量的值,选择相应 ...

  6. hdu1846 Brave Game 博弈

    十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻.今天,大家选择上 ...

  7. 找DEV,欢迎挑战高薪 --方向:互联网金融,地点广州

    http://kaolalicai.cn/#/join 企业文化 加入财略 = 进取!自由!快乐 Get things done,坚持,进取 学习型企业,员工培训,交互学习 人性化管理,气氛和谐,快乐 ...

  8. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  9. 使用prometheus+ grafana+nginx-module-vts 模块监控openresty

      nginx-module-vts 是一个很不错的nginx 模块,我们可以用来,方便的分析系统的请求状态 同时支持基于prometheus 的监控, 我参考openresty 的docker镜像已 ...

  10. codeblock设置快捷键

    第一步: 第二步: 第三步:  格式化代码设置: 在代码框里点右键,按Format use Astyle就会自动代码格式化了 但是它默认的风格是大括号另起一行,很不习惯,实际上是可以改的 1.Sett ...