近期小编跟着团队一起开发ITOO3.0高校云平台项目,当中的收获是不言而喻滴,在项目中有个导入功能:导入学生信息;导入班级信息:导入教学楼信息等,在不知多少次的尝试之下,成功实现功能。

框架分析

详解一下

-第一步:在MVC框架的Client端新建目录

- 第二步:通过NPOI文件流(详细的专业名称不知道是叫啥。姑且称文件流)将保存在Client的Excel文件流传到WCF框架的Server端

- 第三步:在Server端中,新建目录保存Excel模板的xml文件



        Server端中的XML文件起到解析的作用,从而将Excel 中的数据插入Insert到数据表中


代码设计

上传Excel到Server

* Controller

private readonly IUploadFile upLoadService1 = ServiceFactory.GetUploadFileService();

#region ImportFlowBatch()+批量导入流程-徐露-2015年7月8日10:39:02

///

/// 批量导入流程

///

///

public ActionResult ImportFlowBatch()

{

#region 文件验证以及上传到指定目录 Client端

HttpPostedFileBase file = Request.Files[“files”];

string strFileName;

string strSavePath;

string ClientPath = AppDomain.CurrentDomain.BaseDirectory + “File\UpFile\”;

string strPaperId = “1”;

//这个是Client端的文件保存路径

        if (file == null || file.ContentLength <= 0)
{
ViewBag.error = "文件不能为空";
return View();
}
else
{
string strFilename = Path.GetFileName(file.FileName);
int intFilesize = file.ContentLength;//获取上传文件的大小单位为字节byte
string fileEx = System.IO.Path.GetExtension(strFilename);//获取上传文件的扩展名
string strNoFileName = System.IO.Path.GetFileNameWithoutExtension(strFilename);//获取无扩展名的文件名称
int Maxsize = 4000 * 1024;//定义上传文件的最大空间大小为4M
string FileType = ".xls,.xlsx";//定义上传文件的类型字符串 strFileName = strNoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx;
if (!FileType.Contains(fileEx))
{
ViewBag.error = "文件类型不正确。仅仅能导入xls和xlsx格式的文件";
//return View();
}
if (intFilesize >= Maxsize)
{
ViewBag.error = "上传文件超过4M。不能上传";
//return View();
}
strSavePath = Path.Combine(ClientPath, strFileName);
file.SaveAs(strSavePath);
}
#endregion #region 将Client端上传的文件 上传到Server端
FileUploadMessage myFileMessage = new FileUploadMessage();
string strDataFileName = file.FileName;
myFileMessage.FileName = strDataFileName;//文件名称
string CientPathName = ClientPath + strFileName;
using (FileStream fs = System.IO.File.OpenRead(CientPathName))
{
myFileMessage.FileData = fs;
try
{
upLoadService1.UploadFileMethod(myFileMessage);
}
catch { }
//关闭流
fs.Close();
}
#endregion
string[] HeadName = { "流程ID", "流程名称", "优先级", "是否启用(启用1。未启用0)", "流程Url", "时间戳", "是否删除" }; //调用执行 写数据库
if(upLoadService1.ServiceReadFile (strDataFileName ,strPaperId )==null) { return RedirectToAction("Index","ImportStudent");
}
else
{
DataTable table = upLoadService1 .ServiceReadFile (strDataFileName ,strPaperId )[0];
return File (Export .ExportManager .ExportExcel (table,HeadName ),"application/vnd.ms-excel", "流程导入错误列表" + ".xls"); }
}
#endregion

*在Service中读取Excel文件,写入数据库

须要加的三个:IUploadFile(接口)、UploadFile(实现类)、以及ServiceFactory(工厂)

        篇幅限制,详细代码不再粘贴。小编会详细上传Demo,另行下载

*XML配置

        针对每个导入的Excel都须要一个对应的XML配置文件,以便底层方法可以解析获取

        XML应统一放置在某一路径下,详细路径配置例如以下:

<appConfig>下加入节点
<add key="ExcelImportXMLPath" value="Models/ImportConfigXML"/>
即将配置文件存放路径放在了Service层的Models/ImportConfigXML目录下。 命名:各系统可依据详细情况详细命名,调用方法时须要传入XML文件名称称

