WPF之NPOIE导出xcel
最近,我做的统计功能用到了导出Excel的功能。刚开始我觉着,导出Excel是一个比较简单的功能,分分钟都能解决的,应该和自己当初做机房收费系统的时候一样,引用一下微软的SDK,再做一下相应的适应性处理就差不多了。后来,当我做出来的时候,测试人员说,自己做的功能,有点奇葩,没见过是这样导出Excel 的——打开Excel表格文件,然后将数据存放进去……
之后自己反思一下,发现自己的实现方法确实有点跟平常用的不一样,或许当初自己做的导出Excel也只是仅仅限于没有用户的练习方法吧。
后来一个同事告诉我,用NPOI来实现导出Excel。后来自己在网上查了查相关的资料,发现NPOI确实是一个不错的工具包,相比微软的SDK它的优点大致如下:
<span style="font-size:24px;"><span style="font-size:24px;"><span style="font-size:24px;">public class ExcelOperateInterface{//获取excel操作类对象public static ExcelOperateInterface CreateInterfaceInstance(){ExcelOperateInterface eoi = null;//switch (EnvirMemory.excelOperateTool)//{// case ExcelOperateToolType.Excel_Office:// {// eoi = new ExcelOffice();// } break;// case ExcelOperateToolType.Excel_NPOI:// {eoi = new ExcelNPOI();// } break;//case ExcelOperateToolType.Excel_Defalut:// {// eoi = new ExcelOffice();// } break;//default:// {// eoi = new ExcelOffice();// } break;//}return eoi;}public virtual void OpenFile(string file,int iSheetIndex) { }public virtual void CreateFile(string file, int iSheetIndex) { }public virtual void CloseFile(bool bsave) { }public virtual string GetCellValue(int iRowIndex, int iColumnIndex) { return ""; }public virtual void SetCellValue(string sValue, int iRowIndex, int iColumnIndex) { }public virtual string GetDateCellValue(int iRowIndex, int iColumnIndex) { return ""; }}
</span></span></span>
接下来是具体的实现类:
<span style="font-size:24px;"><span style="font-size:24px;">public class ExcelNPOI : ExcelOperateInterface{private string filename;private IWorkbook m_iWorkbook;private ISheet m_iSheet;private void iInitEnvironment(){filename = "";m_iWorkbook = null;m_iSheet = null;}private void SaveFile(){try{//NPOI保存文件时,最好是先删除以前的 再新建一个文件//FilesManager.DeleteFile(filename);//新建文件流using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write)){int i = m_iWorkbook.NumberOfSheets;for (int ii = 0; ii < i; ++ii){ISheet ish = m_iWorkbook.GetSheetAt(ii);ish.DisplayGridlines = true;ish.DisplayRowColHeadings = true;}m_iWorkbook.Write(stream);stream.Flush();}}catch (Exception ex){}}public override void CreateFile(string file,int iSheetIndex){try{IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("sheet0");for (int i = 0; i < 450; i++){IRow row = sheet.CreateRow(i);for (int j = 0; j < 50; j++){ICell cell = row.CreateCell(j);cell.SetCellValue("lcy");}}using (FileStream fs = File.OpenWrite(file)){workbook.Write(fs);}}catch (Exception ex){throw;}}public override void OpenFile(string file, int iSheetIndex){try{iInitEnvironment();filename = file;using (FileStream sfile = new FileStream(file, FileMode.Open, FileAccess.Read)){m_iWorkbook = WorkbookFactory.Create(sfile);if (m_iWorkbook != null){m_iSheet = m_iWorkbook.GetSheetAt(iSheetIndex - 1);}}}catch (Exception ex){}}public override void CloseFile(bool bsave){try{if (bsave){SaveFile();}iInitEnvironment();}catch{}}public override string GetCellValue(int iRowIndex, int iColumnIndex){string sResult = "";try{IRow irow = m_iSheet.GetRow(iRowIndex - 1);if (irow != null){ICell icell = irow.GetCell(iColumnIndex - 1);if (icell != null){sResult = icell.ToString();}}}catch{}return sResult;}public override string GetDateCellValue(int iRowIndex, int iColumnIndex){string sResult = "";try{IRow irow = m_iSheet.GetRow(iRowIndex - 1);if (irow != null){ICell icell = irow.GetCell(iColumnIndex - 1);if (icell != null){DateTime dt;if (DateTime.TryParse(icell.ToString(), out dt)){if (icell.CellType == CellType.Numeric){sResult = icell.DateCellValue.ToString();}else{sResult = icell.ToString();}}}}}catch{}return sResult;}public override void SetCellValue(string sValue, int iRowIndex, int iColumnIndex){try{//CreateFile("D:\\excel333.xls", 1);IRow irow = m_iSheet.GetRow(iRowIndex - 1);if (irow == null){irow = m_iSheet.CreateRow(iRowIndex - 1);}ICell icell = irow.GetCell(iColumnIndex - 1);if (icell == null){icell = irow.CreateCell(iColumnIndex - 1);}icell.SetCellType(CellType.String);if (sValue == ""){sValue = "/";}icell.SetCellValue(sValue);CloseFile(true);}catch{}}}</span></span>
最后就是调用了:方法很简单,我现在只用到了导出的功能,所以只用一个Create方法就可以实现了,打开、保存之类的方法是不需要的:
<span style="font-size:24px;"><span style="font-size:24px;"> string file = @"D:\\excel550.xls";ExcelOperate.ExcelOperateInterface.CreateInterfaceInstance().CreateFile(file, 1);</span></span>
另外,在项目中需要引用一下NPOI的dll文件,在网上比较好找,而且版本更新挺快的,所以在此就不再提供了。
WPF之NPOIE导出xcel相关推荐
- WPF datagrid数据导出到Excel表格
封装成类,供以后使用(将datagrid导出) using System; using System.Collections.Generic; using System.Linq; using Sys ...
- WPF将DataGrid导出到Excel表格
将DataGrid转换成DataTabel,我这里因为项目的特殊性,这样转换,也有其他方法直接转换. public void Export(DataGrid dgData, DataTable dat ...
- WPF 数据库数据导出为Datatable,Datatable导出为Excel
安装Excel包 2.将数据库内容导为DataTable类型 System.Data.DataTable data_table = new System.Data.DataTable("My ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(07月18日-07月24日)
上周,微软推出Silverlight新版官方网站,新网站综合旧版网站内容,并增加更多Silverlight学习资源以及案例展示,Silverlight官网是学习Silverlight开发技术的主要资源 ...
- OxyPlot 导出图片及 WPF 元素导出为图片的方法
OxyPlot 导出图片及 WPF 元素导出为图片的方法 目录 OxyPlot 导出图片及 WPF 元素导出为图片的方法 一.OxyPlot 自带导出方法 二.导出 WPF 界面元素的方法 三.通过附 ...
- WPF 使用 Expression Design 画图导出及使用 Path 画图
WPF 使用 Expression Design 画图导出及使用 Path 画图 目录 WPF 使用 Expression Design 画图导出及使用 Path 画图 一.软件介绍 二.Micros ...
- WPF中使用PS导出的SVG矢量图
1.PS导出的SVG格式内容如下图,是Image的Base64,不是我们想要的 2.通过阿里巴巴矢量图库转成我们想要的svg代码 将PS导出的SVG上传阿里巴巴矢量库,然后再把上传的SVG下载下来 ...
- AutoCAD导出wmf文件,并转成wpf xaml
我们知道WPF的xaml有无损图形的能力,平时可以用AI画无损导出svg来转成xaml,或者从iconfont找资源,但是对于工业或者工程界,找用AutoCAD的人一抓一大把,怎么好好利用起来呢?我们 ...
- WPF及Silverlight中将DataGrid数据导出
这段源码是我在项目中实际应用的源码,没有经过删减及处理. 如果你认为有用可以摘去作为自己的导出类中的一个小工具使用. /// <summary> /// 数据源导出辅助类 ...
- WPF导出发布安装包,无法验证发行者解决办法
右击工程项目点发布->完成 此时在工程目录下生成了安装文件setup.exe 同时又在工程下生成了临时证书WpfApp1_TemporaryKey.pfx 如果此时强行安装会弹出如下警告 接下来 ...
最新文章
- 放弃51单片机,直接学STM32开发会有什么严重的问题?
- 域控服务器发生w32time错误
- 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
- RecyclerView缓存机制(回收些啥?)
- 移动手机平台的HTML5前端优化指南
- C++list常用接口总结
- flask带有传入参数既有URL还有其他参数类型:建议使用方式二(flask 使用查询字符串的方式)
- 如何把域名解析到网站空间IP上?
- python threading.local
- 程序局部性(时间局部性与空间局部性)与循环展开原理详解
- Linq 学习笔记(一)
- charts引入icon图片_如何在React中优雅的使用icon
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_18-页面查询接口定义-定义接口...
- MySQL面试题中:主从同步部署介绍
- 找回Windows 10安全通知图标
- python字典存储省份与城市_python实现城市和省份字典(根据城市判断属于哪个省份)...
- 20210130上午新初一(GW+JZ)比赛总结
- Python语言基础学习
- oracle10g安装未知错误
- 开源OA:手把手教你搭建OA办公系统(13)将O2OA集成到钉钉