站内搜索  

哈尔滨百姓网首页 | 操作系统 | 软件应用 | 平面设计 | 程序开发 | 硬件维护 | 网络安全
 您的位置: 哈尔滨百姓网 > 电脑网络 > 程序开发 > 阅读文章:ASP导出Excel数据的四种方法
ASP导出Excel数据的四种方法
2009-4-17 9:42:14 哈尔滨百姓网 来源:百度空间 浏览 次 【 】【打印】【关闭

  一、使用OWC 

  什么是OWC? 

  OWC是Office Web Compent的缩写,即Microsoft的Office Web组件,它为在Web中绘制图形提供了灵活的同时也是最基本的机制。在一个intranet环境中,如果可以假设客户机上存在特定的浏览器和一些功能强大的软件(如IE5和Office 2000),那么就有能力利用Office Web组件提供一个交互式图形开发环境。这种模式下,客户端工作站将在整个任务中分担很大的比重。 

<% 

Option Explicit 

Class ExcelGen 

Private objSpreadsheet 

Private iColOffset 

Private iRowOffset 

Sub Class_Initialize() 

Set objSpreadsheet = Server.CreateObject("OWC.Spreadsheet") 

iRowOffset = 2 

iColOffset = 2 

End Sub 

Sub Class_Terminate() 

Set objSpreadsheet = Nothing "Clean up 

End Sub 

Public Property Let ColumnOffset(iColOff) 

If iColOff > 0 then 

iColOffset = iColOff 

Else 

iColOffset = 2 

End If 

End Property 

Public Property Let RowOffset(iRowOff) 

If iRowOff > 0 then 

iRowOffset = iRowOff 

Else 

iRowOffset = 2 

End If 

End Property Sub GenerateWorksheet(objRS) 

"Populates the Excel worksheet based on a Recordset"s contents 

"Start by displaying the titles 

If objRS.EOF then Exit Sub 

Dim objField, iCol, iRow 

iCol = iColOffset 

iRow = iRowOffset 

For Each objField in objRS.Fields 

objSpreadsheet.Cells(iRow, iCol).Value = objField.Name 

objSpreadsheet.Columns(iCol).AutoFitColumns 

"设置Excel表里的字体 

objSpreadsheet.Cells(iRow, iCol).Font.Bold = True 

objSpreadsheet.Cells(iRow, iCol).Font.Italic = False 

objSpreadsheet.Cells(iRow, iCol).Font.Size = 10 

objSpreadsheet.Cells(iRow, iCol).Halignment = 2 "居中 

iCol = iCol + 1 

Next "objField 

"Display all of the data 

Do While Not objRS.EOF 

iRow = iRow + 1 

iCol = iColOffset 

For Each objField in objRS.Fields 

If IsNull(objField.Value) then 

objSpreadsheet.Cells(iRow, iCol).Value = "" 

Else 

objSpreadsheet.Cells(iRow, iCol).Value = objField.Value 

objSpreadsheet.Columns(iCol).AutoFitColumns 

objSpreadsheet.Cells(iRow, iCol).Font.Bold = False 

objSpreadsheet.Cells(iRow, iCol).Font.Italic = False 

objSpreadsheet.Cells(iRow, iCol).Font.Size = 10 

End If 

iCol = iCol + 1 

Next "objField 

objRS.MoveNext 

Loop 

End Sub Function SaveWorksheet(strFileName) 



"Save the worksheet to a specified filename 

On Error Resume Next 

Call objSpreadsheet.ActiveSheet.Export(strFileName, 0) 

SaveWorksheet = (Err.Number = 0) 

End Function 

End Class 

Dim objRS 

Set objRS = Server.CreateObject("ADODB.Recordset") 

objRS.Open "SELECT * FROM xxxx", "Provider=SQLOLEDB.1;Persist Security 

Info=True;User ID=xxxx;Password=xxxx;Initial Catalog=xxxx;Data source=xxxx;" 

Dim SaveName 

SaveName = Request.Cookies("savename")("name") 

