基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作
Excel文件读、写可以使用Office自带的库(Microsoft.Office.Interop.Excel),前提是本机须安装office才能运行,且不同的office版本之间可能会有兼容问题。
还可以使用NPOI,在不安装office的时候也是可以读写的,速度很快。当然,还有支持Excel2007以上版本的OpenXml。以及其他一些开源项目,由于本人不太熟悉,在此不做过多介绍。
为了解决烦人Office版本兼容问题,本项目-ShiQuan.Offices 决定采用基于NPOI,进行Excel文件读、写操作。
本项目目前实现内容包括:
1、直接根据DataTable,生成Excel文件内容。
2、根据列表设置和DataTable,生成Excel文件内容。
3、根据Excel模板,使用模板设置,生成Excel文件内容。
4、读取Excel内容,返回DataTable。
本项目基于LGPL3.0开源,供大家参考、使用,欢迎提供宝贵意见!
项目源码:https://gitee.com/ShiQuanSoft/ShiQuan.Offices
下面介绍分享如何使用该项目-ShiQuan.Offices。
首先,创建ConsoleApp测试项目,添加程序包安装:

1、先我们试下,普通的DataTable生成Excel文件是怎样的?
try
{
//取出数据源
DataTable dtData = new DataTable();
dtData.Columns.Add("account");
dtData.Columns.Add("realname");
dtData.Columns.Add("birthday");
dtData.Columns.Add("description");
dtData.Columns.Add("remark"); DataRow dr = dtData.NewRow();
dr["account"] = "账户";
dr["realname"] = "姓名";
dr["birthday"] = "2000-05-25";
dr["description"] = "说明";
dr["remark"] = "说明";/*多余字段,不会数据导出*/
dtData.Rows.Add(dr);
Console.WriteLine("生成2007以上版本Excel...");
NPOIHelper.SaveToExcel(dtData, "XSSFWorkbook.xlsx");
Console.WriteLine("生成2003版本Excel...");
NPOIHelper.SaveToExcel(dtData, "HSSFWorkbook.xls");
}
catch (Exception ex)
{
Console.WriteLine("导出异常:" + ex.Message);
}
运行效果:

2、一般从系统中导出Excel,我们都将采用中文标题,设置相应的数据列格式,对齐方式等信息?
try
{
//取出数据源
DataTable dtData = new DataTable();
dtData.Columns.Add("account");
dtData.Columns.Add("realname");
dtData.Columns.Add("gender");
dtData.Columns.Add("birthday");
dtData.Columns.Add("enabled");
dtData.Columns.Add("price");
dtData.Columns.Add("percent");
dtData.Columns.Add("money");
dtData.Columns.Add("remark"); DataRow dr = dtData.NewRow();
dr["account"] = "账户";
dr["realname"] = "姓名";
dr["gender"] = "";/*0:女*/
dr["birthday"] = "2000-05-25";
dr["price"] = "10.5656";
dr["percent"] = "0.56";
dr["money"] = "1000.56";
dr["enabled"] = "";/*是否启用:1:是*/
dr["remark"] = "说明";/*多余字段,不会数据导出*/
dtData.Rows.Add(dr);
/*设置导出格式*/
ColumnCollection colModel = new ColumnCollection();
colModel.Add("account", "账户");
colModel.Add("realname", "姓名");
colModel.Add("birthday", "出生日期", typeof(DateTime), "yyyy年MM月dd日");
colModel.Add("price", "保留两位",typeof(double), "#0.00");
colModel.Add("percent", "百分比", typeof(double), "0.00%");
colModel.Add(new ColumnModel() { Name = "money", Desc = "货币格式", Type = typeof(double), Format = "¥#,##0", TextAlign = ColumnAlign.Right });
colModel.Add("gender", "性别", new DataOptions("0:女,1:男".Split(',')));
colModel.Add(new ColumnModel[]
{
new ColumnModel() { Name = "enabled", Desc = "是否启用", Options = new DataOptions("0:否,1:是".Split(',')), TextAlign = ColumnAlign.Center }
}); Console.WriteLine("保存Excel...");
//调用导出方法
NPOIHelper.SaveToExcel(dtData,colModel, "用户信息.xls");
Console.WriteLine("Excel保存成功!");
}
catch (Exception ex)
{
Console.WriteLine("导出异常:" + ex.Message);
}
运行效果:

