1. ASP对Excel的基本操作
(1) 建立Excel对象 创建Excel对象可以通过下面的代码来实现: <% set objExcelApp = CreateObject("Excel.Application") objExcelApp.DisplayAlerts = false '不显示警告 objExcelApp.Application = false '不显示界面 %> (2) 新建Excel文件 新建Excel文件可以通过以下代码来实现: <% objExcelApp.WorkBooks.add set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.Sheets(1) %> (3) 读取已有的Excel文件 读取已有的Excel文件可以通过下面的代码来实现 <% strAddr = Server.MapPath(".") objExcelApp.WorkBooks.Open(strAddr & "TempletTable.xls") set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.WorkSheets(1) %> (4) 另存Excel文件 另存Excel文件可以通过以下代码来实现 <% objExcelBook.SaveAs strAddr & "templateTables.xls" %> (5) 保存Excel文件 保存Excel文件可以通过以下代码来实现: <% objExcelBook.Save %> (6) 退出Excel操作 <% objExcelApp.Quit '一定要退出 set objExcelApp = nothing %> 2 读取Excel文件的实例 <% set xlApp = server.CreateObject("Excel.Application") %> 2 读取Excel文件的实例 <% set xlApp = server.CreateObject("Excel.Application") strsource = server.MapPath("xl.xls") set xlbook = xlApp.WorkBooks.Open(strsource) set xlsheet = xlbook.Worksheets(1) i = 1 response.write "<table>" while xlsheet.cells(i,1) <> "" response.write "<tr>" response.write "<td>" & xlsheet.Cells(i,1) & "</td>" response.write "<td>" & xlsheet.Cells(i,2) & "</td>" response.write "<td>" & xlsheet.Cells(i,3) & "</td>" response.write "<tr>" i = i + 1 wend response.write "</table>" set xlsheet = nothing set xlbook = nothing xlApp.quit '千万记住要加这一句,否则每运行一次你的机器里就增加一个Excel进程,而且无法释放 'set xlApp = nothing 是不行的 %> 2006-4-3 7:58:27 # shuiziliuvvv 性别 True 加入日期 2005-10-26 QQ号码 191081370 邮箱 shuiziliuvvv@163.com 发帖 回复 怎样将数据从Excel导入到SQL Server中 (1) <% sub dataIntoSqlServer_ceritificate(strFileName,strSheetName,myConn) '定义 dim myConnection dim strName dim rsXsl,rsSql dim myConn_Xsl dim cmd dim i,j dim maxId strName = strFileName set myConnection = Server.CreateObject("ADODB.Connection") set rsXsl = Server.CreateObject("ADODB.Recordset") set rsSql = Server.CreateObject("ADODB.Recordset") set cmd = server.CreateObject("ADODB.Command") cmd.ActiveConnection = myConn myConn_Xsl = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strName & _ ";Extended Properties=Excel 8.0" '打开连接 myconnection.open myConn_Xsl '打开表 str_Xsl = "select * from [" & strSheetName & "$]" rsXsl.open str_Xsl,myconnection,1,1 j = 1 Do while not rsXsl.eof '取出最大值 str_sql = "select Max(id) as maxId from exceltosql" rsSql.open str_Sql,myConn,1,3 if Not rsSql.eof then if not isNull(rsSql("maxId")) then maxId=CLng(rsSql("maxId")) + 1 else maxId = 1 end if else maxId = 1 end if rsSql.close '//关闭对象 '加入数据库 str_Sql = "insert into exceltosql values(" & maxId&",'"&rsXsl(1)&"','" & rsXsl(2)&"')" cmd.CommandText = str_Sql cmd.Excute() '''''''''''''''''''''''''''''''''''''''''' j = j + 1 rsXsl.moveNext loop response.write "共导入 " & j_1 & " 条记录.<br>" response.write "<a href=# onclick='self.close();'>关闭窗口</a>" set rsXsl = nothing set rsSql = nothing set myconnection = nothing set cmd = nothing end sub (2) '调用方法 <% file1 = "c:\excelexample.xls" myconn = "DRIVER={SQL SERVER};SERVER=(local);uid=sa;pwd=sa;DATABASE=aspbook" dataIntoSqlServer_ceritificate file1,"sheet1",myconn %> 2006-4-4 7:19:21 # shuiziliuvvv 性别 True 加入日期 2005-10-26 QQ号码 191081370 邮箱 shuiziliuvvv@163.com 发帖 回复 ASP操作Excel技术总结 目录 一、 环境配置 二、 ASP对Excel的基本操作 三、 ASP操作Excel生成数据表 四、 ASP操作Excel生成Chart图 五、 服务器端Excel文件浏览、下载、删除方案 六、 附录 正文 一、 环境配置 服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即: 1.Win9x+PWS+Office 2.Win2000 Professional+PWS+Office 3.Win2000 Server+IIS+Office 目前笔者测试成功的环境是后二者。Office的版本没有特殊要求,考虑到客户机配置的不确定性和下兼容特性,建议服务器端Office版本不要太高,以防止客户机下载后无法正确显示。 服务器端环境配置还有两个偶然的发现是: 1. 笔者开发机器上原来装有金山的WPS2002,结果Excel对象创建始终出现问题,卸载WPS2002后,错误消失。 2. 笔者开发ASP代码喜欢用FrontPage,结果发现如果FrontPage打开(服务器端),对象创建出现不稳定现象,时而成功时而不成功。扩展考察后发现,Office系列的软件如果在服务器端运行,则Excel对象的创建很难成功。 服务器端还必须要设置的一点是COM组件的操作权限。在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择Microsoft Excel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。保存完毕后重新启动服务器。 客户端的环境配置没发现什么特别讲究的地方,只要装有Office和IE即可,版本通用的好象都可以。 二、 ASP对Excel的基本操作 1、 建立Excel对象 set objExcelApp = CreateObject("Excel.Application") objExcelApp.DisplayAlerts = false 不显示警告 objExcelApp.Application.Visible = false 不显示界面 2、 新建Excel文件 objExcelApp.WorkBooks.add set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.Sheets(1) 3、 读取已有Excel文件 strAddr = Server.MapPath(".") objExcelApp.WorkBooks.Open(strAddr & "\Templet\Table.xls") set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.Sheets(1) 4、 另存Excel文件 objExcelBook.SaveAs strAddr & "\Temp\Table.xls" 5、 保存Excel文件 objExcelBook.Save (笔者测试时保存成功,页面报错。) 6、 退出Excel操作 objExcelApp.Quit 一定要退出 set objExcelApp = Nothing 三、 ASP操作Excel生成数据表 1、 在一个范围内插入数据 objExcelSheet.Range("B3:k3").Value = Array("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") 2、 在一个单元格内插入数据 objExcelSheet.Cells(3,1).Value="Internet Explorer" 3、 选中一个范围 4、 单元格左边画粗线条 5、 单元格右边画粗线条 6、 单元格上边画粗线条 7、 单元格下边画粗线条 8、 单元格设定背景色 9、 合并单元格 10、 插入行 11、 插入列 四、 ASP操作Excel生成Chart图 1、 创建Chart图 objExcelApp.Charts.Add 2、 设定Chart图种类 objExcelApp.ActiveChart.ChartType = 97 注:二维折线图,4;二维饼图,5;二维柱形图,51 3、 设定Chart图标题 objExcelApp.ActiveChart.HasTitle = True objExcelApp.ActiveChart.ChartTitle.Text = "A test Chart" 4、 通过表格数据设定图形 objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range("A1:k5"),1 5、 直接设定图形数据(推荐) objExcelApp.ActiveChart.SeriesCollection.NewSeries objExcelApp.ActiveChart.SeriesCollection(1).Name = "=""333""" objExcelApp.ActiveChart.SeriesCollection(1).Values = "={1,4,5,6,2}" 6、 绑定Chart图 objExcelApp.ActiveChart.Location 1 7、 显示数据表 objExcelApp.ActiveChart.HasDataTable = True 8、 显示图例 objExcelApp.ActiveChart.DataTable.ShowLegendKey = True 五、 服务器端Excel文件浏览、下载、删除方案 浏览的解决方法很多,“Location.href=”,“Navigate”,“Response.Redirect”都可以实现,建议用客户端的方法,原因是给服务器更多的时间生成Excel文件。 下载的实现要麻烦一些。用网上现成的服务器端下载组件或自己定制开发一个组件是比较好的方案。另外一种方法是在客户端操作Excel组件,由客户端操作服务器端Excel文件另存至客户端。这种方法要求客户端开放不安全ActiveX控件的操作权限,考虑到通知每个客户将服务器设置为可信站点的麻烦程度建议还是用第一个方法比较省事。 删除方案由三部分组成: A: 同一用户生成的Excel文件用同一个文件名,文件名可用用户ID号或SessionID号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。 B: 在Global.asa文件中设置Session_onEnd事件激发时,删除这个用户的Excel暂存文件。 C: 在Global.asa文件中设置Application_onStart事件激发时,删除暂存目录下的所有文件。 注:建议目录结构 \Src 代码目录 \Templet 模板目录 \Temp 暂存目录 六、 附录 出错时Excel出现的死进程出现是一件很头疼的事情。在每个文件前加上“On Error Resume Next”将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到“Application.Quit”,保证每次程序执行完不留下死进程。 2006-4-6 6:51:42 # shuiziliuvvv 性别 True 加入日期 2005-10-26 QQ号码 191081370 邮箱 shuiziliuvvv@163.com 发帖 回复 ASP读EXCEL2000的文章!! 由于工作需要 要用ASP读取EXCEL的工资单 所以在网上找了些资料 写了以下程序 送给大家:) <% '=====================ASP读取EXCEL注事项=========================== 'i)将Excel97或Excel2000生成的XLS文件(book)看成一个数据库,其中的每一个工作表(sheet)看成数据库表 'ii)ADO假设Excel中的第一行为字段名.所以你定义的范围中必须要包括第一行的内容 'iii)Excel中的行标题(即字段名)不能够包含数字. Excel的驱动在遇到这种问题时就会出错的。例如你的行标题名为“F1” 'iiii)如果你的Excel电子表格中某一列同时包含了文本和数字的话,那么Excel的ODBC驱动将不能够正常, 处理这一行的数据类型,你必须要保证该列的数据类型一致 'E-MAIL:Kaxue@Hotmail.com QQ:484110 HOMEPAGE:www.Flyday.net '整理时间:Thursday, May 23, 2002 5:54 PM WIN2000SERVER+IIS5 测式通过 '=================================================================== Dim Conn,Driver,DBPath,Rs ' 建立Connection对象 Set Conn = Server.CreateObject("ADODB.Connection") Driver = "Driver={Microsoft Excel Driver (*.xls)};" DBPath = "DBQ=" & Server.MapPath( "test.xls" ) '调用Open 方法打开数据库 Conn.Open Driver & DBPath 'DSN连接方式 'Conn.Open "Dsn=test" '注意 表名一定要以下边这种格试 "[表名$]" 书写 Sql="Select * From [Sheet1$] where 序号=0" Set Rs=Conn.Execute(Sql) IF Rs.Eof And Rs.Bof Then Response.write "没有找到您需要的数据!!" Else Do While Not Rs.EOF Response.write Rs("姓名") Rs.MoveNext Loop End IF Rs.Close Set Rs=nothing Conn.Close Set Conn=Nothing 'Response.Write "成功!" %> 2006-4-6 6:56:09 # shuiziliuvvv 性别 True 加入日期 2005-10-26 QQ号码 191081370 邮箱 shuiziliuvvv@163.com 发帖 回复 ASP与电子表格EXCEL的交互操作 Here we go again with another sample for Excel, this time we will be using ASP to create a chart. You all asked me for it, now here is the solution. Thanks again for all your nice comments :) First we set the type of script <%@ LANGUAGE="VBSCRIPT" %> Make the object, and set the object to an Excelsheet Dim MyExcelChart Set MyExcelChart = CreateObject("Excel.Sheet") Now lets write the rest of the script, see the comments ' show or dont show excel to user, TRUE or FALSE MyExcelChart.Application.Visible = True ' populate the cells MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array ("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10") MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array ("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array ("10", "10", "8", "27", "33", "37", "50", "54", "10", "10") MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array ("23", "3", "86", "64", "60", "18", "5", "1", "36", "80") MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer" MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape" MyExcelChart.ActiveSheet.Cells(5,1).Value="Other" ' Select the contents that need to be in the chart MyExcelChart.ActiveSheet.Range("b2:k5").Select ' Add the chart MyExcelChart.Charts.Add ' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show datatable, show legend MyExcelChart.activechart.ChartType = 97 MyExcelChart.activechart.BarShape =3 MyExcelChart.activechart.HasTitle = True MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage" MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1 MyExcelChart.activechart.Location 1 MyExcelChart.activechart.HasDataTable = True MyExcelChart.activechart.DataTable.ShowLegendKey = True ' Save the the excelsheet to excelface MyExcelChart.SaveAs "c:\chart.xls" %> Now lets complete the HTML tags. <HTML> <HEAD> <TITLE>MyExcelChart</TITLE> </HEAD> <BODY> </BODY> </HTML> This completes yer ASP page, look below for the complete code of myexcelchart.asp <%@ LANGUAGE="VBSCRIPT" %> <% ' Create Object Set MyExcelChart = CreateObject("Excel.Sheet") ' show or dont show excel to user, TRUE or FALSE MyExcelChart.Application.Visible = True ' populate the cells MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array ("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10") MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array ("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array ("10", "10", "8", "27", "33", "37", "50", "54", "10", "10") MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array ("23", "3", "86", "64", "60", "18", "5", "1", "36", "80") MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer" MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape" MyExcelChart.ActiveSheet.Cells(5,1).Value="Other" ' Select the contents that need to be in the chart MyExcelChart.ActiveSheet.Range("b2:k5").Select ' Add the chart MyExcelChart.Charts.Add ' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show datatable, show legend MyExcelChart.activechart.ChartType = 97 MyExcelChart.activechart.BarShape =3 MyExcelChart.activechart.HasTitle = True MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage" MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1 MyExcelChart.activechart.Location 1 MyExcelChart.activechart.HasDataTable = True MyExcelChart.activechart.DataTable.ShowLegendKey = True ' Save the the excelsheet to chart.xls MyExcelChart.SaveAs "c:\chart.xls" %> <HTML> <HEAD> <TITLE>MyExcelChart</TITLE> </HEAD> <BODY> </BODY> </HTML> 2006-4-6 6:56:58 # shuiziliuvvv 性别 True 加入日期 2005-10-26 QQ号码 191081370 邮箱 shuiziliuvvv@163.com 发帖 回复 asp实现在web中显示电子表格数据(一) 显示数据表格的应用 在用ASP语言开发的Web数据库应用程序中,ADO (ActiveX Data Objects) 已经成为非常流行的工具,而且对于真正的关系型数据库,比如Oracle、SQL Server,它都不会有局限性。ADO能够存取多种不同的数据格式,MS Excel电子数据表格就是其中之一。 关于这个应用 可供下载的例程代码中包括一个ASP文件ReadX1.asp,一个Excel文件TheWorkbook.xls。你也可以另外加入一些电子数据表文件。 执行ReadXl.asp页面,将显示出可用的电子数据表文件列表。选择好一个文件,并提交表单后,你将会看到: 一个下拉菜单,其中是工作表名称 一个下拉菜单,其中是命名的范围 一个单元格范围输入框 第一个工作表的全部内容 可以选择工作簿文件中的另外一个工作表,或者输入符合Excel格式的单元格范围数值,比如:D20:E21 或者 Sheet3!F12:J22。注意:在ADO和ODBC驱动程序中,要用$符合替换分界符号!。 实现步骤 现在对这个应用程序已经有了初步的认识,下面开始讨论ASP代码,看看如何读取电子数据表的数据,如何找到电子数据簿 (workbook)文件中可用的电子数据表(worksheet)和范围,并看看实现文件列表选择的技术。这里假设你已经熟悉了编写HTML表单的技术,所以对此不做详细介绍。 基本条件 下面将涉及到ADO对象、方法、属性、收集和常量。在服务器上安装IIS后,ADO就存在了,并且还有相关文档,地址是http://YourServer/IisHelp/ado210.chm (版本2.1),或者http://YourServer/IisHelp/ado/docs/(老版本1.5)。如果需要升级ADO,可以从http://www.microsoft.com/Data/download.htm下载最新版本的MDAC工具包进行安装。 实现“文件列表选择”使用到了内建的VBScript脚本对象,相关文档可以查看http://YourServer/IisHelp/vbscript/htm/vbstoc.htm,如果想查看最新的文档,请访问http://msdn.microsoft.com/scripting (版本5)。当然,在服务器端和客户端,你都不需要安装MS Excel。 读取电子数据表(Worksheet)数据 通过ADO读取电子数据表与读取数据库表的方法基本是一样的。从下图可以看到,电子数据表的行被称作记录Records,列被称作字段Fields。电子数据表或者单元格的范围可以被看成表Tables,并按照记录集recordsets进行存取。 Spreadsheet Database HTML < table > < tr > < th >NameA< /th > < th >NameB< /th > < th >NameC< /th > < /tr >< tr > < td >1< /td > < td >2< /td > < td >3< /td > < /tr >< tr > < td >11< /td > < td >12< /td > < td >13< /td > < /tr > < /table > 执行下面的步骤,从数据库表中读取数据并显示: 连接数据库(同样:打开数据簿文件) 读取记录集recordset(同样:读取一定范围的单元格) 循环每一个记录(同样:每一行),经过格式化,显示 建立ADO连接 在连接数据库或者打开文件前,需要了解一些信息。其中只要是设置名叫DSN的ODBC驱动,但为每一个数据表都建立这样的ODBC驱动,是非常麻烦的,因为这需要在服务器的控制台上通过“控制面板/ODBC设置”手工完成。 幸好,ASP提供了替代DSN的其他方法,它可以非常容易地在运行时建立连接。比如,字符串“DRIVER={Microsoft Excel Driver?*.xls)};ReadOnly=1;DBQ=C:dirfile.xls",表示了替代DSN打开文件c:dirfile.xls,因此通过这种方法仅仅需要提供给ASP程序一个文件名即可。执行下面的代码,将从表单中读取文件名,然后转换为全路径,接着生成连接字符串,最后建立并打开这个连接。 vXlFile = Request("XlBook") vXlFilePath = Server.MapPath(vXlFile) ' assumes file in current directory vConnString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _ vXlFilePath Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open vConnString 如果想查看更多的非DSN连接信息,请打开Windows或者NT System目录下的帮助文件Odbcjet.hlp。 读取记录集 连接上电子数据簿文件后,读取一定范围的单元格数据就很简单了。尽管不是必须的,但还是建议:用符合“[” 和 “]”包含住单元格的范围定义。只所以这么做,是以防在数据库的操作中产生非法的符合。 vXlRange = Request("XlRange") Set ors = oConn.Execute("[" & vXlRange & "]") 执行上面的语句,将返回记录集对象,其中包括范围内单元格的所有可用信息, 记录集的数值和描述数据的元数据。 给你个将数据从EXCEL导入SQL Server的例子,EXCEL导入ACCESS类似 sub dataIntoSqlServer_ceritificate(strFileName,strSheetName,myConn) '定义 dim myConnection dim strName dim rsXsl,rsSql dim str_Xsl,str_Sql dim myConn_Xsl dim cmd dim i,j dim maxId strName=strFileName set myConnection=server.createobject("adodb.connection") set rsXsl=Server.Createobject("ADODB.Recordset") set rsSql=Server.CreateObject("ADODB.Recordset") set cmd=Server.CreateObject("ADODB.Command") cmd.ActiveConnection=myConn 'myConn_Xsl="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strName& ";Extended Properties=Excel 8.0" myConn_Xsl="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application("ASP_Directory") & "chapter05\database\" & strName & ";Extended Properties=Excel 8.0" '打开连接 myconnection.open myConn_Xsl '打开表 str_Xsl="select * from ["& strSheetName &"$]" rsXsl.open str_Xsl,myconnection,1,1 j=1 Do While not rsXsl.eof '取出最大值 str_Sql="select Max(id) as maxId from exceltosql" rsSql.open str_Sql,myConn,1,3 If Not rsSql.Eof Then If not isNull(rsSql("maxId")) Then maxId=Clng(rsSql("maxId"))+1 Else maxId=1 End if else maxId=1 End if rsSql.close'//关闭对象 '加入数据库 str_Sql=" insert into exceltosql values("&maxId&",'"&rsXsl(1)&"','"&rsXsl(2)&"')" cmd.CommandText=str_Sql cmd.Execute() ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' j=j+1 rsXsl.movenext Loop response.write "共导入<font color='red'>" & j-1 & "</font>条记录.<br/>" response.write "<a href=# onclick='self.close();'>关闭窗口</a>" set rsXsl=nothing set rsSql=nothing set myconnection=nothing set cmd=nothing end sub 下面是调用导入方法的代码 file1="C:\excelexample.xls" myconn=Application("ASP_Chapter05_Con1")'"DRIVER={SQL SERVER};SERVER=(local);uid=sa;pwd=sa;DATABASE=aspbook" dataIntoSqlServer_ceritificate file1,"sheet1",myconn ========================================= <% 'On Error Resume Next '导入Excel电子表格数据到SQL Sever数据库 By Dicky 2004-12-27 16:41:12 QQ:25941 Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn) '创建数据库连接对象并打开数据库连接 Dim ConnStr SqlUsername = "sa" SqlPassword = "sa" SqlDatabaseName = "sztcsc" SqlLocalName = "(local)" ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";" Set SqlConn = Server.CreateObject("ADODB.Connection") SqlConn.Open ConnStr If Err Then Err.Clear Set SqlConn = Nothing Response.Write "数据连接错误!" Response.End End If End Function Function Close_Conn(SqlConn) '关闭数据库连接并清除数据库连接对象 If IsObject(SqlConn) Then SqlConn.Close Set SqlConn = Nothing End If End Function Call Open_Conn("sztcsc","sa","sa","(local)",SqlConn) '打开SQL Server数据库连接 Function Get_EMP_CnName(NTACCNT) '根据用户NT账号得到用户中文名 Dim Sql,Rs Sql = "Select EMP_CNAME From RF_EMPLOYEE Where EMP_NTACCNT='"&NTACCNT&"'" Set Rs = Server.CreateObject("Adodb.RecordSet") Rs.Open Sql,SqlConn,1,1 If Rs.Eof Then Get_EMP_CnName = "" Else Get_EMP_CnName = Rs("EMP_CNAME") End If Rs.Close Set Rs = Nothing End Function %> <html> <head> <title>导入Excel电子表格数据到SQL Sever数据库</title> <body bgcolor="#ACD9AF"> <center><b>导入Excel电子表格数据到SQL Sever数据库</b></center> <FORM METHOD="POST" name="form1"> 請選擇數據源: <input type="file" name="File" size="40" title="请选择需要導出的Excel文件"> <input type=submit name=submit value="開始導出"> <br>請選擇目標表: <Select NAME="Table" title="请选择需要导入数据的表"> <option></option> <% Dim RsSqlDatabaseTable Set RsSqlDatabaseTable = SqlConn.OpenSchema(20) Do While Not RsSqlDatabaseTable.Eof %> <option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option> <% RsSqlDatabaseTable.MoveNext:Loop Set RsSqlDatabaseTable = Nothing %> </Select> </FORM> <font color=blue>導出過程中請不要刷新頁面!</font><br> <% If Right(Trim(Request("File")),3) = "xls" Then Response.Write "<font color=red>您所導出的Excel文件是:"&Trim(Request("File"))&"</font><br>" End If '=====================ASP读取EXCEL注事项===================================== 'i)将Excel97或Excel2000生成的XLS文件(book)看成一个数据库,其中的每一个工作表(sheet)看成数据库表 'ii)ADO假设Excel中的第一行为字段名.所以你定义的范围中必须要包括第一行的内容 'iii)Excel中的行标题(即字段名)不能够包含数字. Excel的驱动在遇到这种问题时就会出错的。例如你的行标题名为“F1” 'iiii)如果你的Excel电子表格中某一列同时包含了文本和数字的话,那么Excel的ODBC驱动将不能够正常, 处理这一行的数据类型,你必须要保证该列的数据类型一致 'E-MAIL:Kaxue@Hotmail.com QQ:484110 HOMEPAGE:www.Flyday.net '整理时间:Thursday, May 23, 2002 5:54 PM WIN2000SERVER+IIS5 测式通过 '============================================================================ If Trim(Request("File")) = "" Then Response.Write "<font color=red>對不起,請選擇需要導出的Excel文件!</font>" Response.End ElseIf Right(Trim(Request("File")),3) <> "xls" Then Response.Write "<font color=red>對不起,請確定您要導出的是Excel文件!</font>" Response.End Else '列出所選擇的Excel文件中的所有工作表 Dim ExeclFile,objExcelApp,objExcelBook ExeclFile = Trim(Request("File")) Set objExcelApp = CreateObject("Excel.Application") objExcelApp.Quit objExcelApp.DisplayAlerts = False '不显示警告 objExcelApp.Application.Visible = False '不显示界面 objExcelApp.WorkBooks.Open(ExeclFile) set objExcelBook = objExcelApp.ActiveWorkBook reDim arrSheets(objExcelBook.Sheets.Count) For i=1 to objExcelBook.Sheets.Count arrSheets(i) = objExcelBook.Sheets(i).Name ' Response.Write arrSheets(i) Next objExcelApp.Quit Set objExeclApp = Nothing '列出所選擇的Excel文件中的所有工作表 End If Dim Conn,Driver,DBPath,Rs,SqlInsert,SqlDelete '建立Connection对象 Set Conn = Server.CreateObject("ADODB.Connection") Driver = "Driver={Microsoft Excel Driver (*.xls)};" 'DBPath = "DBQ=" & Server.MapPath( "HRB.xls" ) DBPath = "DBQ=" & Trim(Request("File")) '调用Open 方法打开数据库 Conn.Open Driver & DBPath 'DSN连接方式 'Conn.Open "Dsn=test" '注意 表名一定要以下边这种格式 "[表名$]" 书写 For i = 1 To UBound(arrSheets)'開始循環所有工作表 Sql = "Select * FROM ["& arrSheets(i) &"$] " Set Rs = Conn.Execute(Sql) If Rs.Eof And Rs.Bof Then Response.write "没有找到您需要的数据!!<br>" Else ' Response.Write "<font color=blue>工作表:</font><font color=green>"&arrSheets(i)&"</font><br>" Do While Not Rs.Eof SqlInsert = "Insert Into "&Trim(Request("Table"))&" (EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_Director_CnName) Values ('"&Trim(Rs(0))&"','"&Trim(Rs(1))&"','"&Trim(Rs(2))&"','"&Trim(Rs(2))&"("&Get_EMP_CnName(Trim(Rs(2)))&")"&"','"&Trim(Rs(3))&"','"&Trim(Rs(3))&"("&Get_EMP_CnName(Trim(Rs(3)))&")"&"','"&Trim(Rs(4))&"','"&Trim(Rs(4))&"("&Get_EMP_CnName(Trim(Rs(4)))&")"&"')" '此处插入的值根据实际数据库结构进行调整 SqlConn.Execute(SqlInsert)'插入Excel表格裏所有東東 Rs.MoveNext Loop Response.Write "<font color=red>恭喜,成功導出Excel文件中工作表[</font><font color=blue>"&arrSheets(i)&"</font><font color=red>]的數據到SQL Server數據表[<font color=blue>"&Trim(Request("Table"))&"</font>]中!^_^</font><br>" End If Rs.Close Set Rs = Nothing Next'循環所有工作表結束 Call Close_Conn(Conn) '关闭Excel数据库连接 Call Close_Conn(SqlConn) '关闭SQL Server数据库连接 %> </body> </html> ====================================================== <% On Error Resume Next ''导入Excel电子表格数据到SQL Sever数据库 By Dicky 2004-12-27 16:41:12 Function Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn) ''创建数据库连接对象并打开数据库连接 Dim ConnStr ''SQL Server数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP) ConnStr = "Provider=Sqloledb; User ID=" & SqlUsername & "; Password=" & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source=" & SqlLocalName & ";" Set SqlConn = Server.CreateObject("ADODB.Connection") SqlConn.Open ConnStr If Err Then Err.Clear Set SqlConn = Nothing Response.Write "数据连接错误!" Response.End End If End Function Function Close_Conn(SqlConn) ''关闭数据库连接并清除数据库连接对象 If IsObject(SqlConn) Then SqlConn.Close Set SqlConn = Nothing End If End Function Call Open_Conn("xformdemo","sa","sa","(local)",SqlConn) ''打开本地SQL Server数据库连接 'Call Open_Conn("xformdemo","","sa","ssh03",SqlConn1) ''打开远程SQL Server数据库连接 Function Get_EMP_CnName(NTACCNT) ''根据用户NT账号得到用户中文名 Dim Sql1,Rs1 Sql1 = "Select * From C_DEPT Where EMP_NTACCNT=''"&NTACCNT&"''" Set Rs1 = Server.CreateObject("Adodb.RecordSet") Rs1.Open Sql1,SqlConn1,1,1 If Rs1.Eof Then Get_EMP_CnName = "" Else Get_EMP_CnName = Rs1("EMP_CNAME") End If Rs1.Close Set Rs1 = Nothing End Function %> <html> <head> <title>导入Excel电子表格数据到SQL Sever数据库</title> <body bgcolor="#ACD9AF"> <center><b>导入Excel电子表格数据到SQL Sever数据库</b></center> <FORM METHOD="POST" name="form1"> 請選擇數據源(本地库): <Select NAME="Table" title="请选择需要导入数据的表"> <option></option> <% Dim RsSqlDatabaseTable Set RsSqlDatabaseTable = SqlConn.OpenSchema(20) Do While Not RsSqlDatabaseTable.Eof %> <option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option> <% RsSqlDatabaseTable.MoveNext:Loop Set RsSqlDatabaseTable = Nothing %> </Select><input type=submit name=submit value="開始導出"> <br>請選擇目標表(远程库): <Select NAME="Table1" title="请选择需要导入数据的表"> <option></option> <% Dim RsSqlDatabaseTable1 Set RsSqlDatabaseTable1 = SqlConn1.OpenSchema(20) Do While Not RsSqlDatabaseTable1.Eof %> <option<%If Trim(Request("Table1"))=RsSqlDatabaseTable1(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable1(2)%></option> <% RsSqlDatabaseTable1.MoveNext:Loop Set RsSqlDatabaseTable1 = Nothing %> </Select> </FORM> <font color=blue>導出過程中請不要刷新頁面!</font><br> <% If Trim(Request("Table1")) <> "" Then Dim Sql,Rs Sql = "Select * From Sheet1$" ''Sheet1$是我们实现用SQL Server自身数据转换功能得到的表名 Set Rs = SqlConn.Execute(Sql) If Rs.Eof And Rs.Bof Then Response.write "没有找到您需要的数据!!<br>" Else Do While Not Rs.Eof SqlInsert = "Insert Into "&Trim(Request("Table1"))&" (EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_Director_CnName) Values (''"&Trim(Rs("工程名称"))&"'',''"&Trim(Rs("工程编号"))&"'',''"&Trim(Rs("项目副理"))&"'',''"&Trim(Rs("项目副理"))&"("&Get_EMP_CnName(Trim(Rs("项目副理")))&")"&"'',''"&Trim(Rs("项目经理"))&"'',''"&Trim(Rs("项目经理"))&"("&Get_EMP_CnName(Trim(Rs("项目经理")))&")"&"'',''"&Trim(Rs("项目总监"))&"'',''"&Trim(Rs("项目总监"))&"("&Get_EMP_CnName(Trim(Rs("项目总监")))&")"&"'')" '' Response.Write SqlInsert ''此处插入的值根据实际数据库结构进行调整 SqlConn1.Execute(SqlInsert)''插入Excel表格裏所有東東 Rs.MoveNext Loop Response.Write "<font color=red>恭喜,成功導出数据!^_^</font><br>" End If Rs.Close Set Rs = Nothing End If Call Close_Conn(SqlConn) ''关闭Excel数据库连接 Call Close_Conn(SqlConn1) ''关闭SQL Server数据库连接 %> </body> </html> ============================================================ 导出excel文件 <% Response.Clear Response.ContentType = "text/xls" Response.AddHeader "content-disposition", "attachment; filename=export.xls" 'filename导出的文件名 '点导出按钮后事件 Response.Write "文件编号"&chr(9)&"文件名称"&chr(9)&"文件版次"&chr(9)&"发起时间"&chr(9)&"生效时间"&chr(13) '导出时 set conn=server.createobject("adodb.connection") conn.open "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=xformdemo;Data Source=127.0.0.1" SQL="Select * FROM c_dept" Set rs=conn.execute(SQL) 'STOP total=rs.fields.count '总共的列数 'response.write total while not rs.eof i=0 while i<cint(total) Data=Data&rs(i)&chr(9) i=i+1 wend Response.Write Data&chr(13) Data="" rs.moveNext wend rs.close conn.close Response.Flush Response.End %> ================================================================================= 说明:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL: insert into b(a, b, c) select d,e,f from b; 说明:显示文章、提交人和最后回复时间 SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 说明:外连接查询(表名1:a 表名2:b) SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 首先引用Imports system.IO '创建文件夹 Public Sub CreateName() N = 0 Dim Path As String = "\\" & getIniNode(Application.StartupPath & "\system\Gardman.cfg", "ServerName") StrEmail = Path & "\" & "Email文件存储" Try '根据启动目录建立一个Directoryinfo对象 Dim MyDirectoryInfo As New DirectoryInfo(StrEmail) MyDirectoryInfo.CreateSubdirectory(CboInputDate.Value) '创建一个它的子目录 StrEmail = StrEmail & "\" & CboInputDate.Value &n 创建表名中字段的约束2006年07月19日 星期三 01:36在一个表中,要限制一个字段只能拥有几个值的方 法. 在表结构设计中选中CHECK约束:点新建,约束名可以自己取,只要符合命名规则即可。 假设要设置QCType这个列只能默认的几个选项:设置方法可以如下: ([QCType] is null or ([QCType] = 'Other' or ([QCType] = 'Fittings' or [QCType] = 'Amount'))) 相当于这个列可以为空,或者可以为Other(其他)或者为Fittings(配件)或Amount(金额)这几个选项,其 它选项,输入进去,将提示相关的错误信息。 Sql Server实用操作小技巧集合 包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查 备份集、修复数据库等 (一)挂起操作 在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法: 到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 删除PendingFileRenameOperations (二)收缩数据库 --重建索引 DBCC REINDEX DBCC INDEXDEFRAG --收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE (三)压缩数据库 dbcc shrinkdatabase(dbname) (四)转移数据库给新用户以已存在用户权限 exec sp_change_users_login 'update_one','newname','oldname' go (五)检查备份集 RESTORE VERIFYONLY from disk='E:\dvbbs.bak' (六)修复数据库 Alter DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK GO Alter DATABASE [dvbbs] SET MULTI_USER GO COMPUTE BY 子句使您得以用同一 Select 语句既查看明细行,又查看汇总行。可以计算子组的汇总值, 也可以计算整个结果集的汇总值。 COMPUTE 子句需要下列信息: 可选的 BY 关键字,该关键字可按对一列计算指定的行聚合。 行聚合函数名称;例如,SUM、AVG、MIN、MAX 或 COUNT。 要对其执行行聚合函数的列。 COMPUTE 生成的结果集 COMPUTE 所生成的汇总值在查询结果中显示为分离的结果集。包括 COMPUTE 子句的查询的结果类似于控 制中断报表,即汇总值由指定的组(或 称中断)控制的报表。可以为各组生成汇总值,也可以对同一组计算多个聚合函数。 当 COMPUTE 带有可选的 BY 子句时,符合 Select 条件的每个组都有两个结果集: 每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。 每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。 当 COMPUTE 不带可选的 BY 子句时,Select 语句有两个结果集: 每个组的第一个结果集是包含选择列表信息的所有明细行。 第二个结果集有一行,其中包含 C 使SQL数据库日志1G多收缩成几兆的过程2006年07月19日 星期三 01:25首先在您要收缩的数据库中,进去 查询分析器: 输入如下代码:DUMP TRANSACTION [db_name] WITH NO_LOG [db_name]:数据库的名称 然后用“收缩数据库”工具将删除后留下的空白空间收回。具体如下操作: 然后选中要收缩的数据库,右击所有任务,再点收缩数据库。会弹出一个窗口,点击收缩文件下面的一个 文件按钮,在下拉框中,选择数据库名称_Log的文件,在收缩操作中,选择第四个按钮,看它最小值能小 的那个值,你就填那个最小的值,接着点确定即可。 |
|