Dim objExcel 

Dim ExcelPath 

ExcelPath = "Excel\" & SaveName & ".xls" 

Set objExcel = New ExcelGen 

objExcel.RowOffset = 1 

objExcel.ColumnOffset = 1 

objExcel.GenerateWorksheet(objRS) 

If objExcel.SaveWorksheet(Server.MapPath(ExcelPath)) then 

"Response.Write "<html><body bgcolor="gainsboro" text="#000000">已保存为Excel文件. 

<a href="" & server.URLEncode(ExcelPath) & "">下载</a>" 

Else 

Response.Write "在保存过程中有错误!" 

End If 

Set objExcel = Nothing 

objRS.Close 

Set objRS = Nothing 

%>   

二、用Excel的Application组件在客户端导出到Excel或Word 

注意:两个函数中的“data“是网页中要导出的table的 id 

<input type="hidden" name="out_word" onclick="vbscript:buildDoc" value="导出到word" class="notPrint"> 

<input type="hidden" name="out_excel" onclick="AutomateExcel();" value="导出到excel" class="notPrint">   



导出到Excel代码 

<SCRIPT LANGUAGE="javascript"> 

<!-- 

function AutomateExcel() 



// Start Excel and get Application object. 

var oXL = new ActiveXObject("Excel.Application"); 

// Get a new workbook. 

var oWB = oXL.Workbooks.Add(); 

var oSheet = oWB.ActiveSheet; 

var table = document.all.data; 

var hang = table.rows.length; 

var lie = table.rows(0).cells.length; 



// Add table headers going cell by cell. 

for (i=0;i<hang;i++) 



for (j=0;j<lie;j++) 



oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText; 





oXL.Visible = true; 

oXL.UserControl = true; 



//--> 

</SCRIPT>   



导出到Word代码 

<script language="vbscript"> 

Sub buildDoc 

set table = document.all.data 

row = table.rows.length 

column = table.rows(1).cells.length 

Set objWordDoc = CreateObject("Word.Document") 

objWordDoc.Application.Documents.Add theTemplate, False 

objWordDoc.Application.Visible=True 

Dim theArray(20,10000) 

for i=0 to row-1 

for j=0 to column-1 

theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXT 

next 

next 

objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("综合查询结果集") //显示表格标题 



objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("") 

Set rngPara = objWordDoc.Application.ActiveDocument.Paragraphs(1).Range 

With rngPara 

.Bold = True //将标题设为粗体 

.ParagraphFormat.Alignment = 1 //将标题居中 

.Font.Name = "隶书" //设定标题字体 

.Font.Size = 18 //设定标题字体大小 

End With 

Set rngCurrent = objWordDoc.Application.ActiveDocument.Paragraphs(3).Range 

Set tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column) 



for i = 1 to column 



objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter theArray(i,1) 

objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.ParagraphFormat.alignment=1 

next 

For i =1 to column 

For j = 2 to row 

objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter theArray(i,j) 

objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.ParagraphFormat.alignment=1 

Next 

Next 

End Sub 

</SCRIPT>   

  三、直接在IE中打开,再存为EXCEL文件 

  把读出的数据用<table>格式,在网页中显示出来,同时,加上下一句即可把EXCEL表在客客户端显示。 

<%response.ContentType ="application/vnd.ms-excel"%>   

  注意:显示的页面中,只把<table>输出,最好不要输出其他表格以外的信息。 

  四、导出以半角逗号隔开的csv 

  用fso方法生成文本文件的方法,生成一个扩展名为csv文件。此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。(有关fso生成文本文件的方法,在此就不做介绍了) 

  CSV文件介绍 (逗号分隔文件) 

  选择该项系统将创建一个可供下载的CSV 文件; CSV是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。 

  请注意即使选择表格作为输出格式,仍然可以将结果下载CSV文件。在表格输出屏幕的底部,显示有 "CSV 文件"选项,点击它即可下载该文件。 

  如果您把浏览器配置为将您的电子表格软件与文本(TXT)/逗号分隔文件(CSV) 相关联,当您下载该文件时,该文件将自动打开。下载下来后,如果本地已安装EXCEL,点击此文件,即可自动用EXCEL软件打开此文件。 


