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文件读、写操作的更多相关文章

  1. http服务 WCF、Web API、Web service、WCF REST之间的区别

      http服务 WCF.Web API.Web service.WCF REST之间的区别 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web ...

  2. .net mvc web api Autofac依赖注入框架-戈多编程

    今天自己搭了一套基于三层的依赖注入mvc web api 的依赖注入框架,在此总结下相关配置 1.设置应用程序的.net Framework版本为 4.5 2.通过Nuget 安装autofac包 I ...

  3. 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 ” ...

  4. Web API和Web Service

    首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service.其次,两者都有利于信息的传输,但Web API ...

  5. Web APi之Web Host消息处理管道(六)

    前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...

  6. 返璞归真 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 上传文件, ...

  7. ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?

      ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的. MVC 路由注册通常是这样的: RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 Ro ...

  8. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面

    本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...

  9. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建

    本节将介绍如何进行业务项目搭建. 本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括: 创建实体项目 创建实体数据表映射 创建业务处理项目 创建业务Web项目 搭建 ...

随机推荐

  1. composer install 出现“Please provide a valid cache path”

    本文背景:通过deployer部署PHP项目[deployer部署工具:https://deployer.org/] 问题:Php 的laravel框架中执行 composer install 后, ...

  2. excel 导出导入

    /** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ...

  3. ObjectARX之Mac os开发

    网上关于ObjectARX开发的相关介绍都基于Windows环境.Mac 环境的开发几乎没有,下面介绍Mac环境下ObjectARX的开发. AutoCAD ObjectARX开发必备条件: 1. 安 ...

  4. Unity整合TortoiseSVN

    解决各种漏传 资源 / 代码 的疑难杂症. 因为Unity比较特殊的meta文件系统, 忘传漏传文件在后期可能导致重大引用丢失, 将SVN整合进项目势在必行. TortoiseSVN自带了命令行工具, ...

  5. ssh config 配置

    一个打开新连接免密码的小技巧 Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p

  6. 201871010107-公海瑜《面向对象程序设计(java)》第6-7周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第6-7周学习总结                项目                                内容 ...

  7. 201871010134-周英杰《面向对象程序设计(java)》第六到七周学习总结

    201871010134-周英杰<面向对象程序设计(java)>第六到七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. 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 ...

  9. JavaScript中的this—你不知道的JavaScript上卷读书笔记(三)

    this是什么? this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件.this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式.当一个函数被调用时,会 ...

  10. [Taro] 解决 使用 Taro UI 小程序下 Iconfont 图标 不显示问题

    Taro UI 配置 第三方 的 文档 配置即可解决 https://taro-ui.jd.com/#/docs/icon 解决问题: 之前 只有在H5下 才显示 Iconfont 图标 后来按照此文 ...