要求

环境信息:WIN2008SERVER  开发工具:VS2015 开发语言:C#

要求:

1.点击同步数据后接口获取数据展示页面同时过滤无效数据并写入数据库,数据可导出Excel并支持分类导出

2.Excel导入确认数据,调用服务处理数据后写入数据库,并支持分类导出

这两天搞了一个小功能,其他的不说了针对Excel导入导出做一个小总结

导出文件

这里的文件导出是底层写好的,个人理解有限而且毕竟属于公司就不贴具体代码了,简单说一下思路

首先是建立导出Excel管理类,用于管理Excel文件导出的模板 样式 每行的计算方式等等,当然需要在项目中添加该管理类的配置文件去匹配对应模板;

1.读取对应配置文件,获取配置文件模板信息 至于模板如何配置就不说啦xml文件操作园子里面很多篇关于这个文章

2.根据XML文件定义模板id遍历查询到该模板,这里有缓存机制为了可能处于两方面考虑,1,防止频繁读取遍历文件从而减少性能缺失 2.弱误删配置文件程序不会立即停止工作,监控警报会首先暴露这个问题

3.最后就是读取指定id下面的具体导出设置,比如标题头,上限行数,给定简单默认值等等细节处理,同时也含有缓存机制

配置文件模板管理大致上有以上几种功能,下面就是具体数据库导出,还是那样不能提供具体代码但是思路可以说一说

导出管理类需要承接很多任务,入数据库查询,数据过滤,导出格式控制,导出日志设置,导出预警等等

其实这并不是一个简单的excel导出工具而是一个小型的导出平台,承接一个导出实体去设置导出的各项数据,但是还是需要开发者根据自己的需求去填写相应的模板,导出格式,数据验证,数据查询方式实体承接了导出方式

(xls或者csv等等很多格式)使用者只需要写入具体导出DB信息,以及导出表名称和配置文件以及数据验证就可以轻松使用它完成数据导出操作

并且,针对文件导出操作尤其是数据库最好由底层实现通过response流发送到页面执行下载,数据相对规整一些如果在页面直接执行导出页面有些太沉重了 毕竟这个是可以实现的

导入文件

 导入文件首先需要上传,文件上传至服务器指定地址之后再去针对服务器文件解析,其实原理很简单,就是通过解析上传的文件通过OLDB方式获取解析后的文件DataSet然后在写入数据库,下面是一个上传文件格式验证

具体的读取方法就很简单了 网上一搜一大把,不过要区分一下版本而且不同版本的excel文件行数上线不同下面贴一个我常用的excel到dataset方法

 public static ReturnValue ReadExcelToDataSet(string xlsFullFileName, bool isHDR, bool isIMEX, int limitSheetCount, bool isOnlyVerify)
{
ReturnValue returnValue = new ReturnValue();
string fileExt = UploadFileUtils.GetFileExt(xlsFullFileName);
if (string.IsNullOrEmpty(fileExt) || !StringUtils.IsInLimitStr("xls,xlsx", fileExt))
{
returnValue.HasError = true;
returnValue.ReturnCode = ;
returnValue.Message = "无效excel文件后缀";
return returnValue;
}
if (!File.Exists(xlsFullFileName))
{
returnValue.HasError = true;
returnValue.ReturnCode = ;
returnValue.Message = "文件不存在";
return returnValue;
}
StringBuilder stringBuilder = new StringBuilder();
string str;
if ("xlsx".Equals(fileExt, StringComparison.CurrentCultureIgnoreCase))
{
stringBuilder.Append("Provider=Microsoft.ACE.OLEDB.12.0");
str = "Excel 12.0;";
}
else
{
stringBuilder.Append("Provider=Microsoft.Jet.OLEDB.4.0");
str = "Excel 8.0;";
}
stringBuilder.Append(";Data Source=" + xlsFullFileName);
stringBuilder.Append(";Extended Properties=\"" + str);
if (isHDR)
{
stringBuilder.Append(";HDR=Yes");
}
if (isIMEX)
{
stringBuilder.Append(";IMEX=1");
}
stringBuilder.Append("\"");
ExcelUtils.log.Debug(stringBuilder.ToString());
OleDbConnection oleDbConnection = new OleDbConnection(stringBuilder.ToString());
try
{
oleDbConnection.Open();
DataTable oleDbSchemaTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]
{
null,
null,
null,
"Table"
});
if (oleDbSchemaTable == null || oleDbSchemaTable.Rows.Count == )
{
returnValue.HasError = true;
returnValue.ReturnCode = ;
returnValue.Message = "读取不到sheet的信息";
ReturnValue result = returnValue;
return result;
}
if (isOnlyVerify)
{
returnValue.HasError = false;
returnValue.Message = "读取sheet信息正确";
returnValue.PutValue("dtSheet", oleDbSchemaTable);
ReturnValue result = returnValue;
return result;
}
int num = oleDbSchemaTable.Rows.Count;
if (limitSheetCount > && limitSheetCount < oleDbSchemaTable.Rows.Count)
{
num = limitSheetCount;
}
string[] array = new string[num];
for (int i = ; i < num; i++)
{
array[i] = oleDbSchemaTable.Rows[i]["TABLE_NAME"].ToString();
}
DataSet dataSet = new DataSet();
for (int j = ; j < num; j++)
{
string text = "select * from [" + array[j] + "]";
ExcelUtils.log.Debug(text);
OleDbCommand selectCommand = new OleDbCommand(text, oleDbConnection);
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(selectCommand);
DataTable dataTable = new DataTable(array[j]);
oleDbDataAdapter.Fill(dataTable);
dataSet.Tables.Add(dataTable);
}
returnValue.HasError = false;
returnValue.PutValue("dtSheet", oleDbSchemaTable);
returnValue.PutValue("arrTableName", array);
returnValue.ReturnObject = dataSet;
returnValue.Message = "读取成功";
}
catch (Exception ex)
{
returnValue.HasError = true;
returnValue.ReturnCode = -;
returnValue.ReturnException = ex;
returnValue.Message = ex.Message;
ExcelUtils.log.WarnFormat("ReadExcelToDataSet sbConn={0} 出错,原因:{1}", stringBuilder.ToString(), ex.Message);
}
finally
{
oleDbConnection.Close();
}
return returnValue;
}