- 作者: shawnyoung 2006年05月12日, 星期五 15:29  回复(0) |  引用(0) 加入博采 

[转]ASP 操作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”,保证每次程序执行完不留下死进程。 
转自:http://hi.baidu.com/ittd/blog/item/351b3adb9d9a5162d1164e5f.html
[责任编辑:佚名]
 相关文章
·CSS布局方法的十八般技巧和兼容方案 (2009-11-13 17:14:48)
·利用Google给自己的网站加上投票功能 (2009-10-13 12:32:39)
·您试图在此 Web 服务器上访问 (2009-8-13 14:20:12)
·Asp伪静态的实现及URL重写-用ISAPI_Rewri (2009-8-6 15:07:08)
·巧用ASP脚本命令重启服务器 (2009-8-6 15:05:39)
·Dreamweaver CS3网页制作之CSS布局 (2009-7-1 16:07:45)
·网页设计经验和技巧总结 (2009-7-1 16:03:12)
·网页优化必须做的26件事情 (2009-7-1 16:00:36)
·把数据库结构显示出来的源代码 (2009-4-17 9:55:16)
·插入记录后马上得到自动编号值(Access库) (2009-4-17 9:54:33)
·全面解决--如何获得刚插入数据库的记录的 (2009-4-17 9:53:29)
·ASP计算两个时间之差的函数 (2009-4-17 9:52:11)
·一个通用数据库显示程序,能调任意库,任意 (2009-4-17 9:50:33)
·技巧:ASP开发中存储过程应用全接触 (2009-4-17 9:48:31)
·网站简体繁体转换代码 (2009-4-17 9:44:15)
·利用网页监听,实现内容中的图片由滚轮控 (2009-4-17 9:37:21)
·html操作本地数据库 (2009-4-17 9:33:18)
·Access中使用Create Procedure创建 (2009-4-17 9:31:08)
·asp实现同网站不同目录绑定不同域名 (2009-4-17 9:27:57)
 热门文章 哈尔滨电脑
·安全防护策略-打造堡垒主机
·SQL Server到底需要使用哪些端口?
·把重要的Word 2003文档放到菜单中
·您试图在此 Web 服务器上访问的 
·Photoshop制作火焰的神龙
·Win2003架设多用户隔离Ftp服务器
·XP系统服务恢复批处理
·还有2天发布 Windows7必备77条小知识
·情侣玩儿法:用虚拟硬盘打造坚不可摧的影子系统
·用U盘当钥匙 轻松绕过WinXP的登陆密码
·Photoshop打造漂亮的心形挂链壁纸
 推荐文章 哈尔滨电脑
·精简节约!小公司办公打印省钱全攻略
·CSS布局方法的十八般技巧和兼容方案
·三种方法 教你解决输入法不显示的问题
·当红情侣QQ表情:茉莉和龙井
·Win 7出现休眠Bug 微软提供解决方案
·将Powerpoint文档转换为Word文档
·非常实用来学习连续供墨系统入门知识
·怕吃亏?怕假的?鉴别真假耗材的小窍门
·情侣玩儿法:用虚拟硬盘打造坚不可摧的影子系统
·开始—运行(cmd)命令大全
·您试图在此 Web 服务器上访问的 
 最新文章 哈尔滨电脑
·Web服务器如何避免CC攻击
·SQL Server到底需要使用哪些端口?
·XP系统服务恢复批处理
·局域网遭ARP攻击网络掉线批处理
·CISCO 2811 路由器配置命令全集
·避免“悲剧” 打印机使用技巧全面攻略
·保障远程桌面Web连接安全四项注意
·教你六招处理服务器数据意外丢失
·挑选相纸有学问 教你如何辨别相纸优劣
·精简节约!小公司办公打印省钱全攻略
·CSS布局方法的十八般技巧和兼容方案