基于MVC模式的Excel数据迁移框架研究与实现

合集下载

ASP.NETMVC导入Excel文件(完整版)

ASP.NETMVC导入Excel文件(完整版)

MVC导⼊Excel⽂件(完整版)View视图部分:<form method="post" enctype="multipart/form-data" action="/Position/ImportExcel" class="form-group"><input name="file" type="file" id="file" /><button id="btn_import" type="submit" class="btn btn-info"><span class="glyphicon glyphicon-pencil"></span>导⼊</button></form>控制器部分:public ActionResult ImportExcel(){//获取上传的Excel⽂件HttpPostedFileBase File = Request.Files["file"];string message = "";if (File.ContentLength > 0){//GetExtension:返回指定路径的⽂件的扩展名var Isxls = System.IO.Path.GetExtension(File.FileName).ToString().ToLower();if (Isxls != ".xls" && Isxls != ".xlsx"){message = "<script>alert('请上传Excel⽂件'),window.location.href='/Position/Index'</script>";}var FileName = File.FileName;//获取⽂件夹名称var path = Server.MapPath("~/FileExcel/" + FileName);File.SaveAs(path);//将⽂件保存到服务器PositionBLL bll = new PositionBLL();var list = bll.FileUpLoad(path);if (list.Count > 0){int num = bll.LoadFile(list);if (num > 0){message = "<script>alert('数据导⼊成功'),window.location.href='/Position/Index'</script>";}}else{message = "<script>alert('导⼊的数据不能为空'),window.location.href='/Position/Index'</script>";}}else{message = "<script>alert('请选择上传的⽂件'),window.location.href='/Position/Index'</script>";}return Content(message);}Model部分:public class PositionModel{string PositionName;string Qualification;string Remark;public string PositionName1 { get => PositionName; set => PositionName = value; }public string Qualification1 { get => Qualification; set => Qualification = value; }public string Remark1 { get => Remark; set => Remark = value; }}PositionBLL部分:public class PositionBLL{//private const string ConnString2003 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel8.0';HDR='Yes'";//链接打开excel的字符串private const string ConnString2003 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0';"; public List<PositionModel> FileUpLoad(string filePath){DataSet ds = new DataSet();List<PositionModel> list = new List<PositionModel>();string strSQL = string.Format(ConnString2003, filePath);//OleDbConnection:表⽰与数据源的开放链接OleDbConnection conn = new OleDbConnection(strSQL);try{//判断连接的状态if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed){conn.Open();}DataTable tableName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//获取Excel的第⼀个Sheet名称var sheetName = tableName.Rows[0]["TABLE_NAME"].ToString().Trim();string SQL = "select * from [" + sheetName + "]";OleDbDataAdapter sa = new OleDbDataAdapter(SQL, conn);sa.Fill(ds);foreach (DataRow dr in ds.Tables[0].Rows){PositionModel model = new PositionModel();model.PositionName1 = dr["职位名称"].ToString();model.Qualification1 = dr["任职资格"].ToString();model.Remark1 = dr["职位描述"].ToString();list.Add(model);}}catch (Exception ex){Console.WriteLine("错误信息:PositionBLL+FileUpLoad⽅法" + ex);}return list;}//将数据循环遍历到数据库中PositionDAL dal = new PositionDAL();public int LoadFile(List<PositionModel> list){var num = 0;foreach (var item in list){PositionModel model = new PositionModel();model.PositionName1 = item.PositionName1;model.Qualification1 = item.Qualification1;model.Remark1 = item.Remark1;num = dal.Add(model);}return num;}PositionDAL部分:using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace ExcleImport.Models{public class PositionDAL{DBhelper dBhelper = new DBhelper();public int Add(PositionModel model) {string sql = string.Format("insert into userInfo (position,grade,remark)values('{0}','{1}','{2}')", model.PositionName1, model.Qualification1, model.Remark1);return dBhelper.ExceDml(sql);}}}DBhelper部分://创建链接数据库的字符串string dbStr = "Data Source=.;Initial Catalog=sales;Integrated Security=True";public int ExceDml(string sql){try{int res = 0;//连接数据库using (SqlConnection conn = new SqlConnection(dbStr)){//打开连接数据库conn.Open();//执⾏sqlSqlCommand comm = new SqlCommand(sql, conn);res = comm.ExecuteNonQuery();}return res;}catch (Exception ex){Console.WriteLine("错误信息:DBhelper+ExceDml⽅法" + ex);throw ex;}}数据库表:create table userInfo(id int identity(1,1)not null,position varchar(50)not null,grade varchar(50)not null,remark varchar(100)not null)。

Excel数据导入和导出技巧利用外部数据连接和数据表实现数据集成

Excel数据导入和导出技巧利用外部数据连接和数据表实现数据集成

Excel数据导入和导出技巧利用外部数据连接和数据表实现数据集成在日常工作和生活中,我们常常需要处理大量的数据,而Excel作为一款功能强大的电子表格软件,提供了丰富的数据导入和导出技巧,能够帮助我们高效地进行数据集成和分析。

本文将介绍如何利用外部数据连接和数据表来实现Excel数据导入和导出的技巧,帮助读者更好地利用Excel进行数据处理。

一、外部数据连接外部数据连接是指将Excel与其他数据源进行关联,通过连接来获取和更新外部数据。

Excel提供了多种外部数据连接的方式,包括从文本文件导入、从数据库导入、从Web导入等。

下面将介绍两种常用的外部数据连接技巧。

1. 从文本文件导入数据在Excel中,我们可以通过“数据”选项卡中的“从文本”命令来导入文本文件中的数据。

具体操作步骤如下:(1)点击“数据”选项卡,在“获取外部数据”组中选择“从文本”。

(2)选择待导入的文本文件,并点击“打开”按钮。

(3)根据导入文本文件的格式,按照向导完成导入设置,包括分隔符、数据格式等。

(4)点击“确定”按钮即可完成数据导入。

2. 从数据库导入数据在Excel中,我们还可以通过“数据”选项卡中的“从其他来源”命令来导入数据库中的数据。

具体操作步骤如下:(1)点击“数据”选项卡,在“获取外部数据”组中选择“从其他来源”。

(2)选择要连接的数据库类型,如SQL Server、Access等,并点击“下一步”按钮。

(3)按照向导完成数据库连接设置,包括服务器地址、数据库名称等。

(4)选择要导入的数据表或查询,并点击“下一步”按钮。

(5)根据需要选择导入数据的方式和设置,如导入数据到现有工作表、导入数据到新的工作簿等。

(6)点击“完成”按钮即可完成数据导入。

二、数据表的使用数据表是Excel中的一种特殊对象,它能够快速地对数据进行排序、筛选、汇总等操作。

通过利用数据表,我们可以更加方便地进行数据集成和分析。

下面将介绍两种常用的数据表技巧。

前几天一个MVC3.0项目做了一个Excel导出功能,今天来记录一下. 采取了最简单的方法.

前几天一个MVC3.0项目做了一个Excel导出功能,今天来记录一下. 采取了最简单的方法.

前几天一个MVC3.0项目做了一个Excel导出功能,今天来记录一下. 采取了最简单的方法.用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件.第一种:使用FileContentResult//// 摘要:// 通过使用文件内容,内容类型,文件名称创建一个FileContentResult对象//// 参数:// fileContents:// 响应的二进制文件内容//// contentType:// 内容类型(MIME类型)//// fileDownloadName:// 显示在浏览器下载窗口的文件名称//// 返回结果:// 文件内容对象.protected internal virtual FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName);需要将文件内容转化成字节数组byte[]byte[] fileContents = Encoding.Default.GetBytes(sbHtml.ToString());第二种:使用FileStreamResult// 其他参数描述同FileContentResult// 参数:// fileStream:// 响应的流//// 返回结果:// 文件流对象.protected internal virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName);需要将文件内容转化成流varfileStream = new MemoryStream(fileContents);第三种:使用FilePathResult// 其他参数描述同FileContentResult// 参数:// fileName:// 响应的文件路径//// 返回结果:// 文件流对象.protected internal virtual FilePathResult File(string fileName, string contentType, string fileDownloadName);服务器上首先必须要有这个Excel文件,然会通过Server.MapPath获取路径返回.具体详情请看代码.1 public FileResultExportExcel()2 {3 varsbHtml = new StringBuilder();4 sbHtml.Append("<table border='1' cellspacing='0' cellpadding='0'>");5 sbHtml.Append("<tr>");6 varlstTitle = new List<string> { "编号", "姓名", "年龄", "创建时间" };7 foreach (var item in lstTitle)8 {9 sbHtml.AppendFormat("<td style='font-size:14px;text-align:center;background-color: #DCE0E2; font-weight:bold;' height='25'>{0}</td>", item);10 }11 sbHtml.Append("</tr>");1213 for (inti = 0; i< 1000; i++)14 {15 sbHtml.Append("<tr>");16 sbHtml.AppendFormat("<td style='font-size:12px;height:20px;'>{0}</td>", i);17 sbHtml.AppendFormat("<td style='font-size:12px;height:20px;'>屌丝{0}号</td>", i);18 sbHtml.AppendFormat("<td style='font-size:12px;height:20px;'>{0}</td>", new Random().Next(20, 30) + i);19 sbHtml.AppendFormat("<td style='font-size:12px;height:20px;'>{0}</td>", DateTime.Now);20 sbHtml.Append("</tr>");21 }22 sbHtml.Append("</table>");2324 //第一种:使用FileContentResult25 byte[] fileContents =Encoding.Default.GetBytes(sbHtml.ToString());26 return File(fileContents, "application/ms-excel", "fileContents.xls");2728 //第二种:使用FileStreamResult29 varfileStream = new MemoryStream(fileContents);30 return File(fileStream, "application/ms-excel", "fileStream.xls");3132 //第三种:使用FilePathResult33 //服务器上首先必须要有这个Excel文件,然会通过Server.MapPath获取路径返回.34 varfileName = Server.MapPath("~/Files/fileName.xls");35 return File(fileName, "application/ms-excel", "fileName.xls");36 }。

利用Excel进行数据迁移和数据转换

利用Excel进行数据迁移和数据转换

利用Excel进行数据迁移和数据转换在日常工作和生活中,我们经常需要进行数据的迁移和转换。

而使用Excel软件,可以帮助我们高效、准确地完成这些任务。

本文将介绍如何利用Excel进行数据迁移和数据转换,以及一些常用的技巧和注意事项。

一、利用Excel进行数据迁移数据迁移是将数据从一个地方转移到另一个地方的过程。

在Excel 中,我们可以通过以下步骤来进行数据迁移:1. 打开Excel软件,并新建一个工作表。

2. 将原始数据复制到工作表中的合适位置。

可以使用快捷键Ctrl+C复制数据,然后在Excel中使用Ctrl+V粘贴数据。

3. 如果需要对数据进行整理和清洗,可以利用Excel的强大功能来实现。

例如,可以使用筛选、排序、条件格式等功能对数据进行处理,使其更加规范和易读。

4. 如果需要在迁移的过程中对数据进行转换,可以使用Excel的公式功能。

例如,可以使用VLOOKUP函数实现数据匹配和替换,使用IF函数实现条件判断和计算等。

二、利用Excel进行数据转换数据转换是将数据的格式或结构进行调整,以满足特定的需求。

在Excel中,我们可以通过以下步骤来进行数据转换:1. 打开Excel软件,并导入需要进行数据转换的文件。

可以使用Excel的打开功能或者拖拽文件到Excel窗口来实现。

2. 在Excel中选择需要转换的数据,可以使用鼠标拖动选中数据范围,或者使用快捷键Ctrl+A选择全部数据。

3. 在Excel的数据选项卡中,可以找到一些常用的数据转换功能。

例如,可以使用文本到列功能将一个单元格中的文本分割到多个单元格中,使用合并单元格功能将多个单元格合并为一个单元格,使用转置功能将行列进行互换等。

4. 如果需要进行更加复杂的数据转换,可以使用Excel的宏编程功能。

通过录制宏和编写宏代码,可以实现自定义的数据转换流程。

三、常用技巧和注意事项在利用Excel进行数据迁移和数据转换的过程中,有一些常用的技巧和注意事项:1. 确保数据的准确性:在进行数据迁移和数据转换之前,需要对原始数据进行审查和清理,确保数据的准确性和完整性。

Excel数据导入导出技巧实现数据的快速迁移

Excel数据导入导出技巧实现数据的快速迁移

Excel数据导入导出技巧实现数据的快速迁移在Excel数据处理中,数据的导入和导出是非常常见且重要的操作。

合理运用数据导入导出技巧不仅可以提升工作效率,还可以实现数据的快速迁移。

本文将介绍几种Excel数据导入导出技巧,帮您快速掌握这些技巧。

第一、Excel数据导入技巧Excel提供了多种方式来导入外部数据,下面将介绍两种常用的数据导入方法。

1. 从文本文件导入数据在Excel中,可以通过“数据”选项卡上的“从文本”按钮来导入文本文件中的数据。

点击“从文本”按钮后,选择要导入的文本文件并按照向导进行设置,即可将文本文件中的数据导入到Excel中。

这种方法适用于以文本形式保存数据的情况,比如以逗号、制表符或其他特定字符分隔的数据。

导入后,Excel会根据分隔符将数据自动划分到不同的列中,便于后续的数据处理和分析。

2. 从数据库导入数据如果您的数据存储在数据库中,可以通过Excel与数据库进行连接来实现数据的快速导入。

在Excel的“数据”选项卡上选择“从其他来源”中的“从SQL Server”或“从Access”等选项,根据向导的提示配置数据库连接参数和查询条件,即可将数据库中的数据导入到Excel中。

这种方法适用于需要频繁从数据库中导入数据并进行处理的情况,通过与数据库的连接,可以实现数据的即时更新和实时查询。

第二、Excel数据导出技巧除了数据导入,Excel也提供了多种方式来导出数据,下面将介绍两种常用的数据导出方法。

1. 将Excel数据导出为文本文件在Excel中,可以选择需要导出的数据范围,然后点击“文件”选项卡的“另存为”按钮,在保存类型中选择“文本(制表符分隔)”或其他类型,即可将Excel数据导出为文本文件。

这种方法适用于将Excel中的数据导出到其他系统或软件进行进一步处理的情况。

导出的文本文件可以以制表符或其他字符作为分隔符,方便其他系统或软件进行数据导入和处理。

2. 将Excel数据导出为CSV文件CSV(逗号分隔值)文件是一种常见的数据导出格式,可以在Excel中将数据导出为CSV文件。

Excel数据导入与导出快速实现数据迁移和共享

Excel数据导入与导出快速实现数据迁移和共享

Excel数据导入与导出快速实现数据迁移和共享在当今信息化的社会中,数据处理与管理已经成为各个领域的重要工作。

Excel作为一款功能强大、易于操作的电子表格软件,被广泛应用于数据处理、分析和可视化展示等方面。

其中,Excel的数据导入与导出功能更是实现数据迁移和共享的重要手段。

本文将介绍如何快速实现Excel数据导入与导出,以及其在数据迁移和共享方面的作用。

一、Excel数据导入Excel提供了多种导入数据的方式,可以根据不同需求选择适合的方法。

1. 手动输入导入:对于少量数据或者需要即时录入的情况,可以直接在Excel中手动输入数据。

通过在单元格中输入数据,或者复制粘贴数据到单元格中,即可完成数据导入。

2. 使用文本导入向导:如果需要导入大量的文本数据,可以使用Excel的"文本导入向导"功能。

首先,将文本数据保存为.txt、.csv等格式;然后,通过"数据"选项卡的"来自文本"命令打开"文本导入向导";最后,按照向导提示进行设置和导入数据。

3. 使用外部数据源导入:Excel还支持从外部数据源中导入数据,例如数据库、Web页面、XML文件等。

通过"数据"选项卡中的"获取外部数据"命令,可以选择合适的数据源,并按照提示进行设置和导入数据。

二、Excel数据导出Excel提供了多种导出数据的方式,可以将数据保存为不同格式的文件,方便数据的共享和传输。

1. 保存为本地文件:通过"文件"选项卡的"另存为"命令,可以将Excel表格保存为本地文件。

可以选择保存为Excel工作簿、CSV文件、PDF文件等不同格式,根据需要选择合适的格式进行保存。

2. 导出为数据库文件:对于需要将Excel数据导入到数据库中的情况,可以将Excel数据导出为数据库文件。

后端Springboot前端VUE实现Excel导入功能

后端Springboot前端VUE实现Excel导入功能

后端Springboot前端VUE实现Excel导⼊功能功能描述:做的是物联⽹的项⽬,Excel导⼊实现的功能是将Excel中的数据批量的导⼊AEP系统,再导⼊我们系统中。

⽬前已经完成该功能,前端还会添加进度条优化。

对于导⼊导出功能,推荐这个Git:Excel模板:前端向后端传递的参数:前端代码:<Uploadname="wlwDeviceFile"ref="upload":action="pathUrl":on-success="handleSuccess":on-error="handleError":format="['xls','xlsx']":max-size="5120":on-format-error="handleFormatError":on-exceeded-size="handleMaxSize":before-upload="handleBeforeUpload":data="extraData":disabled="!isLock"><Button type="primary">选择⽂件</Button></Upload>data() {return {isLock: true,mesg: false,extraData: {aepProductId: localStorage.productId,productId: localStorage.productItemId,projectId: localStorage.currentProjectId},mes: "",cod: 0,// currentShow: false,pathUrl: Util.baseUrl + "/api/excel/import",wlwDevice: {fileName: "", //⽤于显⽰上传⽂件名id: localStorage.productId,autoSubscribe: 0},ruleValidate: {fileName: [{required: true,message: "请选择⽂件",trigger: "change"}]}};},handleSuccess(res, file) {// console.log("res++++++++++++++++++++++++++", res);if (res.code == 0) {this.cod = res.code;this.mes = '导⼊成功';console.log(this.$refs.upload.fileList);// this.$refs.upload.fileList.splice(0, 1);} else {this.cod = res.code;this.mes = res.message;}this.isLock = true;// this.$Spin.hide();this.wlwDevice.fileName = ;if (this.$refs.upload.fileList.length > 1) {this.$refs.upload.fileList.splice(0, 1);}// this.$emit("cancel", this.isOpen);},handleSubmit(name) {console.log("----------------------");this.$refs[name].validate(valid => {if (valid) {this.mesg = true;this.$refs[name].resetFields();this.$emit("cancel", this.isOpen);this.$emit("refreshList");console.log("-------------@@@--------");} else {后端解析 Excel,将数据读取出来导⼊AEP系统导⼊我们系统:后端代码:导⼊POM依赖:<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.9</version></dependency>解析Excel的⽅法:@Component@NoArgsConstructorpublic class ParseExcelUtil {private static final Logger log = LoggerFactory.getLogger(ParseExcelUtil.class);public static Workbook getWorkbook(InputStream is, String fileName) throws ExcelIOException {Workbook workbook = null;String fileType = fileName.substring(stIndexOf("."));// 推荐使⽤poi-ooxml中的WorkbookFactory.create(is)来创建Workbook,// 因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接⼝(可以解决以下报错问题)try {if (ExcelVersion.V2003.getSuffix().equals(fileType)) {workbook = new HSSFWorkbook(is);} else if (ExcelVersion.V2007.getSuffix().equals(fileType)) {workbook = new XSSFWorkbook(is);}}catch (IOException e){// ⽆效后缀名称,这⾥之能保证excel的后缀名称,不能保证⽂件类型正确,不过没关系,在创建Workbook的时候会校验⽂件格式 throw new ExcelIOException("请上传⽂件!");}return workbook;}}Excel版本问题的枚举:@NoArgsConstructorpublic enum ExcelVersion {/*** 虽然V2007版本⽀持最⼤⽀持1048575 * 16383 ,* V2003版⽀持65535*255* 但是在实际应⽤中如果使⽤如此庞⼤的对象集合会导致内存溢出,* 因此这⾥限制最⼤为10000*100,如果还要加⼤建议先通过单元测试进⾏性能测试。

Java解析Excel文件并把数据存入数据库

Java解析Excel文件并把数据存入数据库

Java解析Excel⽂件并把数据存⼊数据库前段时间做⼀个⼩项⽬,为了同时存储多条数据,其中有⼀个功能是解析Excel并把其中的数据存⼊对应数据库中。

花了两天时间,不过⼀天多是因为⽤了"upload"关键字作为URL从⽽导致总报同⼀个错,最后在同学的帮助下顺利解决,下⾯我把⾃⼰⽤"POI"解析的⽅法总结出来供⼤家参考(我⽤的是SpingMVC和hibernate框架)。

1.web.xml中的配置⽂件web.xml中的配置⽂件就按照这种⽅式写,只需要把"application.xml"换成你的配置⽂件名即可<!--⽂件上传对应的配置⽂件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml</param-value></context-param>2.application.xml的配置⽂件(固定写发)在这个配置⽂件中你还可以规定上传⽂件的格式以及⼤⼩等多种属性限制<!-- 定义⽂件上传解析器 --><bean id="multipartResolver"class="monsMultipartResolver"></bean>3.⽂件上传的前端HTML注意:1.enctype="multipart/form-data" 必须写,封装表单2.method="post",提交⽅式必须为"post"提交3.action="${text}/uploadfile", "uploadfile"切记不要写成"upload",否则你找到世界末⽇也不会找到哪⾥有问题(本⼈因为这个折腾了⼀天多时间)。

基于springMVC 和 mybatis的 Excel数据导出

基于springMVC 和 mybatis的 Excel数据导出

基于springMVC 和mybatis的Excel数据导出废话不多说,直接上代码:1、Action@RequestMapping("/deriveOrder")public void deriveOrder(OrderInfoosModel model,HttpServletRequest request,HttpServletResponse response) throws Exception{//找出所有已退货订单List<Integer> orderList = orderInfoosService.findBySelective(model);if(orderList == null || orderList.isEmpty()){sendFailureMessage(response, "没有要导出的订单。

");return;}//生成excel 并返回文件路径String filePath = orderInfoosService.downloadOrder(model,orderList);//输出文件response.setCharacterEncoding("utf-8");response.setContentType("multipart/form-data");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String ctxPath = "已退货-" + sdf.format(new Date(System.currentTimeMillis())).toString() + ".xls";response.setHeader("Content-Disposition", "attachment;fileName="+ctxPath);OutputStream os = null;InputStream inputStream = null;try {File file=new File(filePath);System.out.println(file.getAbsolutePath());inputStream=new FileInputStream(file);os=response.getOutputStream();byte[] b=new byte[1024];int length;while((length=inputStream.read(b))>0){os.write(b,0,length);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally{try {if(os!=null){os.flush();}if(inputStream!=null){inputStream.close();}} catch (Exception e) {}}}2、servicepublic String downloadOrder(OrderInfoosModel model,List<Integer> orderList) throws IOException, WriteException {File ctxFile = new File(SUPPLIER_ORDERS_UPLOAD_PATH);if (!ctxFile.isDirectory()) {ctxFile.mkdirs();}// 文件的存储的相对路径SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String ctxPath = "订单-" + sdf.format(new Date()).toString() + ".xls";String filePath = SUPPLIER_ORDERS_UPLOAD_PA TH + ctxPath;// 新建立一个jxl文件,即在e盘下生成testJXL.xlsOutputStream os = new FileOutputStream(filePath);WritableWorkbook wwb = Workbook.createWorkbook(os);WritableSheet sheet = wwb.createSheet("全部订单", 0);Label label = null;createHead(label, sheet);List<OrderInfoosBean> dataList = mapper.findAllByModel(model);createData(label, sheet, dataList);// 分类int n = 1;for (int i = 0; i < orderList.size(); i++) {model.setId(orderList.get(i));dataList = mapper.findAllByModel(model);sheet = wwb.createSheet(dataList.get(0).getWareHouseName(), n);createHead(label, sheet);createData(label, sheet, dataList);n++;}wwb.write();// 关闭文件wwb.close();os.close();return filePath;}private void createData(Label label, WritableSheet sheet,List<OrderInfoosBean> dataList) throws RowsExceededException, WriteException {for (int i = 0; i < dataList.size(); i++) {OrderInfoosBean bean = dataList.get(i);setData(label, sheet, bean, i + 1);}}private void setData(Label label, WritableSheet sheet,OrderInfoosBean bean, int i) throws RowsExceededException, WriteException { WritableFont wf = new WritableFont(WritableFont.TIMES, 11,WritableFont.NO_BOLD, false);WritableCellFormat wc = new WritableCellFormat(wf);setColor(wc, bean.getStatus());//编号label = new Label(0, i, bean.getId() + "", wc);sheet.addCell(label);//"代理名"String proxyName=bean.getProxyName();if(proxyName==null){proxyName="";}label = new Label(1, i, proxyName,wc);sheet.addCell(label);//"订单日期",SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");label = new Label(2, i, sdf.format( bean.getCreated()).toString(),wc);sheet.addCell(label);// "货源",String wareHouseName= bean.getWareHouseName();if(wareHouseName==null){wareHouseName="";}label = new Label(3, i,wareHouseName,wc);sheet.addCell(label);// "快递名称",String delivery= bean.getDelivery();if(delivery==null){delivery="";}label = new Label(4, i, delivery.toString(),wc);sheet.addCell(label);// "货号",label = new Label(5, i, bean.getArticleno().toString(),wc);sheet.addCell(label);// "尺码",String Size= bean.getSize();if(Size==null){Size="";}label = new Label(6, i,Size,wc);sheet.addCell(label);// "市场价",label = new Label(7, i, bean.getMarketprice().toString(),wc);sheet.addCell(label);// "折扣",double Discount=bean.getDiscount();label = new Label(8, i, Discount+"",wc);sheet.addCell(label);// "付款金额",label = new Label(9, i, bean.getPrice().toString()+"",wc);sheet.addCell(label);// "运费",double postage = bean.getPostage();label = new Label(10, i, postage+"",wc);sheet.addCell(label);// "收件人姓名",String Addressee= bean.getAddressee();if(Addressee==null){Addressee="";}label = new Label(11, i, Addressee,wc);sheet.addCell(label);// "订单状态"String Status= bean.getStatus();if(Status==null){Status="";}if(Status.equals("01")){Status = "待付款";}else if(Status.equals("02")){Status = "已付款";}else if(Status.equals("04")){Status = "反馈失败";}else if(Status.equals("05")){Status = "反馈成功";}else if(Status.equals("06")){Status = "配货中";}else if(Status.equals("08")){Status = "审核通过";}else if(Status.equals("10")){Status = "待退款";}else if(Status.equals("11")){Status = "已退货";}else if(Status.equals("12")){Status = "已退款";}label = new Label(12, i,Status,wc);sheet.addCell(label);//联系电话String mobile = bean.getMobile();if(mobile==null){mobile="";}label = new Label(13, i,mobile,wc);sheet.addCell(label);//收件地址String address = bean.getAddress();if(address==null){address="";}label = new Label(14, i,address,wc);sheet.addCell(label);}private void setColor(WritableCellFormat wc, String status) throws WriteException { if(status.equals("01")){wc.setBackground(jxl.format.Colour.AQUA);}else if(status.equals("02")){wc.setBackground(jxl.format.Colour.ROSE);}else if(status.equals("04")){wc.setBackground(jxl.format.Colour.ORANGE);}else if(status.equals("05")){wc.setBackground(jxl.format.Colour.PINK);}else if(status.equals("06")){wc.setBackground(jxl.format.Colour.GOLD);}else if(status.equals("08")){wc.setBackground(jxl.format.Colour.LIME);}else if(status.equals("10")){wc.setBackground(jxl.format.Colour.GREEN);}else if(status.equals("11")){wc.setBackground(jxl.format.Colour.YELLOW);}else if(status.equals("12")){wc.setBackground(jxl.format.Colour.BLUE);}}private void createHead(Label label, WritableSheet sheet) throws WriteException { String[] title = { "编号", "代理名", "订单日期", "货源", "快递名称", "货号", "尺码", "市场价","折扣", "付款金额", "运费", "收件人姓名", "订单状态","联系电话","收件地址"};WritableFont wf = new WritableFont(WritableFont.TIMES, 11,WritableFont.NO_BOLD, false);WritableCellFormat wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.WHITE);for (int i = 0; i < title.length; i++) {label = new Label(i, 0, title[i]);sheet.addCell(label);}label = new Label(18, 01, "待付款");sheet.addCell(label);label = new Label(18, 02, "已付款");sheet.addCell(label);label = new Label(18, 04, "反馈失败");sheet.addCell(label);label = new Label(18, 05, "反馈成功");sheet.addCell(label);label = new Label(18, 06, "配货中");sheet.addCell(label);label = new Label(18, 8, "审核通过");sheet.addCell(label);label = new Label(18, 10, "待退货");sheet.addCell(label);label = new Label(18, 11, "已退货");sheet.addCell(label);label = new Label(18, 12, "已退款");sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.AQUA); label = new Label(17, 01, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.ROSE); label = new Label(17, 02, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.ORANGE); label = new Label(17, 04, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.PINK); label = new Label(17, 05, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.GOLD); label = new Label(17, 06, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.LIME); label = new Label(17, 8, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.GREEN);label = new Label(17, 10, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.YELLOW);label = new Label(17, 11, "",wc);sheet.addCell(label);wc = new WritableCellFormat(wf);wc.setBackground(jxl.format.Colour.BLUE);label = new Label(17, 12, "",wc);sheet.addCell(label);}/*** 根据条件查询数据* @param model* @return*/public List<Integer> findBySelective(OrderInfoosModel model) { // TODO Auto-generated method stubreturn mapper.findBySelective(model);}3、jsfunction deriveOrder(){var wareHouseName=$("input[name='wareHouseName']").val();var articleno=$("input[name='articleno']").val();var addressee=$("input[name='addressee']").val();var startTime =$("input[name='startTime']").val();var endsTime =$("input[name='endsTime']").val();var status =$("input[name='status']").val();var data = "wareHouseName="+wareHouseName+"&articleno="+articleno+"&startTime="+startTime+"&endsTime="+endsTime+"&status="+status;var link = "deriveOrder.do"+'?'+data;window.open(link);}4、jsp<a href="javascript:void(0)" class="easyui-linkbutton" onclick="deriveOrder();">导出订单</a>至此,excel表格可以导出下面是效果图:。

vue+springmvc导出excel数据的实现代码

vue+springmvc导出excel数据的实现代码

vue+springmvc导出excel数据的实现代码vue端处理this.$http.get(this.service + '/user/excel',{responseType: 'blob'}).then(({data})=> {(typeof data)var a = document.createElement('a');var url = window.URL.createObjectURL(data);a.href = url;a.download = '⽤户统计信息.xls';a.click();window.URL.revokeObjectURL(url);})web端处理int total=userBsService.getCount(null);List<UserVo> list=userBsService.getList(null, 1, total);String fileName = new Date().getTime() + "";XSSFWorkbook wb=new XSSFWorkbook();Sheet sheet=wb.createSheet();Row row0=sheet.createRow(0);String titleName[] = {"⽤户账号", "充值总⾦额", "邀请总⼈数", "社群组"};//列名for(int i=0;i<titleName.length;i++){sheet.setColumnWidth(i, 10 * 512);row0.createCell(i).setCellValue(titleName[i]);}int i=0;for(UserVo v:list){Row row=sheet.createRow(i+1);if(!StringUtils.isEmpty(v.getMobile())){row.createCell(0).setCellValue(v.getMobile());}else{row.createCell(0).setCellValue(v.getEmail());}row.createCell(1).setCellValue(BigDecimalUtil.outputConvert(v.getAmount()));row.createCell(2).setCellValue(v.getCounts());row.createCell(3).setCellValue(v.getGroups());i++;}ByteArrayOutputStream os = new ByteArrayOutputStream();try{try {wb.write(os);wb.close();} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);response.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream();BufferedInputStream bis = null;BufferedOutputStream bos = null;try {bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (final IOException e) {throw e;} finally {if (bis != null)bis.close();if (bos != null)bos.close();}}catch (Exception e){}return null;总结以上所述是⼩编给⼤家介绍的vue+springmvc导出excel数据的实现代码,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。

springMVC(5)---导入excel文件数据到数据库

springMVC(5)---导入excel文件数据到数据库

springMVC(5)---导⼊excel⽂件数据到数据库springMVC(5)---导⼊excel⽂件数据到数据库上⼀篇⽂章写了从数据库导出数据到excel⽂件,这篇⽂章悄悄相反,写的是导⼊excel⽂件数据到数据库。

上⼀篇链接:直接进⼊步骤讲解:第⼀步、导⼊jar包<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency>第⼆步,创建Model对象我没有把数据放到数据库中,⽽是导⼊到实体中,然后在后台打印public class Family {//家庭编号private String jtbh;//姓名private String xm;//⾏业private String hy;//备注private String bz;/** 提供set和get,toString⽅法*/}第三步.导⼊excel界⾯ leadingexcel.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><html><head><script type="text/javascript" src="../js/jquery-1.7.1.js"></script><script type="text/javascript" src="../js/jquery.form.js"></script><script type="text/javascript">/* ajax ⽅式上传⽂件操作 */$(document).ready(function(){$("#btn").click(function(){ if(checkData()){$('#form1').ajaxSubmit({url:'uploadExcel/ajax',dataType: 'text',success: resutlMsg,error: errorMsg});function resutlMsg(msg){alert(msg);$("#upfile").val("");}function errorMsg(){alert("导⼊excel出错!");}}});});//JS校验form表单信息function checkData(){var fileDir = $("#upfile").val();var suffix = fileDir.substr(stIndexOf("."));if("" == fileDir){alert("选择需要导⼊的Excel⽂件!");return false;}if(".xls" != suffix && ".xlsx" != suffix ){alert("选择Excel格式的⽂件导⼊!");return false;}return true;}</script></head><body><form method="POST" enctype="multipart/form-data" id="form1" action="uploadExcel/form"><label>上传⽂件: </label><input id="upfile" type="file" name="upfile"><br><br><input type="submit" value="表单提交" onclick="return checkData()"><input type="button" value="ajax提交" id="btn" name="btn"></form></body></html>先讲下,我这src引⽤路径的时候发现,怎么也引⽤不到,找了好久才发现,我在springmvc中没有配置静态⽂件 springmvc.xml<!-- 静态资源访问 --><mvc:default-servlet-handler/><!-- 当我仅配置上⾯的时候⼜发现src是引⽤到了,但是我的RequestMapping映射却变成请求不到了,所以下⾯的也⼀定要加上 --> <mvc:annotation-driven></mvc:annotation-driven>第四步、LeadingExcelController.javaimport java.io.InputStream;import java.io.PrintWriter;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import com.ssm.model.Family;import com.ssm.service.impl.ImportExcelUtil;@Controller@RequestMapping("/jsp/uploadExcel")public class LeadingExcelController {@RequestMapping("/form")public String form(HttpServletRequest request)throws Exception{MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;InputStream in =null;List<List<Object>> listob = null;MultipartFile file = multipartRequest.getFile("upfile");if(file.isEmpty()){throw new Exception("⽂件不存在!");}in = file.getInputStream();listob = new ImportExcelUtil().getBankListByExcel(in,file.getOriginalFilename());in.close();//该处可调⽤service相应⽅法进⾏数据保存到数据库中,现只对数据输出for (int i = 0; i < listob.size(); i++) {List<Object> lo = listob.get(i);Family family = new Family();family.setJtbh(String.valueOf(lo.get(0)));family.setXm(String.valueOf(lo.get(1)));family.setHy(String.valueOf(lo.get(2)));family.setBz(String.valueOf(lo.get(3)));System.out.println("打印信息-->"+family.toString());}return null;}@RequestMapping(value="/ajax")public void ajaxUploadExcel(HttpServletRequest request,HttpServletResponse response) throws Exception { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;InputStream in =null;List<List<Object>> listob = null;MultipartFile file = multipartRequest.getFile("upfile");if(file.isEmpty()){throw new Exception("⽂件不存在!");}in = file.getInputStream();listob = new ImportExcelUtil().getBankListByExcel(in,file.getOriginalFilename());//该处可调⽤service相应⽅法进⾏数据保存到数据库中,现只对数据输出for (int i = 0; i < listob.size(); i++) {List<Object> lo = listob.get(i);Family family = new Family();family.setJtbh(String.valueOf(lo.get(0)));family.setXm(String.valueOf(lo.get(1)));family.setHy(String.valueOf(lo.get(2)));family.setBz(String.valueOf(lo.get(3)));System.out.println("打印信息-->"+family.toString());}PrintWriter out = null;response.setCharacterEncoding("utf-8"); //防⽌ajax接受到的中⽂信息乱码out = response.getWriter();out.print("⽂件导⼊成功!");out.flush();out.close();}}第五步、ImportExcelUtil.java 报表导⼊实现层import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import ermodel.XSSFWorkbook;public class ImportExcelUtil {private final static String excel2003L =".xls"; //2003- 版本的excelprivate final static String excel2007U =".xlsx"; //2007+ 版本的excel/*** 描述:获取IO流中的数据,组装成List<List<Object>>对象* @param in,fileName* @return* @throws IOException*/public List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{List<List<Object>> list = null;//创建Excel⼯作薄Workbook work = this.getWorkbook(in,fileName);if(null == work){throw new Exception("创建Excel⼯作薄为空!");}Sheet sheet = null;Row row = null;Cell cell = null;list = new ArrayList<List<Object>>();//遍历Excel中所有的sheetfor (int i = 0; i < work.getNumberOfSheets(); i++) {sheet = work.getSheetAt(i);if(sheet==null){continue;}//遍历当前sheet中的所有⾏for (int j = sheet.getFirstRowNum(); j < sheet.getLastRowNum(); j++) {row = sheet.getRow(j);if(row==null||row.getFirstCellNum()==j){continue;}//遍历所有的列List<Object> li = new ArrayList<Object>();for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {cell = row.getCell(y);li.add(this.getCellValue(cell));}list.add(li);}}in.close();return list;}/*** 描述:根据⽂件后缀,⾃适应上传⽂件的版本* @param inStr,fileName* @return* @throws Exception*/public Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{ Workbook wb = null;String fileType = fileName.substring(stIndexOf("."));if(excel2003L.equals(fileType)){wb = new HSSFWorkbook(inStr); //2003-}else if(excel2007U.equals(fileType)){wb = new XSSFWorkbook(inStr); //2007+}else{throw new Exception("解析的⽂件格式有误!");}return wb;}/*** 描述:对表格中数值进⾏格式化* @param cell* @return*/public Object getCellValue(Cell cell){Object value = null;DecimalFormat df = new DecimalFormat("0"); //格式化number String字符SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //⽇期格式化DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字switch (cell.getCellType()) {case Cell.CELL_TYPE_STRING:value = cell.getRichStringCellValue().getString();break;case Cell.CELL_TYPE_NUMERIC:if("General".equals(cell.getCellStyle().getDataFormatString())){value = df.format(cell.getNumericCellValue());}else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){value = sdf.format(cell.getDateCellValue());}else{value = df2.format(cell.getNumericCellValue());}break;case Cell.CELL_TYPE_BOOLEAN:value = cell.getBooleanCellValue();break;case Cell.CELL_TYPE_BLANK:value = "";break;default:break;}return value;}}第六步:最终效果,当我点击通过表单和ajax提交时(1)先展⽰上传的xls⽂件内容(2)最终控制台打出:(3)通过ajax导⼊成功,前端也会提⽰完美!想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想少尉【12】。

在mvc4中上传、导入和导出excel表方法总结

在mvc4中上传、导入和导出excel表方法总结

在mvc4中上传、导⼊和导出excel表⽅法总结通过excel的导⼊导出练习,使⽤NPOI组件还是⽅便⼀点,所有下⾯就以NPOI下的导⼊导出给出实例,通过⽹页导⼊excel表,⾸先上传,再导⼊数据到库,这⾥为了⽅便就不导⼊到库中了,直接拿到数据。

导出⽅法⽐较多。

第⼀步下载NPOI组件,并在VS中导⼊dll.第⼆步:为了⽅便,把功能提取成⽅法:1 集合与DataTable间的相互转换创建类public static class DataTableTool{///<summary>///转化⼀个DataTable///</summary>///<typeparam name="T"></typeparam>///<param name="list"></param>///<returns></returns>public static DataTable ToDataTable<T>(this IEnumerable<T> list){//创建属性的集合List<PropertyInfo> pList = new List<PropertyInfo>();//获得反射的⼊⼝Type type = typeof(T);DataTable dt = new DataTable();//把所有的public属性加⼊到集合并添加DataTable的列Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(, p.PropertyType); });foreach (var item in list){//创建⼀个DataRow实例DataRow row = dt.NewRow();//给row 赋值pList.ForEach(p => row[] = p.GetValue(item, null));//加⼊到DataTabledt.Rows.Add(row);}return dt;}///<summary>/// DataTable 转换为List 集合///</summary>///<typeparam name="TResult">类型</typeparam>///<param name="dt">DataTable</param>///<returns></returns>public static List<T> ToList<T>(this DataTable dt) where T : class, new(){//创建⼀个属性的列表List<PropertyInfo> prlist = new List<PropertyInfo>();//获取TResult的类型实例反射的⼊⼝Type t = typeof(T);//获得TResult 的所有的Public 属性并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加⼊到属性列表Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf() != -1) prlist.Add(p); });//创建返回的集合List<T> oblist = new List<T>();foreach (DataRow row in dt.Rows){//创建TResult的实例T ob = new T();//找到对应的数据并赋值prlist.ForEach(p => { if (row[] != DBNull.Value) p.SetValue(ob, row[], null); });//放⼊到返回的集合中.oblist.Add(ob);}return oblist;}///<summary>///将集合类转换成DataTable///</summary>///<param name="list">集合</param>///<returns></returns>public static DataTable ToDataTableTow(IList list){DataTable result = new DataTable();if (list.Count > 0){PropertyInfo[] propertys = list[0].GetType().GetProperties();foreach (PropertyInfo pi in propertys){result.Columns.Add(, pi.PropertyType);}for (int i = 0; i < list.Count; i++){ArrayList tempList = new ArrayList();foreach (PropertyInfo pi in propertys){object obj = pi.GetValue(list[i], null);tempList.Add(obj);}object[] array = tempList.ToArray();result.LoadDataRow(array, true);}}return result;}/**////<summary>///将泛型集合类转换成DataTable///</summary>///<typeparam name="T">集合项类型</typeparam>///<param name="list">集合</param>///<returns>数据集(表)</returns>public static DataTable ToDataTable<T>(IList<T> list){return ToDataTable<T>(list, null);}/**////<summary>///将泛型集合类转换成DataTable///</summary>///<typeparam name="T">集合项类型</typeparam>///<param name="list">集合</param>///<param name="propertyName">需要返回的列的列名</param>///<returns>数据集(表)</returns>public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName) {List<string> propertyNameList = new List<string>();if (propertyName != null)propertyNameList.AddRange(propertyName);DataTable result = new DataTable();if (list.Count > 0){PropertyInfo[] propertys = list[0].GetType().GetProperties();foreach (PropertyInfo pi in propertys){if (propertyNameList.Count == 0){result.Columns.Add(, pi.PropertyType);}else{if (propertyNameList.Contains())result.Columns.Add(, pi.PropertyType);}}for (int i = 0; i < list.Count; i++){ArrayList tempList = new ArrayList();foreach (PropertyInfo pi in propertys){if (propertyNameList.Count == 0){object obj = pi.GetValue(list[i], null);tempList.Add(obj);}else{if (propertyNameList.Contains()){object obj = pi.GetValue(list[i], null);tempList.Add(obj);}}}object[] array = tempList.ToArray();result.LoadDataRow(array, true);}}return result;}}2 excel导⼊导出类public static class ExcelTool{ ///<summary>///将excel中的数据导⼊到DataTable中///</summary>///<param name="isFirstRowColumn">第⼀⾏是否是DataTable的列名</param>///<param name="fileName">⽂件路径</param>///<param name="sheetName">excel⼯作薄sheet的名称</param>///<returns>返回的DataTable</returns>public static DataTable ExcelToDataTable(bool isFirstRowColumn, string fileName, string sheetName = "") {if (string.IsNullOrEmpty(fileName)){throw new ArgumentNullException(fileName);}var data = new DataTable();IWorkbook workbook = null;FileStream fs = null;try{fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0){workbook = new XSSFWorkbook(fs);}else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0){workbook = new HSSFWorkbook(fs);}ISheet sheet = null;if (workbook != null){//如果没有找到指定的sheetName对应的sheet,则尝试获取第⼀个sheetif (sheetName == ""){sheet = workbook.GetSheetAt(0);}else{sheet = workbook.GetSheet(sheetName) ?? workbook.GetSheetAt(0);}}if (sheet == null) return data;var firstRow = sheet.GetRow(0);//⼀⾏最后⼀个cell的编号即总的列数int cellCount = stCellNum;int startRow;if (isFirstRowColumn){for (int i = firstRow.FirstCellNum; i < cellCount; ++i){var cell = firstRow.GetCell(i);var cellValue = cell.StringCellValue;if (cellValue == null) continue;var column = new DataColumn(cellValue);data.Columns.Add(column);}startRow = sheet.FirstRowNum + 1;}else{startRow = sheet.FirstRowNum;}//最后⼀列的标号var rowCount = stRowNum;for (var i = startRow; i <= rowCount; ++i){var row = sheet.GetRow(i);//没有数据的⾏默认是nullif (row == null) continue;var dataRow = data.NewRow();for (int j = row.FirstCellNum; j < cellCount; ++j){//同理,没有数据的单元格都默认是nullif (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}data.Rows.Add(dataRow);}return data;}catch (IOException ioex){throw new IOException(ioex.Message);}catch (Exception ex){throw new Exception(ex.Message);}finally{if (fs != null){fs.Close();}}}///<summary>///将DataTable数据导⼊到excel中///</summary>///<param name="data">要导⼊的数据</param>///<param name="isColumnWritten">DataTable的列名是否要导⼊</param>///<param name="sheetName">要导⼊的excel的sheet的名称</param>///<param name="fileName">⽂件夹路径</param>///<returns>导⼊数据⾏数(包含列名那⼀⾏)</returns>public static int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten, string fileName){if (data == null){throw new ArgumentNullException("data");}if (string.IsNullOrEmpty(sheetName)){throw new ArgumentNullException(sheetName);}if (string.IsNullOrEmpty(fileName)){throw new ArgumentNullException(fileName);}IWorkbook workbook = null;if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0){workbook = new XSSFWorkbook();}else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0){workbook = new HSSFWorkbook();}FileStream fs = null;try{fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);ISheet sheet;if (workbook != null){sheet = workbook.CreateSheet(sheetName);}else{return -1;}int j;int count;//写⼊DataTable的列名,写⼊单元格中if (isColumnWritten){var row = sheet.CreateRow(0);for (j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);}count = 1;}else{count = 0;}//遍历循环datatable具体数据项int i;for (i = 0; i < data.Rows.Count; ++i){var row = sheet.CreateRow(count);for (j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());}++count;}//将⽂件流写⼊到excelworkbook.Write(fs);return count;}catch (IOException ioex){throw new IOException(ioex.Message);}catch (Exception ex){throw new Exception(ex.Message);}finally{if (fs != null){fs.Close();}}}}第三步:下⾯开始做⼀个很简单的⽹页来展⽰导⼊与导出,还有数据的显⽰页⾯。

基于springMVC框架上excel形式的数据导出技术

基于springMVC框架上excel形式的数据导出技术

基于springMVC框架上excel形式的数据导出技术张淼【期刊名称】《信息通信》【年(卷),期】2014(000)009【摘要】随着时代的发展,开发技术的进步,框架式开发技术已经成为了一种革新性的象征和先进性的体现。

在众多框架中,springMVC以其分明的层次控制和简单的操作配置而被大多数开发人员所采用。

但是,在如今追求效率的今天,一个好的开发框架只是一个开始,真正的效率还是在对数据的处理上。

如何将数据库中数据导出到办公文档中直接利用,是目前多数需求者追求的目标。

所以springMVC框架上excel文档形式的数据导出技术,是工作效率的加速器也是技术价值和社会价值的交汇点。

%With the development of the times, the development of technological progress. Frame of development of technology has become the embodiment of a symbol of innovative and advanced. Many in the framework, springMVC with its distinct level control and simple configuration is most used by developers. However, in the pursuit of efficiency of today, a development fra-mework is only a beginning. True efficiency is data processing.How will the data in the database is exported to the office docu-ments directly Is the goal of most demanders pursue. So the excelldocument form data derived technology springMVC frame-work Is the efficiency of the accelerato and the intersection point of technology value and social value.【总页数】2页(P27-28)【作者】张淼【作者单位】贵州省气象局,贵州贵阳550081【正文语种】中文【中图分类】TP311【相关文献】1.基于ExtJS技术与SSH框架的后台数据导出Excel [J], 吕雪澄;周书民2.基于JavaScript的JSP页面数据导出Excel [J], 史学梅3.基于B/S结构的Excel试验数据导出方法 [J], 蔡芳;王晓红;刘晓晖4.基于SpringMVC框架的数控机床共享系统开发技术 [J], 熊霞5.基于SpringMVC框架的数控机床共享系统开发技术 [J], 熊霞;因版权原因,仅展示原文概要,查看原文内容请购买。

Excel导入导出的业务进化场景及组件化的设计方案(上)

Excel导入导出的业务进化场景及组件化的设计方案(上)

Excel导⼊导出的业务进化场景及组件化的设计⽅案(上)1:前⾔看过我⽂章的⽹友们都知道,通常前⾔都是我⽤来打酱油扯点闲情的。

⾃从写了上⾯⼀篇⽂章之后,领导就找我谈话了,怕我有什么想不开。

所以的(下)篇,⽬前先不出来了,哪天我异地⼆次回忆的时候,再分享分享。

话说最近外⾯IT⾏情飞涨还咋的,⼈都飞哪去了呢,听说各地的军情都进⼊紧急状态了。

回归下正题,今天就抽点时间,写写技术⽂,和⼤伙分享⼀下近年在框架设计上的取的⼀些技术成果。

2:项⽬背景在针对运营商(移动、联通、电信、铁塔)的信息类的系统中,由于相关的从业⼈员习惯于Excel的办公思维。

导致在做该类系统中时,Excel的导⼊导出功能,⼏乎成了每个有列表展⽰的页⾯上必备功能。

因此,有必要对Excel导⼊导出进⾏抽象并组件化设计,以⾄于后⾯占了整个开发框架中⼀个很⽜B的位置。

⽽这⼀切的演进与进化,始于以下这越来越变态的需求:3:从模板的指定⽅式看进化阶段⼀:由开发⽅精⼼设计Excel模板我们都知道,要把⼀批数据导进系统中,最基本的做法,就是约定好导⼊的模板,然后针对精⼼设计好的模板进⾏编码。

⽽客户则按格式填写好数据后,如⽆意外的就导⼊系统中了。

如此如此这般这般之后:对于开发:会选择⼀种最简单开发的⽅式,尽量确保每个字段不需要特殊处理都和数据库对的上,不⽤做过多的额外代码编写。

对于客户:需要按指定的格式填写数据,需要花不少时间。

阶段⼆:Excel模板的格式由客户指定后续的调研进展,客户要亲⾃指定模板中的列及格式。

如此如此这般这般之后:对于开发:需要按指定的格式去开发,甚⾄可能缺少某些列,要做⼀些额外的查询或代码处理。

对于客户:可以简单的从其它办公的Excel中复制数据到模板,进⾏简单的修改后导⼊。

阶段三:从某系统导出Excel数据,要求能直接导⼊系统客户越来越⽜B了,认为搞模板这东西太复杂了,既然其它系统能导出来,直接弄过去就得了。

如此如此这般这般之后:对于开发:由于某系统导出的Excel数据,乱七杂⼋,⽤API读出来的数据,不符常规则,要做N多兼容处理,⼯作量翻了N翻。

详解poi+springmvc+springjdbc导入导出excel实例

详解poi+springmvc+springjdbc导入导出excel实例

详解poi+springmvc+springjdbc导⼊导出excel实例⼯作中常遇到导⼊导出excel的需求,本獂有⼀简答实例与⼤家分享。

废话不多说,1.所需jar包:2.前端代码:ieport.jsp:<%@page import="java.util.Date"%><%@ page language="java" contentType="text/html; charset=utf-" pageEncoding="utf-"%><!DOCTYPE html PUBLIC "-//WC//DTD XHTML . Transitional//EN" "/TR/xhtml/DTD/xhtml-transitional.dtd"><html xmlns="//xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-" /><title>导⼊\导出页⾯</title><script type="text/javascript">function exportFile(){window.location.href = "<%=request.getContextPath()%>/export.go";}</script></head><body><form action="import.go" method="post" enctype="multipart/form-data">⽂件:<input type="file" name="uploadFile"/><br></br><input type="submit" value="导⼊"/><input type="button" value="导出" onclick="exportFile()"/></form></body></html>success.jsp:<%@ page language="java" contentType="text/html; charset=utf-" pageEncoding="utf-"%><%@ taglib prefix="c" uri="/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//WC//DTD XHTML . Transitional//EN" "/TR/xhtml/DTD/xhtml-transitional.dtd"><html xmlns="//xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-" /><title>成功页⾯</title><script type="text/javascript">// var secUserList = '${secUserList}';// alert(secUserList);</script></head><body><c:if test="${type == 'import'}"><div>导⼊成功!</div><c:forEach items="${secUserList}" var="secUser"><div>Id:${erId}&nbsp;|&nbsp;Name:${erName}&nbsp;|&nbsp;Password:${erPassword}</div></c:forEach></c:if><c:if test="${type == 'export'}"><div>导出成功!</div></c:if></body></html>3.后台代码:controller:package com.controller;import java.io.File;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import com.domain.SecUser;import com.service.IEportService;@Controllerpublic class IEportController {@Resourceprivate IEportService ieportService;@RequestMapping("/import")public ModelAndView importFile(@RequestParam(value="uploadFile")MultipartFile mFile, HttpServletRequest request, HttpServletResponse response){ String rootPath = request.getSession().getServletContext().getRealPath(File.separator);List<SecUser> secUserList = ieportService.importFile(mFile, rootPath);ModelAndView mv = new ModelAndView();mv.addObject("type", "import");mv.addObject("secUserList", secUserList);mv.setViewName("/success");return mv;}@RequestMapping("/export")public ModelAndView exportFile(HttpServletResponse response) {ieportService.exportFile(response);ModelAndView mv = new ModelAndView();mv.addObject("type", "export");mv.setViewName("/success");return mv;}}service:package com.service;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import .URLEncoder;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletResponse;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import ermodel.CellStyle;import ermodel.Font;import ermodel.XSSFCell;import ermodel.XSSFFont;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import com.dao.IEportDao;import com.domain.SecUser;@Servicepublic class IEportService {@Resourceprivate IEportDao ieportDao;public List<SecUser> importFile(MultipartFile mFile, String rootPath){List<SecUser> secUserList = new ArrayList<SecUser>();String fileName = mFile.getOriginalFilename();String suffix = fileName.substring(stIndexOf(".") + , fileName.length()); String ym = new SimpleDateFormat("yyyy-MM").format(new Date());String filePath = "uploadFile/" + ym + fileName;try {File file = new File(rootPath + filePath);if (file.exists()) {file.delete();file.mkdirs();}else {file.mkdirs();}mFile.transferTo(file);if ("xls".equals(suffix) || "XLS".equals(suffix)) {secUserList = importXls(file);ieportDao.importFile(secUserList);}else if ("xlsx".equals(suffix) || "XLSX".equals(suffix)) {secUserList = importXlsx(file);ieportDao.importFile(secUserList);}} catch (Exception e) {e.printStackTrace();}return secUserList;}private List<SecUser> importXls(File file) {List<SecUser> secUserList = new ArrayList<SecUser>();InputStream is = null;HSSFWorkbook hWorkbook = null;try {is = new FileInputStream(file);hWorkbook = new HSSFWorkbook(is);HSSFSheet hSheet = hWorkbook.getSheetAt();if (null != hSheet){for (int i = ; i < hSheet.getPhysicalNumberOfRows(); i++){SecUser su = new SecUser();HSSFRow hRow = hSheet.getRow(i);su.setUserName(hRow.getCell().toString());su.setUserPassword(hRow.getCell().toString());secUserList.add(su);}}} catch (Exception e) {e.printStackTrace();}finally {if (null != is) {try {is.close();} catch (Exception e) {e.printStackTrace();}}if (null != hWorkbook) {try {hWorkbook.close();} catch (Exception e) {e.printStackTrace();}}}return secUserList;}private List<SecUser> importXlsx(File file) {List<SecUser> secUserList = new ArrayList<SecUser>();InputStream is = null;XSSFWorkbook xWorkbook = null;try {is = new FileInputStream(file);xWorkbook = new XSSFWorkbook(is);XSSFSheet xSheet = xWorkbook.getSheetAt();if (null != xSheet) {for (int i = ; i < xSheet.getPhysicalNumberOfRows(); i++) {SecUser su = new SecUser();XSSFRow xRow = xSheet.getRow(i);su.setUserName(xRow.getCell().toString());su.setUserPassword(xRow.getCell().toString());secUserList.add(su);}}} catch (Exception e) {e.printStackTrace();}finally {if (null != is) {try {is.close();} catch (Exception e) {e.printStackTrace();}}if (null != xWorkbook) {try {xWorkbook.close();} catch (Exception e) {e.printStackTrace();}}}return secUserList;}public void exportFile(HttpServletResponse response) {SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");OutputStream os = null;XSSFWorkbook xWorkbook = null;try {String fileName = "User" + df.format(new Date()) + ".xlsx";os = response.getOutputStream();response.reset();response.setHeader("Content-disposition", "attachment; filename = " + URLEncoder.encode(fileName, "UTF-")); response.setContentType("application/octet-streem");xWorkbook = new XSSFWorkbook();XSSFSheet xSheet = xWorkbook.createSheet("UserList");//set Sheet页头部setSheetHeader(xWorkbook, xSheet);//set Sheet页内容setSheetContent(xWorkbook, xSheet);xWorkbook.write(os);} catch (Exception e) {e.printStackTrace();} finally {try {os.close();} catch (Exception e) {e.printStackTrace();}}if (null != xWorkbook) {try {xWorkbook.close();} catch (Exception e) {e.printStackTrace();}}}}/*** set Sheet页头部* @param xWorkbook* @param xSheet*/private void setSheetHeader(XSSFWorkbook xWorkbook, XSSFSheet xSheet) { xSheet.setColumnWidth(, * );xSheet.setColumnWidth(, * );xSheet.setColumnWidth(, * );CellStyle cs = xWorkbook.createCellStyle();//设置⽔平垂直居中cs.setAlignment(CellStyle.ALIGN_CENTER);cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//设置字体Font headerFont = xWorkbook.createFont();headerFont.setFontHeightInPoints((short) );headerFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);headerFont.setFontName("宋体");cs.setFont(headerFont);cs.setWrapText(true);//是否⾃动换⾏XSSFRow xRow = xSheet.createRow();XSSFCell xCell = xRow.createCell();xCell.setCellStyle(cs);xCell.setCellValue("⽤户ID");XSSFCell xCell = xRow.createCell();xCell.setCellStyle(cs);xCell.setCellValue("⽤户名");XSSFCell xCell = xRow.createCell();xCell.setCellStyle(cs);xCell.setCellValue("密码");}/*** set Sheet页内容* @param xWorkbook* @param xSheet*/private void setSheetContent(XSSFWorkbook xWorkbook, XSSFSheet xSheet) { List<SecUser> secUserList = ieportDao.getSecUserList();CellStyle cs = xWorkbook.createCellStyle();cs.setWrapText(true);if (null != secUserList && secUserList.size() > ) {for (int i = ; i < secUserList.size(); i++) {XSSFRow xRow = xSheet.createRow(i + );SecUser secUser = secUserList.get(i);for (int j = ; j < ; j++) {XSSFCell xCell = xRow.createCell(j);xCell.setCellStyle(cs);switch (j) {case :xCell.setCellValue(secUser.getUserId());break;xCell.setCellValue(secUser.getUserName());break;case :xCell.setCellValue(secUser.getUserPassword());break;default:break;}}}}}}dao:package com.dao;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Repository;import com.domain.SecUser;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;@Repositorypublic class IEportDao {@Resourceprivate JdbcTemplate jdbcTemplate;private RowMapper<SecUser> suRowMapper = null;private IEportDao() {suRowMapper = new RowMapper<SecUser>() {@Overridepublic SecUser mapRow(ResultSet rs, int index) throws SQLException {SecUser secUser = new SecUser();secUser.setUserId(rs.getString("USER_ID"));secUser.setUserName(rs.getString("USER_NAME"));secUser.setUserPassword(rs.getString("USER_PASSWORD"));return secUser;}};}public void importFile(List<SecUser> secUserList) {try {String sql = "INSERT INTO SEC_USER VALUES(UUID(),?,?)";List<Object[]> paramsList = new ArrayList<Object[]>();for (int i = ; i < secUserList.size(); i++) {SecUser secUser = secUserList.get(i);Object[] params = new Object[]{secUser.getUserName(),secUser.getUserPassword()};paramsList.add(params);}jdbcTemplate.batchUpdate(sql, paramsList);} catch (Exception e) {e.printStackTrace();}}public List<SecUser> getSecUserList() {List<SecUser> suList = new ArrayList<SecUser>();StringBuffer sb = new StringBuffer();sb.append("SELECT ER_ID,ER_NAME,ER_PASSWORD FROM SEC_USER SU"); try {suList = jdbcTemplate.query(sb.toString(), suRowMapper);} catch (Exception e) {e.printStackTrace();}return suList;}}domain:package com.domain;public class SecUser {String userId; //⽤户IDString userName; //⽤户名String userPassword; //密码public String getUserId() {return userId;}public void setUserId(String userId) {erId = userId;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {erPassword = userPassword;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}}4.配置⽂件:<?xml version="." encoding="UTF-"?><web-app xmlns:xsi="//XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app__.xsd" id="WebApp_ID" version="."><display-name>SpringSpringmvcPoi</display-name><welcome-file-list><welcome-file>ieport.jsp</welcome-file></welcome-file-list><!-- 指定 Spring 配置⽂件的名称和位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:application-context.xmlclasspath:dataSource-context.xml</param-value></context-param><!-- 配置启动 Spring 的 Listener --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置 SpringMVC 的 DispatcherServlet --><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置 SpringMVC 的配置⽂件的位置 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>*.go</url-pattern></servlet-mapping><!-- 上传⽂件编码,防⽌乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app><?xml version="." encoding="UTF-"?><beans xmlns="/schema/beans"xmlns:xsi="//XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xmlns:mvc="/schema/mvc"xmlns:util="/schema/util"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-..xsd /schema/context /schema/context/spring-context-..xsd/schema/mvc /schema/mvc/spring-mvc-..xsd/schema/aop /schema/aop/spring-aop-..xsd"><!-- 配置⾃动扫描的包 --><context:component-scan base-package="com.controller"></context:component-scan><!-- 配置SpringMVC的视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean><!-- ⽀持上传⽂件 --><bean id="multipartResolver" class="monsMultipartResolver"/></beans><?xml version="." encoding="UTF-"?><beans xmlns="/schema/beans"xmlns:xsi="//XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-..xsd /schema/context /schema/context/spring-context-..xsd"><context:component-scan base-package="com"></context:component-scan></beans><?xml version="." encoding="UTF-"?><beans xmlns="/schema/beans"xmlns:xsi="//XMLSchema-instance" xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 读取jdbc配置⽂件 --><context:property-placeholder location="classpath:jdbc.properties" /><!-- 配置数据源 --><bean id="dataSource" class="boPooledDataSource" destroy-method="close"><property name="user" value="${er}"></property><property name="password" value="${jdbc.password}"></property><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property><!-- 当连接池中的连接⽤完时,CP⼀次性创建新连接的数⽬ --><property name="acquireIncrement" value=""></property><!-- 初始化时创建的连接数,必须在minPoolSize和maxPoolSize之间 --><property name="initialPoolSize" value=""></property><property name="maxPoolSize" value=""></property><property name="minPoolSize" value=""></property><property name="maxConnectionAge" value=""></property><property name="maxIdleTime" value=""></property><property name="maxIdleTimeExcessConnections" value=""></property><property name="breakAfterAcquireFailure" value="false"></property><property name="testConnectionOnCheckout" value="false"></property><property name="testConnectionOnCheckin" value="false"></property><!-- 每秒检查连接池中的空闲连接 --><property name="idleConnectionTestPeriod" value=""></property><property name="acquireRetryAttempts" value=""></property><property name="acquireRetryDelay" value=""></property><property name="preferredTestQuery" value="SELECT FROM DUAL"></property> </bean><!-- 配置Jdbc模板JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><constructor-arg ref="dataSource"></constructor-arg></bean></beans>jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql://localhost:/mydber=myuserjdbc.password=myuser5.⽬录结构:6.结果演⽰导⼊:导出:PS:1.本獂新⼿,由于还没清楚怎么添加附件,故将所有代码贴出并加上⽬录结构,⽇后了解怎么添加附件,再修改。

springMVC_Mybaits_Excel 开发数据导入功能

springMVC_Mybaits_Excel 开发数据导入功能

基于springMVC和mybatis的excel表格导入1、Action@RequestMapping(value = "/upInventoryInfo", method = RequestMethod.POST)@ResponseBodypublic String upInventoryInfo(InventoryModel model,String value1,HttpServletRequest request,HttpServletResponse response) throws Exception {String responseStr = "";long d = System.currentTimeMillis();long readFile = 0;long dealFile = 0;long delTempTable = 0;long insertTempTable = 0;long insertTempTable2 = System.currentTimeMillis();long comm = System.currentTimeMillis();long delDiventory = System.currentTimeMillis();long addDiventory = System.currentTimeMillis();String type = request.getParameter("type");String wareHouseId = request.getParameter("wareHouseId");Integer wareHouseIds = Integer.parseInt(wareHouseId);WareHouseBean wareHouse= wareHouseService.queryById(wareHouseId);String wareHouseName =wareHouse.getWareHouseName();List<GoodsConfigBean> dataLists = goodsconfigService.selectAll();model.setWareHouseId(wareHouseIds);// 根据请求获得用户上传的文件列表信息MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();// 如果用的是Tomcat服务器,则文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\WEB-INF\\upload\\文件夹中String ctxPath = request.getSession().getServletContext().getRealPath("/") + File.separator + "upload";// 获取登录用户信息SysUser user = (SysUser) request.getSession(true).getAttribute("session_user");// 获得用户名字String id = String.valueOf(user.getId());String name = user.getNickName();SimpleDateFormat f = new SimpleDateFormat("MM");// 根据用户名字组合创建存放文件的目录,目錄格式為:用戶ID_當前月份ctxPath += File.separator + id + "_" + f.format(new Date()) + File.separator;// 根据服务器的路径生成文件流File file = new File(ctxPath);// 判断此文件目录是否存在,如果不存在则创建if (!file.exists()) {file.mkdirs();}String fileName = null;for(Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {// 上传文件信息MultipartFile mf = entity.getValue();// 获得要上传文件的原始文件名fileName = mf.getOriginalFilename();// 重命名文件// 构建新的文件名上传到服务器上SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");// 新的文件名为:上传时间_原始文件名.xlsString newFileName = format.format(new Date()) + "_"+ fileName;// 组装后的文件信息如下:ctxPath = ctxPath + newFileName;File uploadFile = new File(ctxPath);//定义处理数量int commitCount = 4000;// 臨時數組List<DataConversionBean> list = new ArrayList<DataConversionBean>();try {System.out.println("upload:" + uploadFile);// 这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉FileUtils.copyInputStreamToFile(mf.getInputStream(), uploadFile);// 调用ReadExcel类进行读出excelProcessExcel re = new ProcessExcel();ArrayList arr = new ArrayList();long tempReadFile = System.currentTimeMillis();readFile = tempReadFile - d;if ("1".equals(type)) {arr = re.getArrayList(wareHouseIds,wareHouseName,ctxPath, name);} else {arr = re.createData(wareHouseIds,wareHouseName,ctxPath, name, 1, goodsconfigService, sizeCompareService,dataLists);}long tempDealFile = System.currentTimeMillis();dealFile = tempDealFile - tempReadFile;//删除数据转换表中的数据dataConversionService.purgeDataConversion();long tempDel = System.currentTimeMillis();delTempTable = tempDel - tempDealFile;//获得导入的数据,并插入数据转换表dataConversionService.addDataConversion(arr);long tempInsert = System.currentTimeMillis();insertTempTable = tempInsert - tempDel;//将数据抓换表中的数据与sizeCompare进行左连接,转换尺码,并以品牌排序List<DataConversionBean> dataSizeCompare = dataConversionService.leftSizeCompare();List<DataConversionBean>removeData = newArrayList<DataConversionBean>();//将新尺码更新进数据转换表//重新清除dataConversion表中的数据dataConversionService.purgeDataConversion();//插入数据dataConversionService.insertDataConversion(dataSizeCompare);long tempInsert2 = System.currentTimeMillis();insertTempTable2 = tempInsert2 - tempInsert;//将数据转换表与brands表左连接,获得brandIdList<DataConversionBean> dataBean = dataConversionService.leftBrands();//重新清除dataConversion表中的数据dataConversionService.purgeDataConversion();//插入数据货号,尺码,数量,dataConversionService.insertDataConversion(dataBean);//再将数据转换表中的数据与commoditySize进行左连接,转换尺码List<DataConversionBean> dataCommodity = dataConversionService.leftCommoditySize();long tempComm = System.currentTimeMillis();comm = tempComm - tempInsert2;//批量删除数据库中的老数据inventoryService.deleteWareHouseId(wareHouseIds);long tempDelDiventory = System.currentTimeMillis();delDiventory = tempDelDiventory - tempComm;//更新数据库//批量添加for (int i = 0; i < dataCommodity.size(); ) {DataConversionBean dataConverBean = dataCommodity.get(i);list.add(dataConverBean);i++;if(i%commitCount == 0){inventoryService.addInventory(list);list.clear();}}if (list.size() > 0) {// 不滿足4000條記錄的再次處理inventoryService.addInventory(list);}long tempAddDiventory = System.currentTimeMillis();addDiventory = tempAddDiventory -tempDelDiventory;// 记录操作库存用户信息UpdatelogBean logBean = new UpdatelogBean();logBean.setName(name);logBean.setFilename(newFileName);SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");logBean.setUpdatetime(dateformat1.format(newDate()));updatelogService.add(logBean);SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");WareHouseBean wareHouseBean = new WareHouseBean();wareHouseBean.setInventoryUpdateTime(dateformat.format(newDate()));wareHouseBean.setId(Integer.parseInt(wareHouseId));;wareHouseService.updateBySelective(wareHouseBean);responseStr = "上传成功";} catch (IOException e) {responseStr = "上传失败";e.printStackTrace();}}//sizeNull , brandNull , newSizeNull//尺码对照表品牌表尺码表long s = System.currentTimeMillis();System.out.println("tatol:"+ (s - d));System.out.println("readFile:"+readFile);System.out.println("dealFile:"+dealFile);System.out.println("delTempTable:"+delTempTable);System.out.println("insertTempTable:"+insertTempTable);System.out.println("insertTempTable2:"+insertTempTable2);System.out.println("comm:"+comm);System.out.println("delDiventory:"+delDiventory);System.out.println("addDiventory:"+addDiventory);return responseStr;}2、Servicepublic ArrayList getArrayList(Integer wareHouseId,String wareHouseName,String path,String name){InputStream is = null;boolean temp = true;HashMap size = new HashMap();HashMap sCell = null;String s = null;String brand = null;String division = null;String sex = null;DataConversionBean dataConversionBean = null;ArrayList all = new ArrayList();try{// Excel文件路径String sourcefile = path;// 获得Excel文档的IO流is = new FileInputStream(sourcefile);// 获得Excel文档对象Workbook rwb = Workbook.getWorkbook(is);// 获得第一个工作表对象Sheet sheet = rwb.getSheet(0);System.out.println(" 获得Excel表格第一个工作表名字: "+ sheet.getName());//获得工作表内容的总行数int rowNO = sheet.getRows();System.out.println(" 获得Excel表格第一个工作表总行书: " + rowNO);// 记录Excel表格的值List<String>rowValueList = new ArrayList<String>();// 循环获取Excel工作表每行的值for (int i = 0; i < rowNO; i++){System.out.print("第 " + i + " 行 ");// 获取每行的所有列Cell[] cellValue = sheet.getRow(i);System.out.println(" 该行一共有 " + cellValue.length + " 列 ");if (cellValue.length == 0){continue;}if (temp){sCell = new HashMap();// 如果上传的Excel表格中有必传字段为空的话,对此行不做任何处理for (int j = 0; j < cellValue.length; j++){// 如果该表格为空,则不做处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

t h e s t r u c t u r e o f t h e f r a me . i t s m o d e l i S e s t a b l i s h e d i n t h e d e s i g n : a n d b y a n a l y s i n g t h e o b j e c t o f t h e f r a me t h e s t a t i c m o d e l i S e s t a b l i s h e d a s
Ab s t r a c t Wi t h t h e w i d e a p p l i c a t i o n o f E x c e l i f l e s i n t h e We b .t h e r e a r e mo r e a n d mo r e E x c e l i f l e s o p e r a t e d i n a p p l i c a t i o n s y s t e m F o r t h e
关键词 中图分类号 框 架设计 MV C模 式 构件设计 软件复用 E x c e l 数据迁移 T P 3 1 9 文献标识码 A D O I : 1 0 . 3 9 6 9 / j . i s s n . 1 0 0 0  ̄8 6 x . 2 0 1 4 . Biblioteka . 0 0 7 葛 中泽
( 鄂州职业大学计算机系 湖北 鄂州 4 3 6 0 0 0 )
摘 要
随着 E x c e l 文件在 We b中的大量使用 , 应用 系统对 E x c e l 文件 的操作越 来越 多。针对 应用 程序对 E x c e l 文件操作 代码复
用 性低 的问题 , 提 出了 E x c e l 数据迁移框 架的设计。首先对框架进行结构分析 , 建立框架 结构模型 , 对框架进 行对象分 析, 建 立静 态 模 型, 然后对框架的具体 实现进行介绍。实际应用表 明, 该框架 能屏蔽底层 不 同数据库 类别 , 能通过接 口扩展来满足 不 同的业务 需 求, 实现应用系统对 E x c e l 数据的导入、 导 出和 图表 显示 , 软件达 到高度的复用。
we l 1 .T h e n.we i n t r o d u c e t h e s p e c i i f c i mp l e me n t a t i o n o f t h e f r a me .A c t u a l a p p l i c a t i o n s h o ws t h a t t h e f r a me c a n s h i e l d d i i f e r e n t d a t a b a s e c a t e g o r i e s i n t h e b o t t o m ,a n d c a n me e t d i f f e r e n t b u s i n e s s n e e d s t h r o u g h e x t e n d i n g t h e i n t e r f a c e t o r e a l i s e t h e i mp o r t s ,e x p o r t s a n d c h a t r
RES EARCH AND I M PLEM ENTATI ON oF M VC PATTERN . BAS ED EXCEL DATA MI GRATI ON FRAM E
Ge Zh o n g z e
( D e p a r t m e n t o fC o m p u t e r S c i e n c e , E z h o u P o l y t e c h n i c U n i v e  ̄ i t y , E z h o u 4 3 6 0 0 0 , H u b e i , c i n a )
d i s p l a y o f t h e a p p l i c a t i o n s y s t e m o n E x c e l d a t a ,S O t h a t t h e s o f t wa r e c a n r e a c h h i g h r e u s e . Ke y wo r d s F r a me d e s i g n MVC p a t t e r n C o mp o n e n t d e s i g n S o f t w a r e r e u s e E x c e l d a t a mi g r a t i o n

p o o r r e u s a b i l i t y o f o p e r a t i o n c o d e f o a p p l i c a t i o n s o n E x c e l i f l e s ,w e p u t f o r wa r d t h e d e s i g n o f Ex c e l d a t a mi g r a t i o n f r a me .F i r s t ,b y a n a l y s i n g
第3 1卷 第 1 期 2 0 1 4年 1月
计算 机应 用与 软件
Co mp u t e r Ap p l i c a t i o n s a n d So twa f r e
Vo 1 . 31 No .1
J a n .2 0 1 4
基 于 MV C模 式 的 E x c e l 数 据 迁 移 框 架研 究 与 实 现
相关文档
最新文档