哦对 注意一下,如果用导出方法导出xls文件再用导入方法导入该文件会报错的哟,我是默认保存.csv 实际就为了确定文件是否被使用过,所以当你的excel文件能导出单相同文件却导入不了 请尝试一下重新保存一下.xls格式 在进行导入

C#实现上传/下载Excel文档的更多相关文章

  1. 配置允许匿名用户登录访问vsftpd服务,进行文档的上传下载、文档的新建删除等操作

    centos7环境下 临时关闭防火墙 #systemctl stop firewalld 临时关闭selinux #setenforce 0 安装ftp服务 #yum install vsftpd - ...

  2. JAVA:借用OpenOffice将上传的Word文档转换成Html格式

    为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl ...

  3. Java上传下载excel、解析Excel、生成Excel

    在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...

  4. ASP.NET MVC下载excel文档

    问题来自论坛: 很早以前,学习做asp.net练习时,就是分享过<ASP.NET MVC应用程序实现下载功能>http://www.cnblogs.com/insus/p/3615714. ...

  5. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

    近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...

  6. 使用phpexcel上传下载excel文件

    1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...

  7. Oracle PL/SQL Developer 上传下载Excel

    接到需求,Oracle数据库对Excel数据进行上传和下载,百度后没有很全的方案,整理搜到的资料,以备不时之需. 一.下载Oracle数据到Excel中. 下载数据到Excel在MSSql中很简单,直 ...

  8. .net core webapi 文件上传在 Swagger 文档中的有好提示处理

    前提: 需要nuget   Swashbuckle.AspNetCore 我暂时用的是  4.01 最新版本: 描述:解决 .net core webapi 上传文件使用的是 IFormFile,在S ...

  9. SharePoint2013 上传文件到文档库

    SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current. ...

随机推荐

  1. 一步一步手写GIS开源项目-(2)地图平移缩放实现

    系列文章目录 一步一步手写GIS开源项目-(1)500行代码实现基础GIS展示功能 一步一步手写GIS开源项目-(2)地图平移缩放实现 项目github地址:https://github.com/Hu ...

  2. Linux系统中五款好用的日志分析工具

    监控网络活动是一项繁琐的工作,但有充分的理由这样做.例如,它允许你查找和调查工作站和连接到网络的设备及服务器上的可疑登录,同时确定管理员滥用了什么.你还可以跟踪软件安装和数据传输,以实时识别潜在问题, ...

  3. XnViewer管理浏览照片、图片

    有时候拍完照片想要浏览照片.浏览照片的时候想做一些标记,这个时候就需要使用照片管理器: 之前一直使用谷歌的picasa(不更新了),adobe也有个管理器(比较大):这里主要推荐一个: https:/ ...

  4. vue环境搭建及创建项目

    安装node环境:node环境下载地址:https://nodejs.org/zh-cn/download/,可根据对应的操作系统版本下载安装 安装完成后查看对应的node和npm版本,如没有出现对应 ...

  5. MySQL Backup--Xtrabackup备份参数

    Xtrabackup备份参数 参数选项: innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS] [--compress-ch ...

  6. TCP、UDP、HTTP、HTTPS之间的区别

    网络由下往上分为: 物理层--- 数据链路层--- 网络层 -- IP协议 传输层 -- TCP协议 会话层 -- 表示层和应用层 -- HTTP协议 1.TCP/IP连接 TCP传输控制协议,是一种 ...

  7. Linux的环境配置文件----.bashrc文件(转)

    Linux的环境配置文件----.bashrc文件   .bashrc文件主要保存个人的一些个性化设置,如命令别名.路径等.也即在同一个服务器上,只对某个用户的个性化设置相关.它是一个隐藏文件,需要使 ...

  8. python之变量的数据类型(2)list 、 tuple 及range用法

    一.变量的数据类型(2) 1.list 类型 列表的特点: 列表是一个可变的数据类型 列表由[]来表示, 每一项元素使用逗号隔开. 列表什么都能装. 能装对象的对象. 列表可以装大量的数据 列表的索引 ...

  9. angularcli 第一篇(新建、组件、模块)

    1.新建并启动项目: 1.安装: npminstall -g @angular/cli 2.新建: ng new mytest 3.进入项目:cd mytest 4.启动: ng serve 5.打开 ...

  10. [nginx] nginx源码分析--监控检测模块

    描述 HTTP监控检查,是nginx官网推荐使用的第三方模块 https://www.nginx.com/resources/wiki/modules/healthcheck/ https://git ...