3、当我们使用普通的设置数据列格式,还不能满足要求时,此时,只能采用预定的Excel模板,使用数据填充方式,生成Excel文件?
var fileName = "根据模板生成Excel.xlsx";
try
{
var templateFile = "templateFile.xlsx";
System.IO.File.WriteAllBytes(templateFile, ConsoleApp.Properties.Resources.template); List<TemplateModel> list = new List<TemplateModel>();
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "账号" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "名称" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "2000-09-01" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "备注" }); list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "账号" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "名称" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "2000-09-01" });
list.Add(new TemplateModel() { RowIndex = , ColIndex = , Value = "备注" });
Console.WriteLine("根据模板生成Excel...");
NPOIHelper.SaveToExcel(templateFile,"sheet1", list, fileName);
Console.WriteLine("Excel保存成功!");
}
catch (Exception ex)
{
Console.WriteLine("生成异常:" + ex.Message);
}
定义的模板:

运行效果:

4、生成Excel文件方法介绍完毕,下面我们看下怎么读取Excel文件内容,我们以直接读取模板生成的Excel文件为例?
try
{ Console.WriteLine("读取Excel内容...");
DataTable dtData = NPOIHelper.ReadToTable(fileName);
StringBuilder fileContent = new StringBuilder();
//标题
foreach (DataColumn dc in dtData.Columns)
{
fileContent.Append(dc.ColumnName + "\t");
}
fileContent.AppendLine(); foreach (DataRow dr in dtData.Rows)
{
foreach (DataColumn dc in dtData.Columns)
{
if (dr[dc.ColumnName] == DBNull.Value)
fileContent.Append("\t");
else
fileContent.Append(dr[dc.ColumnName].ToString() + "\t");
}
fileContent.AppendLine();
}
Console.WriteLine("文件内容:");
Console.WriteLine(fileContent.ToString());
}
catch (Exception ex)
{
Console.WriteLine("生成异常:" + ex.Message);
}
运行效果:

至此 ShiQuan.Offices Excel文件读、写操作项目介绍分享完毕,欲听更多精彩,且听下回分解!
基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作的更多相关文章
- http服务 WCF、Web API、Web service、WCF REST之间的区别
http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...
- .net mvc web api Autofac依赖注入框架-戈多编程
今天自己搭了一套基于三层的依赖注入mvc web api 的依赖注入框架,在此总结下相关配置 1.设置应用程序的.net Framework版本为 4.5 2.通过Nuget 安装autofac包 I ...
- NET Web API和Web API Client Gen使Angular 2应用程序
使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效 本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ” ...
- Web API和Web Service
首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service.其次,两者都有利于信息的传输,但Web API ...
- Web APi之Web Host消息处理管道(六)
前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...
- ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面
本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建
本节将介绍如何进行业务项目搭建. 本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括: 创建实体项目 创建实体数据表映射 创建业务处理项目 创建业务Web项目 搭建 ...
随机推荐
- composer install 出现“Please provide a valid cache path”
本文背景:通过deployer部署PHP项目[deployer部署工具:https://deployer.org/] 问题:Php 的laravel框架中执行 composer install 后, ...
- excel 导出导入
/** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ...
- ObjectARX之Mac os开发
网上关于ObjectARX开发的相关介绍都基于Windows环境.Mac 环境的开发几乎没有,下面介绍Mac环境下ObjectARX的开发. AutoCAD ObjectARX开发必备条件: 1. 安 ...
- Unity整合TortoiseSVN
解决各种漏传 资源 / 代码 的疑难杂症. 因为Unity比较特殊的meta文件系统, 忘传漏传文件在后期可能导致重大引用丢失, 将SVN整合进项目势在必行. TortoiseSVN自带了命令行工具, ...
- ssh config 配置
一个打开新连接免密码的小技巧 Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p
- 201871010107-公海瑜《面向对象程序设计(java)》第6-7周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第6-7周学习总结 项目 内容 ...
- 201871010134-周英杰《面向对象程序设计(java)》第六到七周学习总结
201871010134-周英杰<面向对象程序设计(java)>第六到七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- ipc.Client: Retrying connect to server: .../10.0.0.27:10020. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
运行 时候爆出这个错 Exception in thread "main" java.io.IOException: java.net.ConnectException: Call ...
- JavaScript中的this—你不知道的JavaScript上卷读书笔记(三)
this是什么? this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件.this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式.当一个函数被调用时,会 ...
- [Taro] 解决 使用 Taro UI 小程序下 Iconfont 图标 不显示问题
Taro UI 配置 第三方 的 文档 配置即可解决 https://taro-ui.jd.com/#/docs/icon 解决问题: 之前 只有在H5下 才显示 Iconfont 图标 后来按照此文 ...