详细XML配置可參考:

<?xml version="1.0" encoding="utf-8" ?>
<Excel name="导入流程模板">
<Sheet name="流程" table="FreshFlowEntity" primaryKey="FlowID" pkType="guid"> <Column name="流程名称" field="Name">
<DataType>string</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="优先级" field="Sort" isNecessary="true">
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="是否启用(启用1,未启用0)" field="IsUse" isVerifyRepeat="false" >
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="流程Url" field="Url" isVerifyRepeat="false">
<DataType>string</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="时间戳" field="TimeSpan" isNecessary="false" isVerifyRepeat="false" >
<DataType>DateTime</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="是否删除" field="IsDelete" isVerifyRepeat="false">
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
</Sheet>
</Excel>

以上就是做导入的基本流程,那是不是完善敲出代码就能正常执行呢,请见小编下文分析 link text

Excel数据导入___你hold住么(一)的更多相关文章

  1. kettle将Excel数据导入oracle

    导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...

  2. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  3. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

  4. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  5. 如何把excel数据导入数据库

    这里介绍2种把excel数据导入oracle数据库的方法. 1. 在excel中生成sql语句. 1)在数据列的右侧,第一行的任何位置输入="insert into table(xx,yyy ...

  6. excel 数据导入数据表

    环境: Windows server 2012  rm sql server  2012 excel 数据导入数据表 INSERT INTO [dbo].[AdminUser] SELECT [Adm ...

  7. C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符

    问题描述:在使用oledb方式将excel数据导入到datagridview中,在datagridview单元格中的数据没有显示全,似乎只截取了数据源中的一段 解决方案:1.关于该问题,微软官方答案: ...

  8. excel数据导入到sqlserver中---------工作笔记

    调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...

  9. c#将Excel数据导入到数据库的实现代码(OleDb)

    sing System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web ...

随机推荐

  1. C++表达式求值(利用数据结构栈)

    唉,刚刚用C++又又一次写了一个较完好的表达式求值程序,最后精简后程序还不到100行.这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行并且功能还不是非常齐全(当时还不能计算有括号的 ...

  2. EntboostChat 0.9(越狱版)公布,iOS免费企业IM

    恩布互联公布IOS免费企业IM 0.9越狱预览版本号,支持全部iPhone4/5手机(6未上真机測试),iPad平板,主要功能包含单聊.群聊,企业组织结构,文本.表情.图片.文件.截图.离线消息等: ...

  3. iframe是否缓存页面探究

    近期手里有个项目须要用iframe来调用每天都会变化的页面,后来想到iframe会不会缓存页面呢.于是写了个demo论证了下,结果例如以下: iframe的src假设是静态页面,就有可能会缓存.由于静 ...

  4. 王立平--Object-c

    object-c通常写作objective-c或者obj-c,是依据C语言所衍生出来的语言.继承了C语言的特性,是扩充C的面向对象编程语言. 它主要使用于MacOSX和GNUstep这两个使用Open ...

  5. 使用Handler在子线程中更新UI

    Android规定仅仅能在主线程中更新UI.假设在子线程中更新UI 的话会提演示样例如以下错误:Only the original thread that created a view hierach ...

  6. QT 随笔

     1. 设置窗体属性,无边框 | 置顶 setWindowFlags(Qt::FramelessWindowHint); setWindowFlags(Qt::FramelessWindowHin ...

  7. Codeves 2800 送外卖 状态压缩DP+floyd

    送外卖     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后 ...

  8. ActiveX插件

    C#制作ActiveX插件 首先新建项目--->类库,取名:ActiveXDemo 右键项目属性:应用属性==>程序集信息=>使程序集Com可见, 生成==>输出==>为 ...

  9. ros中文术语表及消息类型表

    前言:整理一些ros常用表格,包括中文术语对照表. 一.中文术语表 二.消息类型表 -END-

  10. POJ 2536 匈牙利算法

    思路:最大匹配 (很裸) // by SiriusRen #include <cmath> #include <cstdio> #include <cstring> ...