要求

环境信息: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 = 1;
returnValue.Message = "无效excel文件后缀";
return returnValue;
}
if (!File.Exists(xlsFullFileName))
{
returnValue.HasError = true;
returnValue.ReturnCode = 2;
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 == 0)
{
returnValue.HasError = true;
returnValue.ReturnCode = 3;
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 > 0 && limitSheetCount < oleDbSchemaTable.Rows.Count)
{
num = limitSheetCount;
}
string[] array = new string[num];
for (int i = 0; i < num; i++)
{
array[i] = oleDbSchemaTable.Rows[i]["TABLE_NAME"].ToString();
}
DataSet dataSet = new DataSet();
for (int j = 0; 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 = -100;
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#
# 实现文件上传
# 文件下载
# C#实现的文件上传下载工具类完整实例【上传文件自动命名】
# C# 文件上传下载(Excel导入
# 多线程下载)功能的实现代码
# C#实现文件上传及文件下载功能实例代码
# C#文件上传与下载的实现方法
# C#实现文件上传与下载功能实例
# c# 实现文件上传下载功能的实例代码
# 配置文件
# 管理类
# 遍历
# 很简单
# 上传
# 自己的
# 行数
# 是一个
# 我是
# 尤其是
# 就不
# 可以说
# 其他的
# 上有
# 这个问题
# 不存在
# 做一个
# 几种
# 只需要
# 再去
相关文章:
如何制作算命网站,怎么注册算命网站?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何在IIS7中新建站点?详细步骤解析
公司网站制作需要多少钱,找人做公司网站需要多少钱?
公司网站制作价格怎么算,公司办个官网需要多少钱?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何确保FTP站点访问权限与数据传输安全?
C#怎么使用委托和事件 C# delegate与event编程方法
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何用wdcp快速搭建高效网站?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
行程制作网站有哪些,第三方机票电子行程单怎么开?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
企业微网站怎么做,公司网站和公众号有什么区别?
如何快速搭建自助建站会员专属系统?
如何快速上传自定义模板至建站之星?
如何通过wdcp面板快速创建网站?
如何在Windows虚拟主机上快速搭建网站?
建站为何优先选择香港服务器?
如何快速建站并高效导出源代码?
制作网站公司那家好,网络公司是做什么的?
大同网页,大同瑞慈医院官网?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
清除minerd进程的简单方法
如何选择域名并搭建高效网站?
如何访问已购建站主机并解决登录问题?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星备案流程有哪些注意事项?
北京的网站制作公司有哪些,哪个视频网站最好?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何通过WDCP绑定主域名及创建子域名站点?
,怎么用自己头像做动态表情包?
javascript中对象的定义、使用以及对象和原型链操作小结
如何快速登录WAP自助建站平台?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
建站之星后台管理:高效配置与模板优化提升用户体验
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
学校免费自助建站系统:智能生成+拖拽设计+多端适配
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
定制建站如何定义?其核心优势是什么?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何在VPS电脑上快速搭建网站?
如何选择美橙互联多站合一建站方案?
建站之星微信建站一键生成小程序+多端营销系统
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
*请认真填写需求信息,我们会在24小时内与您取得联系。