基于ASP_NET的批量Excel数据导入通用模块的设计与实现_沈浩
基于ASP.NET的Word中插入Excel自动生成图表程序设计
,N P 0 1 . H S S I  ̄ ’ 足 史件 汝
} 要的 E x c e l 艾件 处 胛 代 } 如 所 , J :
∥ 打开模版 E x e c e l 文 件
s t r i n g x l s S r c F i l e=c o n t e x t Se r v e r . Ma p P a t h f l | ~ / t e m—
E x ( e l 巾 的 丧 . 使 川 wO F d 什 , 【 l J ‘ 以 一步 刮 位 直 接 义
埘、 、 t ) r d义 乖 f I E x c e l 表格 处 理 时 .通 常 足按 照
种 横 版 的 准 掸 ‘ t t 术 成新 戈 ,如 果 址 从头 创 建 个 = 新艾 . 编’ 通 常 比较 尔 繁 琐 ,文 际 开 发 l f I 多他川横版 力 ‘ 』 ,Wo l t I 义 I = ’ I 1 r I ・ r , J 抓 入按 E x ( ・ e l 横 版生 成 的 以粜成' - 9 , i I 系统 n 0 外 发 为 例 ,介 _ , 按 模 版 成 新 w l迎
1 引 言
A S P . N E . r J 表格进i 处删 , J I b’ F 哉 【 J ! l J r m 发r { i .经 常 需 要 × - 『 W 、 。 I 史 1 和 - I _ 匕 数 自动 , I ! 成栩』 的 义 ,j i 提 供 给
( ) m c 环境 ,还 州 卡 ・ H 心 的 极
2 设计 概述
陔成 绩 系统 [ h ‘ 脱的 ・ 个 功 能 足 根 据 7 : d 的 - i r J " ! i 成 绩 成 ・ 个 w t I 史什 . 艾什 I I i I包 含按 际 数 槲 成 的 成绩 I ’ l : 力
在ASP.NET中进行EXCEL开发
在中进行EXCEL开发在 中进行 EXCEL 开发在显示大量数据的时候,使用 EXCEL 无疑是一个很好的选择,以网格为基本的数据单元,配合上众多的计算公式和颜色、线条可以组成功能强大而美观的数据报表。
在现代企业中,这种应用也是最为广泛的。
因此在 Web 项目中,生成并输出 EXCEL 报表也成了非常常见的功能。
但是,在 中使用 EXCEL 却一直存在着以 EXCEL 进程无法释放为代表的几个比较讨厌而且难于解决的问题,在这篇文章中将给出完整的解决方案。
其中包含以下几个方面:开发环境配置DCOM在 中进行 EXCEL 编程优化 EXCEL 的执行效率在 Web 项目中使用 EXCEL 的其他方案本文使用了下列技术:.NET、C# 或 Visual Basic .NET、Visual Studio .NET、EXCEL 本页内容开发环境本文讨论的是在 中使用 Microsoft Excel Object Library 进行开发的过程,开发环境的配置如下:Windows 2000 + SP4Office XP + SP1Visual 2003注意:在这里,请确认一下你的操作系统和Office 的版本,包括补丁的版本。
虽然在绝大多数情况下Windows2000/WindowsXP、Office2000/OfficeXP 的任意组合都能正常工作,但也确实存在同样的代码在仅仅是SP版本不同的两台机器上一个执行正常,而另一个却出现异常的情况。
所以,强烈建议使用与服务器环境完全一致的开发环境。
配置DCOM对Excel 进行编程,实际上就是通过 .Net Framework 去调用Excel 的 COM 组件,所有要在 Web 环境下调用 COM 组件的时候,都需要对其进行相应的配置。
很多朋友都反映在Windows 环境下调试正常的程序,一拿到Web 环境中就出错,实际上就是因为缺少了这一步。
下面就详细介绍 DCOM 的配置过程。
ASPNET中实现EXCEL导入和导出
ASPNET中实现EXCEL导入和导出页面效果图如下:录入按钮的OnClick事件代码如下:protectedvoid btnInput_Click(object sender, EventArgs e){if (fpInput.HasFile)//fpInput为FileUpload控件,判断是否选择了文件{string fileExt =System.IO.Path.GetExtension(fpInput.FileName);//获取文件名的后缀if (fileExt == ".xls")//判断文件后缀名是否是xls{try{string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fpInput.PostedFile.FileName + ";Extended Properties=Excel8.0;";//以xls文件创建连接字符串OleDbConnection conn = new OleDbConnection(strConn); OleDbDataAdapter oada = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);oada.Fill(dstInput_JWTYBH, "xlsTable");//填充xls中数据到数据集DataTable dtJWTYBH = dstInput_JWTYBH.Tables["xlsTable"];for (int i = 0; i < dtJWTYBH.Rows.Count;i++)//循环读取xls文件中的数据{strSql = "SELECT COUNT(*) FROM XS_JBXX WHERE XS_XH="" + dstInput_JWTYBH.Tables["xlsTable"].Rows[i]["学号"].ToString() + """;int iStNum = Convert.ToInt32(db.ExecScalar(strSql));if (iStNum == 0){strSql = "INSERT INTO XS_JBXX(XS_XH,XS_SFZH,XS_XM,NJ_ID,BJ_BH,XS_XBM,XS_XJH) VALUES("+ """ + dtJWTYBH.Rows[i]["学号"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["身份证号"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["姓名"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["年级编号"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["班级编号"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["性别码"].ToString() + "","+ """ + dtJWTYBH.Rows[i]["教委统一编号"].ToString() + "")";}else if (iStNum == 1){strSql = "UPDATE XS_JBXX SET "+ "XS_SFZH="" + dtJWTYBH.Rows[i]["身份证号"].ToString() + "","+ "XS_XM="" + dtJWTYBH.Rows[i]["姓名"].ToString() + "","+ "NJ_ID="" + dtJWTYBH.Rows[i]["年级编号"].ToString() + "", " + "BJ_BH="" + dtJWTYBH.Rows[i]["班级编号"].ToString() + "", " + "XS_XBM="" + dtJWTYBH.Rows[i]["性别码"].ToString() + "", "+ "XS_XJH="" + dtJWTYBH.Rows[i]["教委统一编号"].ToString() + "" "+ "WHERE XS_XH="" + dtJWTYBH.Rows[i]["学号"].ToString() + """;}db.ExecCommand(strSql);BindData();}}catch (Exception exp){Response.Write("系统出现以下错误:" +exp.Message +"!请尽快与管理员联系.");}finally{db.Close();}}else{Response.Write("");}}Excel文件的导入在中比较简单,主要的要点是FileUpload控件的使用和用OleDb连接物理xls文件.对xls文件中数据的操作同对DataSet中数据的操作是一样的..下面是对导出功能的实现:先定义一个导出函数/////Excel数据导出函数//////<param< p=""> </param<>name="ctl">需要导出数据的控件///<param< p=""> </param<>name="FileName">导出的Excel文件名private voidToExcel(Control ctl, string FileName)HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("GB2312");HttpContext.Current.Response.Charset = "GB2312";HttpContext.Current.Response.ContentType ="application/ms-excel";HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" + "" + FileName);ctl.Page.EnableViewState = false;System.IO.StringWriter tw = new System.IO.StringWriter();HtmlTextWriter hw = new HtmlTextWriter(tw);ctl.RenderControl(hw);HttpContext.Current.Response.Write(tw.ToString());HttpContext.Current.Response.End();}其中一下两行代码最为重要HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("GB2312");HttpContext.Current.Response.Charset = "GB2312";因为使用GB2312可以解决Excel导出数据出现中文乱码的问题,使用UTF-7/8都会出现乱码.导出按钮的OnClick事件如下:protectedvoid btnOutput_Click(object sender, EventArgs e)gvStJWTYBJ.AllowPaging = false;//设置GridView控件不能分页gvStJWTYBJ.AllowSorting = false;//设置GridView控件不能排序BindData();ToExcel(gvStJWTYBJ, "JWTYBH.xls");gvStJWTYBJ.AllowPaging = true;//恢复GridView控件分页gvStJWTYBJ.AllowSorting =true;//恢复GridView控件排序BindData();//数据绑定函数}如果在页面显示的时候设置了GridView控件是可以分页和排序的则再Excel数据导出的时候就∙分享微经验,让更多的人受益∙快去分享吧!!!只能导出显示的那几条数据而不能导出所有的数据,所以在调用ToExcel()函数进行Excel导出的时候要先设置GridView的排序和分页为false.以上代码还不能实现Excel的数据导出,因为会报以下两个错误.1.类型“GridView”的控件“gvStJWTYBJ”必须放在具有 runat=server 的窗体标记内。
Asp连接读取excel内容并导入到数据库
Asp连接读取excel内容并导入到数据库asp连接excelSet connnew = Server.CreateObject("ADODB.Connection")'hdr取值yes,no ,表示第一行是否为字段名connStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(“test.xls”)&";Extended Properties='Excel 8.0;HDR=No;IMEX=1';"connnew.open connstrSet rsnew=Server.CreateObject("ADODB.Recordset")'Sheet1为excel里面的表名,表名后面一定要加$sqlnew = "select * from [Sheet1$]"rsnew.open sqlnew,connnew,1,1'rows是读取的excel里面数据的行数rows=rsnew.recordcount'cells是读取excel里面数据的列数cells=rsnew.Fields.Count输出记录集rsnew里面的数据,规则是这样的:如果HDR赋值是No的话rsnew(0)输出的是excel里第一行第一列的内容如果HDR赋值是Yes的话rsnew(0)输出的是excel里第二行第一列的内容如果想输出第二行的内容,只需在语句前加rsnew.movenext输出就这么简单的完成了!连接网站数据库,相信各位程序猿都已经会了。
要做的就是用sql语句判断要导入的数据是否存在,存在用update修改一下。
不存在的话addnew重新插入一条即可。
如果想要实现上传excel后导入的话,可以加上一个上传程序,将上传后的excel 路径传输到asp连接excel的字符串里面。
ASP.NETCore中使用EPPlus导入出Excel文件的完整步骤
Core中使⽤EPPlus导⼊出Excel⽂件的完整步骤前⾔这篇⽂章说明了如何使⽤EPPlus在 Core中导⼊和导出.xls/.xlsx⽂件(Excel)。
在考虑使⽤.NET处理excel时,我们总是寻找第三⽅库或组件。
使⽤Open Office Xml格式(xlsx)读取和写⼊Excel 2007/2010⽂件的最流⾏的.net库之⼀是。
这个库现在已经⽀持.NET Core许久了。
这适⽤于Windows,Linux和Mac。
因此,让我们创建⼀个新的 Core WEB API应⽤程序并安装EPPlus.Core。
要安装EPPlus.Core,请在程序包管理器控制台中运⾏以下命令:PM->Install-Package EPPlus.Core或者您可以通过UI界⾯来安装它.⼀切就绪,现在创建⼀个控制器,命名为: ImportExportController ,添加后,让我们编写导出⽅法。
为了⽅便演⽰,我在wwwroot⽂件夹中创建了⼀个excel⽂件,所以我们就需要去获取我们的项⽬的绝对路径。
public class ImportExportController : ControllerBase{private readonly IHostingEnvironment _hostingEnvironment;public ImportExportController(IHostingEnvironment hostingEnvironment){_hostingEnvironment = hostingEnvironment;}}ExcelPackage 在 OfficeOpenXml 命名空间中可⽤的类将⽤于读写xlsx。
定义名为“Export”的新Web api操作⽅法,该⽅法返回⽣成的xlsx⽂件的URL。
所以这是将数据导出到xlsx的完整代码。
其中您需要 using OfficeOpenXml;[HttpGet]public string Export(){string sWebRootFolder = _hostingEnvironment.WebRootPath;string sFileName = @"demo.xlsx";string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName);FileInfo file = new FileInfo(bine(sWebRootFolder, sFileName));if (file.Exists){file.Delete();file = new FileInfo(bine(sWebRootFolder, sFileName));}using (ExcelPackage package = new ExcelPackage(file)){// add a new worksheet to the empty workbookExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Employee");//First add the headersworksheet.Cells[1, 1].Value = "ID";worksheet.Cells[1, 2].Value = "Name";worksheet.Cells[1, 3].Value = "Gender";worksheet.Cells[1, 4].Value = "Salary (in $)";//Add valuesworksheet.Cells["A2"].Value = 1000;worksheet.Cells["B2"].Value = "Jon";worksheet.Cells["C2"].Value = "M";worksheet.Cells["D2"].Value = 5000;worksheet.Cells["A3"].Value = 1001;worksheet.Cells["B3"].Value = "Graham";worksheet.Cells["C3"].Value = "M";worksheet.Cells["D3"].Value = 10000;worksheet.Cells["A4"].Value = 1002;worksheet.Cells["B4"].Value = "Jenny";worksheet.Cells["C4"].Value = "F";worksheet.Cells["D4"].Value = 5000;package.Save(); //Save the workbook.}return URL;}就这样。
ASP.NET中导入Excel数据到数据库的应用与实现
中导入Excel数据到数据库的应用与实现作者:罗丽云段艳萍简碧园来源:《科技创新与应用》2015年第29期摘要:在 中进行Web 开发时,经常需要将各种数据表格导入数据库以便系统对数据进行处理。
文章介绍了Excel与数据库之间的数据导入方法的设计思路,实现了将Excel文件数据导入到数据库中,对信息系统开发有重要的意义。
关键词:;Excel;数据库;数据导入引言数据的导入与导出是与SQL Server 项目中不可或缺的功能模块,是管理信息系统中是较常见的功能。
文章基于项目《SIM卡管理系统设计》中导入Excel数据到数据库中的需求,实现了将Excel表格数据导入到SQL Server中,大大提高了数据的管理功能,实现了对数据的批量管理。
1 实现数据导入方法的设计思路将Excel数据上传到服务器的目录upfile中,连接Excel,以Excel文件作为数据源,将Excel中的数据读取到数据集DataSet中之后,对数据集中的数据按字段进行逐个读取,然后再将读取的数据构成SQL语句插入到对应的数据库中。
2 数据库的数据结构与Excel表格结构设计在这一过程中,首先限制用户只能上传Excel文件,然后再调用(1)中定义的方法,返回数据集,再循环读取数据集中的数据,构建SQL语句插入到数据库中,完成数据的导入。
4 结束语文章通过编写客户端程序来实现数据的导入功能,采用的是中提供的OLE DB Provider for Jet 4.0链接到Excel,将Excel数据读取到数据集对象中,然后再读取数据集中的数据构建SQL语句插入到数据库中。
这种批量的数据导入方式,节省了用户录入数据的时间,也不会因为数据过多而造成遗忘或者混乱。
参考文献[1]沈浩,邓晓军.基于的批量Excel数据导入通用模块的设计与实现[J].电脑知识与技术,2012,12.[2]刘国芳,张炜,冯王兵.基于的批量数据导入方法的研究与实现[J].电脑知识与技术,2014,8.。
asp.net实现Excel数据批量导入Web系统数据库word精品文档6页
asp实现Excel数据批量导入Web系统数据库【摘〓要】本文以学生信息管理系统中导入成绩表为例,介绍了利用asp将Excel数据批量导入到Web系统的sql数据库的实现过程。
目前,基于Web的信息管理系统,有的涉及到大量数据录入的问题,如学生信息管理系统,有学籍表、各班成绩表等信息,这些数据都已经存在Excel表中,如果能直接导入是最好的解决办法,就能避免了人工录入过程中的工作量大、效率低、容易出错等问题,其实Asp动态网页开发技术就能解决这一问题。
一般学籍表的格式和数据库的库结构的设计基本是一样的,Excel的表头和数据库的字段能够一一对应,但成绩表就不一样了,由于全校班级不同,所上的课程不同,在数据库设计时就不能和Excel 成绩表相同,下面我就以导入成绩表为例来说明如何实现将Excel数据批量导入到Web系统的Sql数据库中。
1、数据结构设计Excel成绩表结构如下:Sql数据库成绩表t_scores结构设计如下:由于学号是唯一的,所以不用设置姓名、班级、系部等字段,根据学号在学籍表中都能查到,避免了数据冗余。
通过上述表结构可以看出,需要把Excel表的不同的课程名作为Sql数据库成绩表中的一条记录中的一个内容导入,即一门课程占一条记录,以下来说明具体实现过程。
2、导入成绩界面设计导入数据必须把数据文件上传,上传所用控件为FileUpload,用来浏览上传文件,然后再用一个Button按钮控件,负责执行导入成绩这一过程,当点击“导入成绩”按钮时,系统自动执行Button1_Click事件程序。
再设计几个Label控件用来显示提示信息。
HTML代码如下:3、导入Excel数据程序分析3.1、添加引用为了能够上传、连接、读取Excel文件,要引入System.IO、System.Data、System.Data.OleDb命名空间,若要对SQL Server数据库操作,必须引入System.Data.Sql、System.Data.SqlClient命名空间。
asp实现excel中的数据导入数据库
asp实现excel中的数据导⼊数据库asp实现excel中的数据导⼊数据库<% Response.CodePage=65001%><% Response.Charset="UTF-8" %><%wenjian = request.Form("select")'获取⽂件扩展名ext = FileExec(wenjian)'判断⽂件扩展名if ext <> "xls" thenresponse.Write("<script>alert('⽂件类型不对,请核实!');window.location.href='index.html';</script>")response.End()end ifDim objConn,objRSDim strConn,strSqlset objConn=Server.CreateObject("ADODB.Connection")set objRS=Server.CreateObject("ADODB.Recordset")excelFile = server.mappath(wenjian)'针对excel 2007strConn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & excelFile & ";" & "Extended Properties=Excel 8.0;"objConn.Open strConnstrSql="SELECT * FROM [Sheet1$]"objRS.Open strSql,objConn,1,1objRS.MoveFirst%><!--#include file="conn.asp"--><%'循环excel中所有记录while not objRS.eofset rs = Server.CreateObject("Adodb.Recordset")'查询语句sql_s = "select * from ceshi where lname='" & objRS(0) & "' and old='" & objRS(1) & "' and sex='" & objRS(2) & "' and guojia='" & objRS(3) & "' and QQ='" & objRS(4) & "'" rs.open sql_s, conn, 1, 1'重复的数据不做录⼊操作if rs.eof then'插⼊语句'****excel中第⼀条不会被录⼊****sql = "insert into ceshi (lname, old, sex, guojia, QQ)values ('" & objRS(0) & "', '" & objRS(1) & "', '" & objRS(2) & "', '" & objRS(3) & "', '" & objRS(4) & "')"'执⾏插⼊conn.execute(sql)end ifobjRS.MoveNextrs.closeset rs = nothingwend'⼜到了各种关闭的时候conn.closeset conn = nothingobjRS.CloseobjConn.Closeset objRS = Nothingset objConn = Nothingresponse.Write("<script>alert('导⼊成功');window.location.href='index.html';</script>")response.End()Function FileExec(fileName)FileExec = Mid(fileName,Instr(fileName,".")+1,Len(fileName)-Instr(fileName,"."))End Function%>再分享⼀个简化版的代码wenjian=request.Form("floor")fileext=mid(wenjian,InStrRev(wenjian,".")+1)if lcase(fileext)<>"xls" thenresponse.write "<script>alert ('⽂件格式不对,请上传Excel⽂件');window.location.href='updateFloor.asp';</script>"response.endend ifset conne=server.CreateObject("ADODB.Connection")connStre="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath( ""&wenjian&"" )&";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';"conne.open connStreSqle="select * from [sheet1$] "Set rse = Server.CreateObject("ADODB.Recordset")rse.open sqle,conne,1,1'验证hang=2do while not rse.eof'名称不能为空if trim(rse(0))<>"" thenelsemess="第"& hang &"⾏名称为空,请检查!"response.Write"<script>alert('"& mess &"').window.location.href='updateFloor.asp'</script>"response.End()end ifrse.movenexthang=hang+1looprse.movefirstdo while not rse.eofset rst=server.CreateObject("adodb.recordset")sqlt="select * from Sellman"rst.open sqlt,conn,1,3rst.addnew()rst("CompanyName")=c2(rse(0))rst("CompanyInfo")=c2(rse(1))rst("address")=c2(rse(2))rst("tel")=c2(rse(3))&" "&c2(rse(7))rst("Fax")=c2(rse(4))rst("linkman")=c2(rse(5))rst("Homepage")=c2(rse(8))rst("Email")=c2(rse(6))rst.update()rst.closeset rst=nothingrse.movenextlooprse.closeset rse=nothingresponse.Write "<script>alert('导⼊成功!');location.href='updateFloor.asp';</script>"其实简单的说象access 数据库⼀样,把excel⽂件打开,再进⾏读再写到access中你要写到sqlserver中就把写的过程改⼀下就成了看下代码:dim conndim conn2set conn=CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Data Source=c:\book1.mdb"set conn2=CreateObject("ADODB.Connection")conn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Extended properties=Excel 5.0;Data Source=c:\book1.xls"sql = "SELECT * FROM [Sheet1$]"set rs = conn2.execute(sql)while not rs.eofsql = "insert into xxx([a],[b],[c],[d]) values('"& fixsql(rs(0)) &"','"& fixsql(rs(1)) &"','"& fixsql(rs(2)) &"','"& fixsql(rs(3)) &"')"conn.execute(sql)rs.movenextwendconn.closeset conn = nothingconn2.closeset conn2 = nothingfunction fixsql(str)dim newstrnewstr = strif isnull(newstr) thennewstr = ""elsenewstr = replace(newstr,"'","''")end iffixsql = newstrend function。
ASP.NET之Excel下载模板、导入、导出操作
之Excel下载模板、导⼊、导出操作本⽂介绍了下Excel下载模板、导⼊、导出操作,供⼤家参考,具体内容如下1.下载模板功能protected void btnDownload_Click(object sender, EventArgs e){var path = Server.MapPath(("upfiles\\") + "test.xlt"); //upfiles-⽂件夹 test.xlt-⽂件var name = "test.xlt";try{var file = new FileInfo(path);Response.Clear();Response.Charset = "GB2312";Response.ContentEncoding = System.Text.Encoding.UTF8;Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name)); //头信息,指定默认⽂件名Response.AddHeader("Content-Length", file.Length.ToString());//显⽰下载进度Response.ContentType = "application/ms-excel"; // 指定返回的是⼀个不能被客户端读取的流,必须被下载Response.WriteFile(file.FullName); // 把⽂件流发送到客户端pleteRequest();}catch (Exception ex){Response.Write("<script>alert('错误:" + ex.Message + ",请尽快与管理员联系')</script>");}}2.导⼊数据Excel数据导⼊到数据库中。
用ASP上传Excel表格并导入到数据库
用ASP上传Excel表格并导入到数据库<%set upload=new upload_5xSoftset file=upload.file("file1")formPath="../upload1/"if file.filename="" thenresponse.Write "<script language=‘javascript‘>alert(‘你没选择文件!‘);history.go(-1);</script>"elseif file.filesize>1000 thenfileExt=lcase(right(file.filename,3))if fileExt<>"xls" thenResponse.Write"文件类型非法"Response.endend ifend ifrandomizeranNum=int(9000000*rnd)+10000filename=formPath&year(now)&month(now)&day(now)&h our(now)&minute(now)&second(now)&ranNum&"."&fileExt if file.FileSize>0 thenfile.SaveAs Server.mappath(FileName)end ifconnstr = "driver={microsoft Access driver (*.mdb)}; dbq=" & server.mappath("../../data/#data.mdb")set conn3 = server.createobject("ADODB.CONNECTION")conn3.open connstrset rs=server.createobject("adodb.recordset")rs.Open "select * from User whereUserName=‘"&Session("user")&"‘ " ,conn3,3,3rs("log")=cstr(FileName)rs.updaters.closeconn3.close‘这里用来写导入数据库的程序kl=FileNameop=len(kl)op2= mid(kl,3,op-2)strAddr = Server.MapPath(""&kl)set excelconn=server.createobject("adodb.connection")‘strAddr = file‘‘输出源文件名excelconn.open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & strAddr‘‘建立excel记录集set rs2=server.createobject("adodb.recordset")set rs3= Server.CreateObject("ADODB.Recordset")set rs3 = excelconn.OpenSchema(20)op=rs3("TABLE_NAME")sql="select * from "+"["+ op+"]"rs2.open sql,excelconn,1,1‘找到表connstr = "driver={microsoft Access driver (*.mdb)}; dbq=" & server.mappath("../../data/#data1.mdb")set conn = server.createobject("ADODB.CONNECTION")conn.open connstrstrSQL="Delete * From Sheet1 Where user=‘"&Se ssion("user")&"‘"conn.execute strSQLconnstr = "driver={microsoft Access driver (*.mdb)}; dbq=" & server.mappath("../../data/#data1.mdb")set conn = server.createobject("ADODB.CONNECTION")‘删除以前的信息conn.open connstrset rs4= Server.CreateObject("ADODB.Recordset")rs4.open "select * from Sheet1",conn,3,3if rs4.Fields.Count-3 <> rs2.Fields.Count-1 thenresponse.write "要上传的表格格式不对,不能导入统一数据库!"response.endelse‘导入过程for j = 1 to rs2.recordCountrs4.addnewfor i = 0 to rs2.Fields.Count-1rs4.Fields("user")=Session("user")rs4.Fields(i+1)=rs2.Fields(i)nextrs2.movenextnextend if‘ ............‘kl=""strSQL="delete FROM Sheet1 where isnull(品名) = true" conn.execute strSQLconn.closeresponse.write "成功 "response.redirect "../../index.asp"end if。
实现预处理或多表的Excel文件数据批量导入方法-asp论文-计算机论文
实现预处理或多表的Excel文件数据批量导入方法-asp论文-计算机论文——文章均为WORD文档,下载后可直接编辑使用亦可打印——系统的测试资料数据录入是系统数据流的入口,因此十分重要。
在某油气田测试平台中录入油气井测试资料数据时,面临两个问题:第一由于每个测试项目的子作业工序很多,;第二是由于测试项目中某些作业工序的测试数据非常多,如果在作业工序中采用逐条数据记录添加的方式,这样既容易出错效率又低。
从现有的油气井测试资料来看,测试作业中业务流程的测试数据大多数都是采用二维表格的形式储存的,下边介绍两种数据导入方法的设计思路和实现,分别是实现预处理的批量数据导入方法和多表的Excel文件数据批量导入方法。
1 传统的数据批量导入方法传统的数据批量导入方法主要有SQL的DTS工具导入、第三方数据软件导入、SQL语句数据导入和编写数据导入代码等方法。
通过几种方法的对比得出编写数据批量导入代码方法相对而言更加适合用户,程序员将导入代码直接封装在程序中,用户直接在系统中操作界面即可完成,但是这种方法也暴露出了很多缺点:第一,数据导入中的寻找和匹配字段问题;第二,对导入的数据全角半角和数据类型判断的问题;第三,数据导入失败之后无法给用户提供出错信息。
针对该方法中出现的问题,系统设计了一种实现预处理的批量数据导入方法,该方法解决了在以上的方法中暴露的缺点,真正地解决了批量数据导入的问题。
2 实现预处理的数据批量导入方法实现预处理的数据批量导入方法的设计思路是:将Excel数据上传到服务器的临时目录中,连接Excel,以Excel文件作为数据源,将Excel中的数据读取到数据集DataSet中之后,对数据集中的数据进行检查,如果Excel数据文件的结构与数据库对应表的结构不一致提示用户出错,否则检查数据的数据类型和全角半角是否符合要求,判断的方法是采用正则表达式对每个单元格的数据进行判断,如果数据是全角输入或者数据类型不符合,将此条数据写入到日志文件中,然后继续判断下边的数据,当所有的数据检查完成之后将日志文件返回给用户进行修改并自动删除上传到服务器临时目录里边的Excel文件。
基于ASP.NET数据导入的程序设计
基于数据导入的程序设计作者:柴作良来源:《科技资讯》2015年第34期摘要:在信息管理系统中,数据的导入功能会极大提高软件可用性,而良好的数据导入功能将会节约使用成本,提高工作效率。
该文结合软件开发项目《综合实操管理系统》的导入程序设计,在VISUAL STADIO环境下采用C#语言对导入程序的算法及代码进行设计和分析,为软件开发人员快速开发数据导入模块或功能提供一定的思路和方法。
关键词: C# 控件 SQL中图分类号:G424 文献标识码:A 文章编号:1672-3791(2015)12(a)-0006-02在应用软件开发中,常常涉及数据库应用技术。
数据库中的数据可以通过逐条录入的方式获得。
但当已经储备了大量现成电子的数据时,再通过逐条录入方式就显得费时费力,甚至不排除所在录入数据过程中频繁出错,影响了数据一致性和可靠性,所以导入已有的数据成为了应用系统必备功能之一。
在数据导入过程中,程序可以较好地控制数据类型、长度,自动检查数据是否合理、是否冲突等。
在数据的导入时,需要导入的可以是文本文件、WORD文件、EXCEL表格甚至其它的数据表格等,由于原始数据格式的不同,程序设计方法也不尽相同。
由于现在办公中所用到的很多数据是EXCEL电子表格采集或存储的,该文以EXCEL文件数据源为例,结合所开发的《综合实操管理系统》,采用中的C#语言编程,实现把EXCEL电子文档导入到SQL SERVER数据库中,并对程序的算法和代码做了进一步的研究和分析。
1 数据表结构在《综合实操管理系统》中,涉及很多数据表都需要输入原始数据。
其中院系指导教师表用来保存实操指导教师的信息,而这些基本信息数据量大并已经用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)。
[原创]Net实现Excel导入导出到数据库(附源码)
[原创]Net实现Excel导⼊导出到数据库(附源码)关于数据库导出到Excel和SQLServer数据导出到Excel的例⼦,在博客园有很多的例⼦,⾃⼰根据⽹上搜集资料,⾃⼰做了亦歌简单的demo,现在分享出来供初学者学习交流使⽤。
⼀、数据库导⼊导出到Excel,⽐较流⾏的有两种⽅式:采⽤传统的office类库和采⽤NPOI⽅式。
1、传统的office类库使⽤的时候,本地需要安装office才可以正常使⽤,⽽且导出速度相对⽐较慢。
有点:⽀持office 2003 、office2007等。
2、采⽤NPOI⽅式本地不需要安装office,⽽且导出速度⽐传统的⽅式快的多,两种格式⼀个是HSSF⽀持(适⽤2007以前的版本),另⼀个是XSSF(XSSF适⽤2007版本及其以上的)。
⼆、简单代码介绍:1、DataTable导出到Excel的MemoryStream1public static MemoryStream DataGridViewToExcel(DataGridView myDgv, string strHeaderText)2 {3 HSSFWorkbook workbook = new HSSFWorkbook();4 HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();56#region右击⽂件属性信息7 {8 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();9 pany = "NPOI";10 workbook.DocumentSummaryInformation = dsi;1112 SummaryInformation si = PropertySetFactory.CreateSummaryInformation();13 si.Author = "⽂件作者信息"; //填加xls⽂件作者信息14 si.ApplicationName = "创建程序信息"; //填加xls⽂件创建程序信息15 stAuthor = "最后保存者信息"; //填加xls⽂件最后保存者信息16 ments = "作者信息"; //填加xls⽂件作者信息17 si.Title = "标题信息"; //填加xls⽂件标题信息18 si.Subject = "主题信息";//填加⽂件主题信息19 si.CreateDateTime = System.DateTime.Now;20 workbook.SummaryInformation = si;21 }22#endregion2324 HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();25 HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();26 dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");2728//取得列宽29int[] arrColWidth = new int[myDgv.Columns.Count];30foreach (DataGridViewColumn item in myDgv.Columns)31 {32 arrColWidth[item.Index] = Encoding.GetEncoding(936).GetBytes(item.HeaderText.ToString()).Length;33 }34//可以在循环⾥⾯⾃⼰设置列宽35for (int i = 0; i < myDgv.Rows.Count; i++)36 {37for (int j = 0; j < myDgv.Columns.Count; j++)38 {39int intTemp = Encoding.GetEncoding(936).GetBytes(myDgv.Rows[i].Cells[j].ToString()).Length;40if (intTemp > arrColWidth[j])41 {42 arrColWidth[j] = intTemp/5;43 }44 }45 }46int rowIndex = 0;47foreach (DataGridViewRow row in myDgv.Rows)48 {49#region新建表,填充表头,填充列头,样式50if (rowIndex == 65535 || rowIndex == 0)51 {52if (rowIndex != 0)53 {54 sheet = (HSSFSheet)workbook.CreateSheet();55 }5657#region表头及样式58 {59 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);60 headerRow.HeightInPoints = 25;61 headerRow.CreateCell(0).SetCellValue(strHeaderText);6263 HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();64// headStyle.Alignment = CellHorizontalAlignment.CENTER;65 HSSFFont font = (HSSFFont)workbook.CreateFont();66 font.FontHeightInPoints = 20;67 font.Boldweight = 700;68 headStyle.SetFont(font);69 headerRow.GetCell(0).CellStyle = headStyle;70// sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1)); 71//headerRow.Dispose();72 }73#endregion747576#region列头及样式77 {78 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1);79 HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();80//headStyle.Alignment = CellHorizontalAlignment.CENTER;81 HSSFFont font = (HSSFFont)workbook.CreateFont();82 font.FontHeightInPoints = 10;83 font.Boldweight = 700;84 headStyle.SetFont(font);85foreach (DataGridViewColumn column in myDgv.Columns)86 {87 headerRow.CreateCell(column.Index).SetCellValue(column.HeaderText);88 headerRow.GetCell(column.Index).CellStyle = headStyle;8990//设置列宽91 sheet.SetColumnWidth(column.Index, (arrColWidth[column.Index] + 1) * 256);92 }93// headerRow.Dispose();94 }95#endregion9697 rowIndex = 2;98 }99#endregion100101102#region填充内容103 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);104if (row.Index > 0)105 {106foreach (DataGridViewColumn column in myDgv.Columns)107 {108 HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Index);109110string drValue = myDgv[column.Index, row.Index-1].Value.ToString();111112switch (column.ValueType.ToString())113 {114case"System.String"://字符串类型115 newCell.SetCellValue(drValue);116break;117case"System.DateTime"://⽇期类型118 System.DateTime dateV;119 System.DateTime.TryParse(drValue, out dateV);120 newCell.SetCellValue(dateV);121122 newCell.CellStyle = dateStyle;//格式化显⽰123break;124case"System.Boolean"://布尔型125bool boolV = false;126bool.TryParse(drValue, out boolV);127 newCell.SetCellValue(boolV);128break;129case"System.Int16"://整型130case"System.Int32":131case"System.Int64":132case"System.Byte":133int intV = 0;134int.TryParse(drValue, out intV);135 newCell.SetCellValue(intV);136break;137case"System.Decimal"://浮点型138case"System.Double":139double doubV = 0;140double.TryParse(drValue, out doubV);141 newCell.SetCellValue(doubV);142break;143case"System.DBNull"://空值处理144 newCell.SetCellValue("");145break;146default:147 newCell.SetCellValue("");148break;149 }150151 }152 }153else154 { rowIndex--; }155#endregion156157 rowIndex++;158 }159using (MemoryStream ms = new MemoryStream())160 {161 workbook.Write(ms);162 ms.Flush();163 ms.Position = 0;164165 sheet.Dispose();166//workbook.Dispose();//⼀般只⽤写这⼀个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet 167return ms;168 }169 }2、读取excel到DataTable///<summary>读取excel///默认第⼀⾏为标头///</summary>///<param name="strFileName">excel⽂档路径</param>///<returns></returns>public static DataTable Import(string strFileName){DataTable dt = new DataTable();HSSFWorkbook hssfworkbook;using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)){hssfworkbook = new HSSFWorkbook(file);}HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);System.Collections.IEnumerator rows = sheet.GetRowEnumerator();HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);int cellCount = stCellNum;//获取表头for (int j = 0; j < cellCount; j++){HSSFCell cell = (HSSFCell)headerRow.GetCell(j);dt.Columns.Add(cell.ToString());}for (int i = (sheet.FirstRowNum + 1); i <= stRowNum; i++){HSSFRow row = (HSSFRow)sheet.GetRow(i);DataRow dataRow = dt.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++){if (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}dt.Rows.Add(dataRow);}return dt;}3、批量导⼊⼤批量数据的写法( SqlBulkCopy )private void btnImport_Click(object sender, EventArgs e){string constr = System.Configuration.ConfigurationSettings.AppSettings["connstr"].ToString();#region 选择⽂件模块string path = "";//初始化⼀个OpenFileDialog类OpenFileDialog fileDialog = new OpenFileDialog();//判断⽤户是否正确的选择了⽂件if (fileDialog.ShowDialog() == DialogResult.OK){//获取⽤户选择⽂件的后缀名string extension = Path.GetExtension(fileDialog.FileName);//声明允许的后缀名string[] str = new string[] { ".xls" };if (!((IList)str).Contains(extension)){MessageBox.Show("仅能上传xls格式的Excel⽂件!");}else{//获取⽤户选择的⽂件,并判断⽂件⼤⼩不能超过20K,fileInfo.Length是以字节为单位的FileInfo fileInfo = new FileInfo(fileDialog.FileName);if (fileInfo.Length > 204800000){MessageBox.Show("上传的Excel不能⼤于200M");}else{path = fileDialog.FileName;//在这⾥就可以写获取到正确⽂件后的代码了}}}#endregionSystem.Diagnostics.Stopwatch timeWatch = System.Diagnostics.Stopwatch.StartNew();DataTable dtnew = NPOIExcelHelper.Import(path);DataTable ss = GetDt();if (dt != null && dt.Rows.Count != 0){int n = 2500;//遍历每⼀⾏执⾏插⼊操作foreach (DataRow item in dtnew.Rows){ss.Rows.Add(n,2, item["专业名称"], item["专业代码"], DateTime.Now, 0);n++;}}SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(constr, eInternalTransaction);sqlbulkcopy.DestinationTableName = "COMM_ZZ_COURSE_CLASS";//数据库中的表名sqlbulkcopy.WriteToServer(ss);timeWatch.Stop();MessageBox.Show("数据导⼊成功耗时为:" + timeWatch.Elapsed + "");} 说明:本⼈属于新⼿写⽂章,⽔平有限,如果发现⽂章有错误的地⽅,欢迎指出,多谢各位朋友,希望⼤家共同进步。
Asp.net导入Excel数据文件
导⼊Excel数据⽂件实现页⾯选择查找⽂件,并导⼊以如下结构为模板的Excel数据⽂件前台设计界⾯如下:在这⾥使⽤的FileUpload控件实现⽂件查找选择,前台代码如下:<html xmlns="/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><base target="_self"/></head><body style="height: 380px; width: 1000px; background-color: #B9D3EE;"><form id="form1" runat="server"><div style="margin-top: 50px; margin-left: 50px;"><div style="height: 38px"><asp:Label runat="server" Text="⽂件*:" Width="60px"></asp:Label><asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="450px"/></div><div style="height: 68px; margin-top: 60px;"><div style="float: left; margin-left: 85px"><asp:Button ID="btnImport" runat="server" Text="上传" Width="60px" Height="30px" OnClick="btnImport_Click"/> </div><div style="float: left; margin-left: 60px"><asp:Button ID="btnClose" runat="server" Text="关闭" Width="60px" Height="30px" OnClick="btnClose_Click"/> </div></div></div></form></body></html>选择⽂件后点击上传按钮触发后台点击事件。
由EXCEL文件导入PLC模块的操作方法
宽度 以下项之间的距离 每个图形的阶梯数 每个阶梯的横档数
横档间距 I/O 启动时跳过横档计数 抑制 信号箭头样式
模块 PLC 图形样式
输入距中性点的偏移值
输出距热母线的偏移值
z X 区域:与 X-Y 网格类似,但没有 Y 轴。在 X 区域设置对话框中,可以设置图 形的水平标签、间距和原点。
提示 如果希望区域参考原点在图形的右 侧,请使用负的区域间距值。
注意 确保您的模板不包含任何现有阶梯。
保存
将要重复使用的电子表格信息保存在 .wdi 文件中。保存新 .wdi 文件后,将重新显示“电子表格到 PLC I/O 实用程序”对话框,新 .wdi 文件名将显示在“设置”编辑框中。
电子表格/表格列
显示用于查看并将电子表格列映射到 PLC 模块符号上属性的“电子表格到 PLC I/O 图形生成器”对话 框。
图形模板
您可以强制此工具使用用于新图形的特定模板。输入含完整路径的模板图形文件名,或单击“浏览”以搜
索现有模板(这样将在保存所有用户图形模板的 AutoCAD 模板文件夹中进行搜索)。对于当前默认模 板,将保留该值为空。如果您不想使用模板图形,请在编辑框中输入一个圆点。
指定输入模块插入偏移距离(垂直阶梯 方向 – 沿右侧垂直母线的 +X 方向测量 的值,水平阶梯方向 – 沿下部水平母线 的 +Y 方向测量的值)。
指定输出模块插入偏移距离(垂直阶梯 方向 – 沿左侧垂直母线的 -X 方向测量 的值,水平阶梯方向 – 沿上部水平母线 的 -Y 方向测量的值)。
注意 如果无法确定模块类型,或者模块 类型为输入和输出的组合,则会将模块 插入阶梯中部。
A B
C
2. 在“电子表格到 PLC I/O 实用程序”对话框中,单击“设置”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Computer Knowledge and Technology 电脑知识与技术第8卷第34期(2012年12月)基于 的批量Excel 数据导入通用模块的设计与实现沈浩,邓晓军(湖南工业大学计算机与通信学院,湖南株洲412000)摘要:在使用ASP 或 进行Web 开发中,经常需要将各种数据表格导入数据库以便系统对数据进行处理。
该文通过对Excel 与数据库之间的数据导入方法的研究和剖析,实现了将批量Excel 文件数据导入数据库表的通用模块的设计。
该模块适用范围较广,对信息系统开发有重要的意义。
关键词:Excel ; ;导入;数据库中图分类号:TP393文献标识码:A 文章编号:1009-3044(2012)34-8101-02General Module of Batch Excel Data Import to Database Design and Implementation Based on SHEN Hao,DENG Xiao-jun(School of Computer and Communication ,Hunan University of Technology ,Zhuzhou 412000,China )Abstract :As Web development by using ASP and ,various data tables should be imported into the database,as to con⁃venience to data processing.This article research and analysis data importing method between Excel and the database and real⁃ized the general module design of batch Excel file data import into a database table.This module has wide range of applica⁃tion,and has important significance to information system development.Key words:component ;Excel ; ;import ;database1概述在MIS 系统中,经常需要用户进行数据的录入,显然,逐条录入必定增加用户的工作量,而且耗时长。
当数据量很大时,数据的录入将十分烦琐,大大降低客户的工作效率。
而Excel 工作簿是日常办公中常用的桌面电子表格,以其功能强大,界面友好等受到了许多用户的欢迎。
如果能将处理好的Excel 数据按照系统的要求进行整理后再批量导入到数据库中以实现数据的快速录入这将会给用户带来极大的方便,大大提高工作效率。
所以,开发一个批量EXCEL 文件导入不同数据库的通用模块是必要的。
2批量导入功能的设计和实现基于 的批量Excel 数据导入模块如图1所示。
具体实现过程是:首先,根据用户指定的Excel 文件名,上传到页面表单的ListBox 控件中进行显示,当用户选择每一条ListBox 的文件名列表,GridView 中将动态增加该文件的表单名称以及生成导入方式的DropDownList ,用户对所需导入的表单进行配置。
确定后选择所需导入的数据库的类型,如果Excel 数据是导入Access 数据库则输入路径,如果是导入SQLSERVER 则输入SQLSERVER 服务器名,选择登录方式后从下拉列表DropDownList 中选择需导入数据的对应的SQL 表名。
最后单击[导入]命令按钮,则程序在后台将按照用户选择的文件列表及配置的表单导入到指定数据库中。
将EXCEL 文件表单批量导入到Access 核心代码如下:object missing =System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application excel =new Microsoft.Office.Interop.Excel.Application();Microsoft.Office.Interop.Excel.Workbook workbook =excel.Workbooks.Open(ExcelFileName,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Microsoft.Office.Interop.Excel.Worksheet worksheet;Microsoft.Office.Interop.Access.Application access =new Microsoft.Office.Interop.Access.Application();worksheet =((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[ExcelSheetName]);收稿日期:2012-10-20作者简介:沈浩(1977-),男,湖南株洲人,硕士,讲师,主要研究方向为软件开发及图形图像;邓晓军(1975-),男,湖南株洲人,硕士,副教授,主要研究方向为软件理论及信息安全技术。
E-mail:jslt@ Tel:+86-551-56909635690964ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.8,No.34,December 2012.图1数据导入配置界面worksheet.Move(workbook.Sheets[1],missing);object P_obj_Name=(object);excel.DisplayAlerts=false;workbook.Save();System.Diagnostics.Process[]excelProcess=System.Diagnostics.Process.GetProcessesByName("EXCEL");foreach(System.Diagnostics.Process p in excelProcess)p.Kill();access.Visible=false;access.OpenCurrentDatabase(txtAccess.Text,false,"");//txtAccess记录ACCESS文件路径的TextBox控件access.DoCmd.TransferSpreadsheet(Microsoft.Office.Interop.Access.AcDataTransferType.acImport,Microsoft.Office.Interop.Access.Ac⁃SpreadSheetType.acSpreadsheetTypeExcel97,P_obj_Name,ExcelFileName,true,missing,missing);access.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveAll);CloseProcess("MSACCESS");将EXCEL文件表单批量导入到SqlServer中核心代码:DataSet myds=new DataSet();string OleDBConStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ExcelFileName+";Extended Properties=Excel8.0;";//Ex⁃celFileName文件名OleDbConnection OleDBCon=new OleDbConnection(OleDBConStr);string ExcelSqlStr="";OleDbDataAdapter oledbda=null;ExcelSqlStr=string.Format("select*from[{0}$]",ExcelSheetName);//ExcelSheetName表单名oledbda=new OleDbDataAdapter(ExcelSqlStr,OleDBConStr);oledbda.Fill(myds,ExcelSheetName);string CreateTabSqlStr=string.Format("create table{0}(",ExcelSheetName);foreach(DataColumn c in myds.Tables[0].Columns){CreateTabSqlStr+=string.Format("[{0}]varchar,",c.ColumnName);}CreateTabSqlStr=CreateTabSqlStr+")";using(SqlConnection sqlcon=new SqlConnection(SqlConStr))(下转第8108页)教师合作信息管理模块实现以下的功能:添加合作信息,修改合作信息,删除合作信息,查看合作信息。
在本系统中,通过教师合作信息管理模块的设计,充分体现了以教师信息为核心的系统设计思想。
事件提醒信息管理模块实现以下的功能:添加提醒信息,修改提醒信息,删除提醒信息,查看提醒信息。
打印模块打印的信息是教师详细信息。
本系统类似与资源管理器的管理界面更能方便用户对该系统的操作。
人性化的设计理念更适合大多数企业对自己教师的管理。
在进行相应的操作时系统将会有相应的提示信息。
6结束语教师信息管理系统在实际使用中完成基本的教师信息管理功能,为教学管理提高工作效率。
参考文献:[1]李勇.继电保护定值管理系统的设计与开发[D].保定:华北电力大学(河北),2008.[2]李杰.基于的学校办公自动化系统设计与实现[D].哈尔滨:哈尔滨工程大学,-2006.[3]·C#+Access学院报名管理信息系统[EB/OL].[2011-03-12]./article/dotnet/500.html.[4]MVF(29)人事管理系统的设计与实现[EB/OL].[2010-10-17]./htm/2010520/2868.htm[5]刘荣照.基于Web的OA系统实现[D].华东师范大学,2009.[6]基于PB的图书管理系统[EB/OL].[2011-03-30]./mon.php?action=viewnews&op=up&itemid=61173&cat⁃id=166.(上接第8102页){sqlcon.Open();SqlCommand sqlcmd=sqlcon.CreateCommand();mandText=CreateTabSqlStr;sqlcmd.ExecuteNonQuery();sqlcon.Close();}using(SqlBulkCopy bcp=new SqlBulkCopy(SqlConStr))//bcp导入{bcp.BatchSize=100;bcp.DestinationTableName=ExcelSheetName;bcp.WriteToServer(myds.Tables[0]);}3结束语该文为了方便开发者,为了增强导入模块的可重用性和可移植性,介绍了在Visual 环境下,一种可让用户自行选择Excel文件中的任意表、导入进不同数据库表的通用导入数据模块的设计方法。