C#WinFrom导出Excel
采用的是以DataGridView的形式导出,使用NPOI.dll
1.由于使用的是DataGridView,所以类需要创建在From的Project下,DLL导入NPOI
2.代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.SS.UserModel; //NPOI
using NPOI.HSSF.Util; //NPOI
using NPOI.HSSF.UserModel; //NPOI
using NPOI.XSSF.UserModel; //NPOI
using System.IO;
namespace ESMT
{
public class ExportExcel
{
/// <summary>
///
/// </summary>
/// <param name="grdview">数据表</param>
/// <param name="sheetName">工作簿名字</param>
/// <param name="FilePath">文件路径</param>
/// <param name="columnTitle">列头</param>
public void ExportToExcel(DataGridView grdview, string sheetName, string FilePath, string[] columnTitle)
{ //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
grdview.AllowUserToAddRows = false;
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(sheetName);//创建工作簿
//设置表头
IRow headerRow = sheet.CreateRow();//创建第一行
headerRow.HeightInPoints = ;
headerRow.CreateCell().SetCellValue("出库表单");//单元格赋值
ICellStyle headStyle = workbook.CreateCellStyle();
headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
IFont font = workbook.CreateFont();
font.Boldweight = ;
font.FontHeightInPoints = ;
headStyle.SetFont(font);
headerRow.GetCell().CellStyle = headStyle;
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(, , , grdview.ColumnCount - ));//单元格合并 最后个参数是合并个数 IRow headerRow2 = sheet.CreateRow();//创建第二行列头
ICellStyle headStyle2 = workbook.CreateCellStyle();
headStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
IFont font2 = workbook.CreateFont();
font2.FontHeightInPoints = ;
font2.Boldweight = ;
headStyle2.SetFont(font2);
for (int l = ; l < grdview.ColumnCount - ; l++) //列头填值
{
headerRow2.CreateCell(l).SetCellValue(columnTitle[l]);
headerRow2.GetCell(l).CellStyle = headStyle2;
} //设置列宽
for (int l = ; l < grdview.Columns.Count; l++)
{
sheet.DefaultColumnWidth = ;
} //填写内容
for (int i = ; i < grdview.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + );
for (int j = ; j < grdview.Columns.Count; j++)
{
row.CreateCell(j - , CellType.String).SetCellValue(grdview.Rows[i].Cells[j].Value.ToString());//j-1表示哪个单元格
}
} using (FileStream stream = File.OpenWrite(FilePath))//创建Excel并写入数据
{
workbook.Write(stream);
stream.Close();
}
GC.Collect();
}
}
}
ExportExcel
PS:openwtrie 打开或者创建新的文件写入
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.SS.UserModel; //NPOI
using NPOI.HSSF.Util; //NPOI
using NPOI.HSSF.UserModel; //NPOI
using NPOI.XSSF.UserModel; //NPOI
using System.IO;
namespace ESMT
{
public class ExportExcel
{
/// <summary>
/// ExportToExcel
/// </summary>
/// <param name="grdview">数据表</param>
/// <param name="sheetName">工作簿名字</param>
/// <param name="FilePath">文件路径</param>
/// <param name="columnTitle">列头</param>
public bool ExportToExcel(DataGridView grdview, string sheetName, string FilePath, string[] columnTitle, bool ischeckbox)
{
try
{
//不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
grdview.AllowUserToAddRows = false;
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(sheetName);//创建工作簿 //设置表头
IRow headerRow = sheet.CreateRow();//创建第一行
headerRow.HeightInPoints = ;
headerRow.CreateCell().SetCellValue("出库表单");//单元格赋值 ICellStyle headStyle = workbook.CreateCellStyle();//
headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
headStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//格式居中 IFont font = workbook.CreateFont();
font.Boldweight = ;
font.FontHeightInPoints = ;
headStyle.SetFont(font);//设置了第一行样式的字体 headerRow.GetCell().CellStyle = headStyle;
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(, , , grdview.ColumnCount - ));//单元格合并 最后个参数是合并个数 IRow headerRow2 = sheet.CreateRow();//创建第二行列头
ICellStyle headStyle2 = workbook.CreateCellStyle();//设置第二行的样式
headStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
IFont font2 = workbook.CreateFont();
font2.FontHeightInPoints = ;
font2.Boldweight = ;
headStyle2.SetFont(font2); ICellStyle headStyle3 = workbook.CreateCellStyle();//内容的样式
headStyle3.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//格式居中
headStyle3.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//格式居中 for (int l = ; l < grdview.ColumnCount - ; l++) //列头填值
{
headerRow2.CreateCell(l).SetCellValue(columnTitle[l]);
headerRow2.GetCell(l).CellStyle = headStyle2;
}
//设置默认列宽
//sheet.DefaultColumnWidth = 15; //设置列宽
AutoColumnWidth(sheet, grdview.ColumnCount); //填写内容
for (int i = ; i < grdview.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + );
for (int j = ; j < grdview.Columns.Count; j++)
{
if (ischeckbox)
{//带checkbox的DataGrid
row.CreateCell(j - , CellType.String).SetCellValue(grdview.Rows[i].Cells[j].Value.ToString());
row.GetCell(j - ).CellStyle = headStyle3;
}//j-1表示哪个单元格
else
{
row.CreateCell(j - , CellType.String).SetCellValue(grdview.Rows[i].Cells[j - ].Value.ToString());//j-1表示哪个单元格
row.GetCell(j - ).CellStyle = headStyle3;
}
}
} using (FileStream stream = File.OpenWrite(FilePath))//创建Excel并写入数据
{
workbook.Write(stream);
stream.Close();
}
GC.Collect();
return true;//导出成功
}
catch (Exception)
{ return false;//导出失败
}
}
/// <summary>
/// 自适应列宽
/// </summary>
/// <param name="sheet"></param>
/// <param name="cols"></param>
public void AutoColumnWidth(ISheet sheet, int cols)
{
for (int col = ; col < cols - ; col++)//个数和列头个数统一
{
sheet.AutoSizeColumn(col);//自适应宽度,但是其实还是比实际文本要宽
int columnWidth = sheet.GetColumnWidth(col) / ;//获取当前列宽度
for (int rowIndex = ; rowIndex <= sheet.LastRowNum; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
ICell cell = row.GetCell(col);
int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//获取当前单元格的内容宽度
columnWidth = columnWidth < contextLength ? contextLength : columnWidth; }
sheet.SetColumnWidth(col, columnWidth * );//设置列宽 }
}
} }
改善版1.0
3.From窗口点击导出按钮
string[] columnTitle = { "序号", "仓位", "Facility", "供应商料号", "料号", "料卷ID", "料卷数量", "储位号", "Date Code/Lot", "生产日期", "供应商编码", "入仓时间" };
string localFilePath = "";// fileNameExt, newFileName, FilePath;
SaveFileDialog sfd = new SaveFileDialog();//保存文件窗口
//设置文件类型
sfd.Filter = "Excel(97-2003)|*.xls";//保存类型为EXCEL
//保存对话框是否记忆上次打开的目录
sfd.RestoreDirectory = true; //点了保存按钮进入
if (sfd.ShowDialog() == DialogResult.OK)
{
localFilePath = sfd.FileName.ToString(); //获得文件路径
ex.ExportToExcel(grdData, "出库表单", localFilePath, columnTitle);
}
导出按钮
通过以上三步,完成点击导出按钮,后选择保存位置并命名,调用EportExcel方法完成导出Excel。
PS:使用DataTable的操作是一样,只是赋值的时候取DataTable的值。GC 是自动垃圾收集 如果没有Checkbox的时候可以加入一个判断标记为 传参的时候加入,根据标记为来改变赋值情况。
C#WinFrom导出Excel的更多相关文章
- winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间 using System; using System.Collections.Generic; using System.Text; using ...
- Mvc 拼接Html 导出 Excel(服务器不用安装呦!支持2007以上版本)
新公司,新接触,老方法,更实用. 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总 ...
- asp.net 导出excel文件
之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现 ...
- Mvc 导出 Excel
Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...
- C#使用Aspose.Cells导出Excel简单实现
首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- [django]数据导出excel升级强化版(很强大!)
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
- NPOI导出Excel
using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
随机推荐
- 如何将打印内容转换为bmp位图文件
bmp是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8 ...
- Win10卸载预装应用
Win10的预装应用大多数都比较鸡肋,没啥用,喜欢纯净的系统的朋友可以将其卸载掉. 1.以管理员身份启动powershell,键入命令[Get-AppxPackage | Select Name, P ...
- android开源图表库MPAndroidChart(曲线图、直方图、饼状图)
github地址:https://github.com/PhilJay/MPAndroidChart 添加依赖: Add the following to your project level bui ...
- Ruby小白入门笔记之 <Gemfile 文件>
因为初学Ruby,四处查资料无果,才来的贴出亲自试过的操作,覆盖整个个人入门笔记博客中,故所有的操作,都以最明了的方式阐述,当你创建完一个新的Rails应用后,你发现JAVA中我们可以编写maven聚 ...
- Prism 订阅事件 IEventAggregator 说明
本节学习了Event Aggregation事件聚合,这个在Prism中很重要,特别是对于Module间的通信.除了前面介绍的Command可以用于模块间的通信,还有我们这一节介绍的Event Agg ...
- Android 动态申请权限
AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...
- 文件分发服务器 AWS CloudFront(CDN)使用入门-以S3为例 Lebal:Research
引言 在互联网上随意右击一张图片,都可以发现复制图片地址这个选项,这说明他们都有自己的链接(直链),也就是说我们可以通过一个链接本身来访问图片.代码等文件,而不是打开一个网页再选择复制,这就和下载链接 ...
- myeclipse_2017_CI_8安装与破解
一.下载myeclipse_2017_CI_8安装包与破解文件 二.安装myeclipse_2017_CI_8,安装完成后不要运行MyEclipse,将 "launch MyEclipse ...
- 如何在 Spring/Spring Boot 中做参数校验
数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据. 本文结合自己在项目 ...
- 微信小程序 ----- this.getOpenerEventChannel is not a function
小程序 添加新的功能, 页面跳转后,通过事件的发布订阅,实现 from => to 或者 to=> from 数据传递 1. 跳转到指定页面. 通过 wx.navigateTo() .请参 ...