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. Vue+ElementUI 安装与应用

    1.初始化创建一个vue项目: 打开终端输入命令 vue init webpack vueui ---------------------------------- ? Project name my ...

  2. MVC的View本质和扩展

    一:网站启动流程简介 前面两节我们有介绍管道处理模型,然后下图总结出了mvc启动的整个流程 二:MVC返回的三种结果 从之前的流程已经反编译源码我们晓的,mvc最终都会返回一个结果,其中大概分为以下三 ...

  3. Odoo学习笔记一:odoo初探

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189194.html 一:Odoo架构 1:数据库服务器层:postgreSQL数据库服务器,用于存储所有 ...

  4. Linux上安装nginx

    环境:centos7   nginx1.16.1(源码安装) 一.下载nginx源码包 地址:http://nginx.org/en/download.html Mainline version(主线 ...

  5. 安装教程-Xshell 5 远程连接工具的安装

    Xshell 5 远程连接工具的安装 1.实验描述 物理机中安装 Xshell 5 ,为实现 Linux 等操作系统提供远程连接的环境. 2.实验环境 物理机系统:Windows 10 企业版 3.实 ...

  6. 上云测试,这些关键点你get 到没有

    导读,先从云化说起,再谈谈云化形态下,除了常规的功能测试,云化的测试,还需要有几个必须要get到的硬核指标,最后在分别详解这些关键点硬核指标是什么,和如何测试呢.这是个值得深思的问题,希望所有测试人都 ...

  7. 笔记3:MySQL数据库

    MySQL 1 基本概念 常见sql命令: show database 查看所有数据库 select now(); 显示当前时间 select version(); 显示当前版本 create dat ...

  8. nodejs接收post请求参数

    原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2 nodejs接收post请求参数1.1-浏览器发送post请求参数的方 ...

  9. 打开navicat 报错????

    好心好意打开数据库图形化管理工具居然报错了???? 那怎么办呢????? google一下吧...... 下载两个文件 就是这两个 放入你的图形化页面的目录中 就可以正常打开了 帅不帅??? 那怎么下 ...

  10. Codeforces Round #549 (Div. 2) F 数形结合 + 凸包(新坑)

    https://codeforces.com/contest/1143/problem/F 题意 有n条形如\(y=x^2+bx+c\)的抛物线,问有多少条抛物线上方没有其他抛物线的交点 题解 \(y ...