asp操作excel方法
在ASP-NET中读写Excel文件有四种解决方案
在ASP-NET中读写Excel文件有四种解决方案在中读写Excel文件有四种解决方案在应用程序常常会遇到需要从Excel 文件中读取数据或将数据写入Excel的需求。
一般来讲,在中读写Excel文件有四种解决方案。
1.1.1 使用OLE DB使用OLE DB可以以查询数据库的方式来读取Excel文件,因为在某种程度上Excel表格可以看成是一张一张的数据表。
其二者的主要区别在于所使用的数据引擎不一样。
使用OLE DB访问Excel的要点是计算机上必须具有Microsoft Access Data Component 2.6(MADC2.6)以上版本,同时在连接字符串上必须声明“Extended Properties=Excel 8.0”,这里的指定Excel 版本号如果高于8.0可能会出错,所以一般来讲必须使用Excel 8.0。
然后其它的写法就和一般的访问数据库一样了,打开连接,填充数据集,再关闭连接即可。
例如下面的实现代码://创建一个数据链接string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =c:\\sample.xls;Extended Properties=Excel 8.0" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ;string strCom = " SELECT * FROM [Sheet1$] " ;myConn.Open ( ) ;//打开数据链接,得到一个数据集OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;//创建一个DataSet对象myDataSet = new DataSet ( ) ;//得到自己的DataSet对象myCommand.Fill ( myDataSet , "[Sheet1$]" ) ; //关闭此数据链接myConn.Close ( ) ;代码7-1使用这种解决方案的优点是不需要其他的服务器组件,部署非常方便,但是其缺点也是明显的,用它来读取Excel 2003格式以上的文件会存在数据丢失的情况,而且也无法生成Excel文件。
ASP对Excel的所有操作
A: 同一用户生成的Excel文件用同一个文件名,文件名可用用户ID号或SessionID号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。
B: 在Global.asa文件中设置Session_onEnd事件激发时,删除这个用户的Excel暂存文件。
C: 在Global.asa文件中设置Application_onStart事件激发时,删除暂存目录下的所有文件。
6、 绑定Chart图
objExcelApp.ActiveChart.Location 1
7、 显示数据表
objExcelApp.ActiveChart.HasDataTable = True
8、 显示图例
objExcelApp.ActiveChart.DataTable.ShowLegendKey = True
目录
一、 环境配置
二、 ASP对Excel的基本操作
三、 ASP操作Excel生成数据表
四、 ASP操作E件浏览、下载、删除方案
六、 附录
正文
一、 环境配置
服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即:
1.Win9x+PWS+Office
2、 新建Excel文件
objExcelApp.WorkBooks.add
set objExcelBook = objExcelApp.ActiveWorkBook
set objExcelSheets = objExcelBook.Worksheets
set objExcelSheet = objExcelBook.Sheets(1)
使用Aspose插件对Excel操作
使⽤Aspose插件对Excel操作使⽤使⽤Aspose插件对Excel⽂档进⾏导⼊导出操作使⽤前请先下载Aspose插件引⽤Excel导⼊:前台使⽤file标签获取,submit⽅式提交。
<form id="form1" enctype="multipart/form-data" method="post"><table class="table-condensed"><tr><td class="text-right">导⼊表格:</td><td class="text-left"><input type="file" name="file1" class="btn btn-default btn-lg"/></td></tr><tr><td class="text-left"><input type="submit" id="btnImport" name="btnImport" value="导⼊" class="btn btn-default"/></td></tr></table></form>后台接收:HttpPostedFileBase fileBase = Request.Files["file1"];//这⾥获取名称与前台标签name保持⼀致if (fileBase != null){string filename = Path.GetFileName(fileBase.FileName);string extension = Path.GetExtension(filename);string path = "/Upload/Test/" + DateTime.Now.ToString("yyyyMMdd") + "/";Directory.CreateDirectory(Path.GetDirectoryName(Request.MapPath(path)));string newFilename = DateTime.Now.ToString("yyyyMMddHHmmssfff");string fullFileName = path + newFilename + extension;fileBase.SaveAs(Request.MapPath(fullFileName)); try{ Stopwatch sw = new Stopwatch();//记录导⼊操作⽤时多长sw.Start();//这⾥可放⼊BLL⽅法处理string result = new ProductBLL().ImportExcel(Request.MapPath(path), newFilename, extension);//BLL⽅法 ProductBLLpublic string ImportExcel(string path, string filename, string extension){Workbook workbook = new Workbook(path + filename + extension);Worksheet worksheet = workbook.Worksheets[0];Cells cells = worksheet.Cells;for (int i = 1; i < cells.Rows.Count; i++){try{string brand = cells[i, 0].StringValue.Trim();//获取列值string years = cells[i, 1].StringValue.Trim();}catch (Exception e){continue;}}return "OK";} sw.Stop();long runTime = sw.ElapsedMilliseconds / 1000; //获取到操作⽤时多少秒 } catch (Exception e){Log.Write("导⼊", "导⼊错误", "错误信息:" + e.Message);}}Excel导出:string path = "/Upload/Test/" + DateTime.Now.ToString("yyyyMMdd") + "/";Directory.CreateDirectory(Path.GetDirectoryName(Server.MapPath(path)));string newFilename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";string fullFileName = Server.MapPath(path + newFilename);public void ExportInfo(List<Test> list, string fullFileName){Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();Aspose.Cells.Worksheet cellSheet = workbook.Worksheets[0];cellSheet.PageSetup.LeftMargin = 0.3;//左边距cellSheet.PageSetup.RightMargin = 0.3;//右边距cellSheet.PageSetup.TopMargin = 1;//上边距cellSheet.PageSetup.BottomMargin = 0.5;//下边距cellSheet.PageSetup.FooterMargin = 0.5;//页脚cellSheet.PageSetup.HeaderMargin = 0.5;//页眉cellSheet.PageSetup.Orientation = ndscape;cellSheet.PageSetup.CenterHorizontally = true;//⽔平居中cellSheet.PageSetup.CenterVertically = true;cellSheet.Cells[0, 0].PutValue("货号");cellSheet.Cells[0, 1].PutValue("颜⾊");cellSheet.Cells[0, 2].PutValue("尺码");int i = 1;foreach (var item in list){cellSheet.Cells[i, 0].PutValue(item.productno);cellSheet.Cells[i, 1].PutValue(item.size);cellSheet.Cells[i, 2].PutValue(item.color);i++;}cellSheet.AutoFitColumns();fullFileName = Path.GetFullPath(fullFileName);workbook.Save(fullFileName);}return File(fullFileName, "application/ms-excel", UserName + "_Test单" + newFilename);// ⽅法Action⾥直接返回File⽂件下载。
在ASP中怎么把页面中的数据导出到EXCEL
使用asp怎样将数据导出到excel文件 Web注意:两个函数中的“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;erControl = true;}//--></SCRIPT>导出到Word代码<script language="vbscript">Sub buildDocset table = document.all.datarow = table.rows.lengthcolumn = table.rows(1).cells.lengthSet objWordDoc = CreateObject("Word.Document")'objWordDoc.Application.Documents.Add theTemplate, FalseobjWordDoc.Application.Visible=TrueDim theArray(20,10000)for i=0 to row-1for j=0 to column-1theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXTnextnextobjWordDoc.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.Size = 18 //设定标题字体大小End WithSet rngCurrent = objWordDoc.Application.ActiveDocument.Paragraphs(3).RangeSet tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column)for i = 1 to columnobjWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter theArray(i,1)objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.Paragraph Format.alignment=1nextFor i =1 to columnFor j = 2 to rowobjWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter theArray(i,j)objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.Paragraph Format.alignment=1NextNextEnd Sub</SCRIPT>在ASP中怎么把页面中的数据导出到EXCEL直接读SQL库,我想也可以用来解决你的问题,(同理:页面上显示的内容当然也是读库的,除非你是静态的那算了)<!--#include file="../opendb.asp"--><!--写链接的事不用我弄了吧?--><title>生成报表</title><%dim conn,strconnset conn=server.CreateObject("adodb.connection")conn.Open ConnStrdim rs,sql,filename,fs,myfile,xSet fs = server.CreateObject("scripting.filesystemobject")filepath=Request.ServerVariables("APPL_PHYSICAL_PATH")filename = filepath&"temp_xls\"&year(now)&month(now)&day(now)&".xls"if fs.FileExists(filename) thenfs.DeleteFile(filename)end ifset myfile = fs.CreateTextFile(filename,true)Set rs = Server.CreateObject("ADODB.Recordset")sql = "select * from jdxx"rs.Open sql,conn,1,1if rs.EOF and rs.BOF thenelsedim strLine,responsestrstrLine=""For each x in rs.fieldsstrLine = strLine & & chr(9)Nextmyfile.writeline strLineDo while Not rs.EOFstrLine=""for each x in rs.FieldsstrLine = strLine & x.value & chr(9)nextmyfile.writeline strLiners.MoveNextloopend ifrs.Closeset rs = nothingremotefile="http://xxx.xxx.x.xxx/temp_xls/"&year(now)&month(now)&day(now)&".xls" response.write "<font size=2 color=blue>报表巳生成,<a href="&remotefile&">请点击这里下载该报表!</a></font>"%>在ASP中怎么把页面中的数据导出到EXCEL<%@ LANGUAGE="VBSCRIPT" CODEPAGE="950"%><%'關鍵所在Response.ContentType = "application/vnd.ms-excel"Set conn=Server.CreateObject("ADODB.Connection")Set rs=Server.CreateObject("ADODB.Recordset")strconn = "Provider = SQLOLEDB; Data Source = 192.168.0.2; Uid=gt_bbs;Pwd=gt_bbs;DataBase=gt_bbs"conn.open strconnSQL="Select top 100 id,uid,uer,bm,zw,zb,gxrq,ip,be From Gt_user order by id desc"rs.Open SQL,conn,3,1if rs.eof and rs.bof thenResponse.Write"<div align=center><br>沒有任何記錄</div>"else%><TABLE cellSpacing=0 cellPadding=0 width="100%" border=1><TR><TD width=12% height="25" class=borderon> 代 </TD> <TD width="11%" class=borderon> 名</TD><TD width="11%" class=borderon> 部門</TD><TD width="14%" class=borderon> </TD><TD width="6%" class=borderon> 別</TD><TD width="16%" class=borderon> 登</TD><TD width="16%" class=borderon> 登 IP</TD> </TR></TABLE><TABLE width="100%" border=1 cellPadding=0 cellSpacing=0><%do while (Not RS.Eof) and (I<RS.PageSize)%><TR bgcolor=<%=bg2%>><TD class=all width=12% height=20 > <%=rs(1)%></TD> <TD width="11%" class=all> <%=rs(2)%></TD><TD width="11%" class=all> <%=rs(3)%></TD><TD width="14%" class=all> <%=rs(4)%></TD><TD width="6%" class=all> <%=rs(5)%></TD><TD width="16%" class=all> <%=rs(6)%></TD><TD width="16%" class=all> <%=rs(7)%></TD></TR><%Rs.MoveNextLoopend IFSet Conn = NothingSet Rs = Nothing%></TABLE>。
用ASP访问excel中的数据
用ASP访问excel中的数据1、建立一个链接文件名为conn。
<%db="D:\标件.xlsx" '用的是数据实际路径哈’set conn =server.CreateObject("adodb.connection")connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & db + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1';"conn.open connstr ’打开excel%>2、查询excel表格中的内容。
<%sqlstr="select * from [标件2010年$] order by 序列desc" ‘查询语句set rs =server.CreateObject("adodb.recordset")rs.open sqlstr,conn,0,1rs.movefirstdo while not rs.eof %><tr><td width='50' height='20'><%response.write(rs("序列"))%></td><td width='70' height='20'><%response.write(rs("标准"))%></td><td width='100' height='20'><%response.write(rs("名称"))%></td><td width='60' height='20'><%response.write(rs("材质"))%></td><td width='120' height='20'><%response.write(rs("规格型号"))%></td><td width="60" height="20"><%response.write(rs("单位"))%></td><td width="120" height="20"><%response.write(rs("入库数量"))%></td><td width="50" height="20"><%response.write(rs("入库时间"))%></td><td width="80" height="20"><%response.write(rs("出库数量"))%></td><td width="80" height="20"><%response.write(rs("出库时间"))%></td><td width="80" height="20"><%response.write(rs("领用人"))%></td><td width="70" height="20"><%response.write(rs("合同号"))%></td><td width="80" height="20"><%response.write(rs("库存数量"))%></td><td width="60" height="20"><%response.write(rs("备注"))%></td></tr><%rs.movenextloopresponse.Write"</table>"conn.close%>。
ASP导出Excel数据的四种方法
ASP导出Excel数据的四种方法一、使用OWC什么是OWC?OWC是Office Web Compent的缩写,即Microsoft的Office Web组件,它为在Web中绘制图形提供了灵活的同时也是最基本的机制。
在一个intranet环境中,如果可以假设客户机上存在特定的浏览器和一些功能强大的软件(如IE5和Office 2000),那么就有能力利用Office Web组件提供一个交互式图形开发环境。
这种模式下,客户端工作站将在整个任务中分担很大的比重。
<%Option ExplicitClass ExcelGenPrivate objSpreadsheetPrivate iColOffsetPrivate iRowOffsetSub Class_Initialize()Set objSpreadsheet = Server.CreateObject("OWC.Spreadsheet")iRowOffset = 2iColOffset = 2End SubSub Class_Terminate()Set objSpreadsheet = Nothing "Clean up End SubPublic Property Let ColumnOffset(iColOff) If iColOff > 0 theniColOffset = iColOffElseiColOffset = 2End IfEnd PropertyPublic Property Let RowOffset(iRowOff) If iRowOff > 0 theniRowOffset = iRowOffElseiRowOffset = 2End IfEnd Property Sub GenerateWorksheet(objRS)"Populates the Excel worksheet based on a Recordset"s contents"Start by displaying the titlesIf objRS.EOF then Exit SubDim objField, iCol, iRowiCol = iColOffsetiRow = iRowOffsetFor Each objField in objRS.FieldsobjSpreadsheet.Cells(iRow, iCol).Value = /doc/71b0b63383c4bb4cf7ecd11a.htmlobjSpreadsheet.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 + 1Next "objField"Display all of the dataDo While Not objRS.EOFiRow = iRow + 1iCol = iColOffsetFor Each objField in objRS.FieldsIf IsNull(objField.Value) thenobjSpreadsheet.Cells(iRow, iCol).Value = ""ElseobjSpreadsheet.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 = 10End IfiCol = iCol + 1Next "objFieldobjRS.MoveNextLoopEnd Sub Function SaveWorksheet(strFileName)"Save the worksheet to a specified filenameOn Error Resume NextCall objSpreadsheet.ActiveSheet.Export(strFileName, 0)SaveWorksheet = (Err.Number = 0)End FunctionEnd ClassDim objRSSet objRS = Server.CreateObject("ADODB.Recordset")objRS.Open "SELECT * FROM xxxx", "Provider=SQLOLEDB.1;Persist SecurityInfo=True;User ID=xxxx;Password=xxxx;Initial Catalog=xxxx;Data source=xxxx;"Dim SaveNameSaveName = Request.Cookies("savename")("name")Dim objExcelDim ExcelPathExcelPath = "Excel\" & SaveName & ".xls"Set objExcel = New ExcelGenobjExcel.RowOffset = 1objExcel.ColumnOffset = 1objExcel.GenerateWorksheet(objRS)If objExcel.SaveWorksheet(Server.MapPath(ExcelPath)) then "Response.Write "已保存为Excel文件.下载"ElseResponse.Write "在保存过程中有错误!"End IfSet objExcel = NothingobjRS.CloseSet objRS = Nothing%>二、用Excel的Application组件在客户端导出到Excel或Word 注意:两个函数中的“data“是网页中要导出的table的 id导出到Excel代码导出到Word代码三、直接在IE中打开,再存为EXCEL文件把读出的数据用格式,在网页中显示出来,同时,加上下一句即可把EXCEL表在客客户端显示。
ASP导入Excel表格
201412261323_ASP导入Excel表格导入EXCEL表格常用于批处理数据或者数据迁移项目。
导入代码如下:<!--#include file="conn.asp" --><%Set ConnExcel=Server.CreateObject("ADODB.Connection")'--利用Open 方法打开数据库StrExcelConn="Driver={Microsoft Excel Driver (*.xls)};"&"DriverId=790; DBQ="&Server.MapPath("card.xls") 'EXCEL文件路径ConnExcel.Open StrExcelConn'--建立数据集对象Rs并查询数据Set Rs = Server.CreateObject("ADODB.Recordset")Sql="select * from [default$]" '特别注意EXCEL表名要一致rs.Open Sql,ConnExcel,1,1do while not rs.eofrsx=server.createobject("adodb.recordset")setsqlx="select * from pcard"sqlx,conn,1,3rsx.openrsx.addnewrsx("cardnum")=rs(0)rsx("cardpwd")=rs(1)rsx("cardpay")=cint(rs(2))rsx.updatersx.closersx=nothingsetrs.MoveNextlooprs.closeset rs=nothingConnExcel.closeset ConnExcel=nothingCall Closeconn()response.write "<script language=JavaScript>"response.Write "alert('导入成功!'); "response.Write "</script>"Response.end()%>人生最精彩的不是实现梦想的瞬间,而是坚持梦想的过程。
ASP应用程序中实现Excel报表处理
2 编程 实现 E cl xe 报表处 理
21 xe 数据导入数据库的实现 . E cl 读 出 E cl xe 文档 中数据 的主要操 作步 骤 为 : ) ( 1
获 得 E cl 档 的路 径 和文件 名 ,打 开 E cl xe 文 xe 文 档 ;2 打开工 作表 , ( ) 建立 记录 集. 这里 需要 特别说 明的是 , 要打 开 的工作 表名 一定 要写 成 “ 名¥t 【 表 】 t
据库 和 南 Mi oo ces数据 库 中 的数据 生 成 c sf A cs r t
E cl 档 ,ቤተ መጻሕፍቲ ባይዱ出编程 实 现方法 , x e文 提 并给 出源 程序 .
1 AS P程序访 问 E cl xe 文档 的基本原理
A P是 一种 服务 器端 脚本 执行 环境 ,使 用它 S
可 以创建 和运 行 动态 、 互 的 We 应 用程 序 . P 交 b AS
的形 式 ;() 3 读各 单元 格 的值 . 其实 现 过程 如下 .
<hm l t > <he d a > <m e ht - q v CO e — p ”c tn =”e / t lc a s t m tp e ui=” ntm Ty e one t txt m ; h re = - h - g b231 ” 2 >
可 以结合 HT 、 本命 令 和 AccX组 件 , 同 ML 脚 te i 共 创建 动态 的We 页和基 于 we 服务 器 的功能 强大 b b
的应 用程 序. S A P可 以通 过 A O AcvX D t O . D ( te a b i a
[Asp.net]C#操作Excel的几种方式优缺点比较
[]C#操作Excel的⼏种⽅式优缺点⽐较在项⽬中我们常常需要将数据库中的数据导出成Excel⽂件有⼀次⼯作中我的⽬的就是读取Excel到内存中,整理成指定格式整理后再导出到Excel。
因为我要处理的每个Excel表格⽂件很⼤。
⼀个表格多个sheet,每个sheet-⼀千到上W⾏不等。
列数超过300列。
所有在这⾥我将在使⽤⼀些处理Excel的⽅法的时候,所遇到的⼀些问题记录下来,也做⼀个⼤致的⽐较。
主要是针对此次数据处理NPOI⽬前⽐较流⾏的⼀款操作Excel的组件。
移植于Java的POI,是⼀个开源项⽬,对Excel的操作很全⾯。
官⽹优势:1、免费2、机器不⽤安装Office也可以直接操作Excel,免去很多事。
3、现在已⾄此的⽂件格式包括Excel2003和2007之后的xls,xlsx以及docx。
4、⽀持⽂件的导⼊和导出5、⽹上有丰富的实例代码,遇到基本的问题可以上⽹参考⽹友的解决⽅法。
6、NPOI能⽀持绝⼤多数Excel⾥⾯的功能操作(Excel内的公式函数、设置单元格的格式样式)7、导⼊导出速度快。
内存占⽤⼤。
特定优势:⽀持读取超过256列的Excel表格。
缺点:参考⽬前很多⽹上的⽂档,npoi导出xlsx,使⽤ XSSFWorkbook 使⽤ Write ⽅法写⼊内存流后,返回的 MemoryStream 已经被关闭了,不能再使⽤了。
你需要花⼀点时间解决这个问题。
可以参考:xlsx格式导出推荐使⽤Epplus组件NPOI辅助类:1 using System;2 using System.Collections;3 using System.Collections.Generic;4 using System.Text;5 using System.IO;6 using System.Data;7 using System.Windows.Forms;8 using erModel;9 using erModel;10 using erModel;1112 namespace TEMS.Service13 {14 public static class ExcelHelperForCs15 {16 #region 私有⽅法1718 /// <summary>19 /// 获取要保存的⽂件名称(含完整路径)20 /// </summary>21 /// <returns></returns>22 private static string GetSaveFilePath()23 {24 SaveFileDialog saveFileDig = new SaveFileDialog();25 saveFileDig.Filter = "Excel Office97-2003(*.xls)|*.xls|Excel Office2007及以上(*.xlsx)|*.xlsx";26 saveFileDig.FilterIndex = 0;28 saveFileDig.OverwritePrompt = true;29 saveFileDig.InitialDirectory = Common.DesktopDirectory;30 string filePath = null;31 if (saveFileDig.ShowDialog() == DialogResult.OK)32 {33 filePath = saveFileDig.FileName;34 }3536 return filePath;37 }3839 /// <summary>40 /// 获取要打开要导⼊的⽂件名称(含完整路径)41 /// </summary>42 /// <returns></returns>43 private static string GetOpenFilePath()44 {45 OpenFileDialog openFileDig = new OpenFileDialog();46 openFileDig.Filter = "Excel Office97-2003(*.xls)|*.xls|Excel Office2007及以上(*.xlsx)|*.xlsx";47 openFileDig.FilterIndex = 0;48 openFileDig.Title = "打开";49 openFileDig.CheckFileExists = true;50 openFileDig.CheckPathExists = true;51 openFileDig.InitialDirectory = Common.DesktopDirectory;52 string filePath = null;53 if (openFileDig.ShowDialog() == DialogResult.OK)54 {55 filePath = openFileDig.FileName;56 }5758 return filePath;59 }6061 /// <summary>62 /// 判断是否为兼容模式63 /// </summary>64 /// <param name="filePath"></param>65 /// <returns></returns>66 private static bool GetIsCompatible(string filePath)67 {68 return filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase);69 }7071 /// <summary>72 /// 创建⼯作薄73 /// </summary>74 /// <param name="isCompatible"></param>75 /// <returns></returns>76 private static IWorkbook CreateWorkbook(bool isCompatible)77 {78 if (isCompatible)79 {80 return new HSSFWorkbook();81 }82 else83 {84 return new XSSFWorkbook();85 }86 }8788 /// <summary>89 /// 创建⼯作薄(依据⽂件流)90 /// </summary>91 /// <param name="isCompatible"></param>92 /// <param name="stream"></param>93 /// <returns></returns>94 private static IWorkbook CreateWorkbook(bool isCompatible, dynamic stream)95 {96 if (isCompatible)97 {98 return new HSSFWorkbook(stream);99 }100 else101 {102 return new XSSFWorkbook(stream);103 }104 }105106 /// <summary>107 /// 创建表格头单元格108 /// </summary>109 /// <param name="sheet"></param>110 /// <returns></returns>111 private static ICellStyle GetCellStyle(IWorkbook workbook)112 {113 ICellStyle style = workbook.CreateCellStyle();114 style.FillPattern = FillPattern.SolidForeground;115 style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;116117 return style;118 }120 /// <summary>121 /// 从⼯作表中⽣成DataTable122 /// </summary>123 /// <param name="sheet"></param>124 /// <param name="headerRowIndex"></param>125 /// <returns></returns>126 private static DataTable GetDataTableFromSheet(ISheet sheet, int headerRowIndex) 127 {128 DataTable table = new DataTable();129130 IRow headerRow = sheet.GetRow(headerRowIndex);131 int cellCount = stCellNum;132133 for (int i = headerRow.FirstCellNum; i < cellCount; i++)134 {135 if (headerRow.GetCell(i) == null || headerRow.GetCell(i).StringCellValue.Trim() == "") 136 {137 // 如果遇到第⼀个空列,则不再继续向后读取138 cellCount = i;139 break;140 }141 DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); 142 table.Columns.Add(column);143 }144145 for (int i = (headerRowIndex + 1); i <= stRowNum; i++)146 {147 IRow row = sheet.GetRow(i);148 //如果遇到某⾏的第⼀个单元格的值为空,则不再继续向下读取149 if (row != null && !string.IsNullOrEmpty(row.GetCell(0).ToString()))150 {151 DataRow dataRow = table.NewRow();152153 for (int j = row.FirstCellNum; j < cellCount; j++)154 {155 dataRow[j] = row.GetCell(j).ToString();156 }157158 table.Rows.Add(dataRow);159 }160 }161162 return table;163 }164165 #endregion166167 #region 公共导出⽅法168169 /// <summary>170 /// 由DataSet导出Excel171 /// </summary>172 /// <param name="sourceTable">要导出数据的DataTable</param>173 /// <returns>Excel⼯作表</returns>174 public static string ExportToExcel(DataSet sourceDs, string filePath = null)175 {176177 if (string.IsNullOrEmpty(filePath))178 {179 filePath = GetSaveFilePath();180 }181182 if (string.IsNullOrEmpty(filePath)) return null;183184 bool isCompatible = GetIsCompatible(filePath);185186 IWorkbook workbook = CreateWorkbook(isCompatible);187 ICellStyle cellStyle = GetCellStyle(workbook);188189 for (int i = 0; i < sourceDs.Tables.Count; i++)190 {191 DataTable table = sourceDs.Tables[i];192 string sheetName = "result" + i.ToString();193 ISheet sheet = workbook.CreateSheet(sheetName);194 IRow headerRow = sheet.CreateRow(0);195 // handling header.196 foreach (DataColumn column in table.Columns)197 {198 ICell cell = headerRow.CreateCell(column.Ordinal);199 cell.SetCellValue(column.ColumnName);200 cell.CellStyle = cellStyle;201 }202203 // handling value.204 int rowIndex = 1;205206 foreach (DataRow row in table.Rows)207 {208 IRow dataRow = sheet.CreateRow(rowIndex);209210 foreach (DataColumn column in table.Columns)212 dataRow.CreateCell(column.Ordinal).SetCellValue((row[column] ?? "").ToString());213 }214215 rowIndex++;216 }217 }218219 FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);220 workbook.Write(fs);221 fs.Dispose();222 workbook = null;223224 return filePath;225226 }227228 /// <summary>229 /// 由DataTable导出Excel230 /// </summary>231 /// <param name="sourceTable">要导出数据的DataTable</param>232 /// <returns>Excel⼯作表</returns>233 public static string ExportToExcel(DataTable sourceTable, string sheetName = "result", string filePath = null)234 {235 if (sourceTable.Rows.Count <= 0) return null;236237 if (string.IsNullOrEmpty(filePath))238 {239 filePath = GetSaveFilePath();240 }241242 if (string.IsNullOrEmpty(filePath)) return null;243244 bool isCompatible = GetIsCompatible(filePath);245246 IWorkbook workbook = CreateWorkbook(isCompatible);247 ICellStyle cellStyle = GetCellStyle(workbook);248249 ISheet sheet = workbook.CreateSheet(sheetName);250 IRow headerRow = sheet.CreateRow(0);251 // handling header.252 foreach (DataColumn column in sourceTable.Columns)253 {254 ICell headerCell = headerRow.CreateCell(column.Ordinal);255 headerCell.SetCellValue(column.ColumnName);256 headerCell.CellStyle = cellStyle;257 }258259 // handling value.260 int rowIndex = 1;261262 foreach (DataRow row in sourceTable.Rows)263 {264 IRow dataRow = sheet.CreateRow(rowIndex);265266 foreach (DataColumn column in sourceTable.Columns)267 {268 dataRow.CreateCell(column.Ordinal).SetCellValue((row[column]??"").ToString());269 }270271 rowIndex++;272 }273 FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);274 workbook.Write(fs);275 fs.Dispose();276277 sheet = null;278 headerRow = null;279 workbook = null;280281 return filePath;282 }283284 /// <summary>285 /// 由List导出Excel286 /// </summary>287 /// <typeparam name="T">类型</typeparam>288 /// <param name="data">在导出的List</param>289 /// <param name="sheetName">sheet名称</param>290 /// <returns></returns>291 public static string ExportToExcel<T>(List<T> data, IList<KeyValuePair<string, string>> headerNameList, string sheetName = "result", string filePath = null) where T : class 292 {293 if (data.Count <= 0) return null;294295 if (string.IsNullOrEmpty(filePath))296 {297 filePath = GetSaveFilePath();298 }299300 if (string.IsNullOrEmpty(filePath)) return null;301302 bool isCompatible = GetIsCompatible(filePath);304 IWorkbook workbook = CreateWorkbook(isCompatible);305 ICellStyle cellStyle = GetCellStyle(workbook);306 ISheet sheet = workbook.CreateSheet(sheetName);307 IRow headerRow = sheet.CreateRow(0);308309 for (int i = 0; i < headerNameList.Count; i++)310 {311 ICell cell = headerRow.CreateCell(i);312 cell.SetCellValue(headerNameList[i].Value);313 cell.CellStyle = cellStyle;314 }315316 Type t = typeof(T);317 int rowIndex = 1;318 foreach (T item in data)319 {320 IRow dataRow = sheet.CreateRow(rowIndex);321 for (int n = 0; n < headerNameList.Count; n++)322 {323 object pValue = t.GetProperty(headerNameList[n].Key).GetValue(item, null);324 dataRow.CreateCell(n).SetCellValue((pValue ?? "").ToString());325 }326 rowIndex++;327 }328 FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);329 workbook.Write(fs);330 fs.Dispose();331332 sheet = null;333 headerRow = null;334 workbook = null;335336 return filePath;337 }338339 /// <summary>340 /// 由DataGridView导出341 /// </summary>342 /// <param name="grid"></param>343 /// <param name="sheetName"></param>344 /// <param name="filePath"></param>345 /// <returns></returns>346 public static string ExportToExcel(DataGridView grid, string sheetName = "result", string filePath = null) 347 {348 if (grid.Rows.Count <= 0) return null;349350 if (string.IsNullOrEmpty(filePath))351 {352 filePath = GetSaveFilePath();353 }354355 if (string.IsNullOrEmpty(filePath)) return null;356357 bool isCompatible = GetIsCompatible(filePath);358359 IWorkbook workbook = CreateWorkbook(isCompatible);360 ICellStyle cellStyle = GetCellStyle(workbook);361 ISheet sheet = workbook.CreateSheet(sheetName);362363 IRow headerRow = sheet.CreateRow(0);364365 for (int i = 0; i < grid.Columns.Count; i++)366 {367 ICell cell = headerRow.CreateCell(i);368 cell.SetCellValue(grid.Columns[i].HeaderText);369 cell.CellStyle = cellStyle;370 }371372 int rowIndex = 1;373 foreach (DataGridViewRow row in grid.Rows)374 {375 IRow dataRow = sheet.CreateRow(rowIndex);376 for (int n = 0; n < grid.Columns.Count; n++)377 {378 dataRow.CreateCell(n).SetCellValue((row.Cells[n].Value ?? "").ToString());379 }380 rowIndex++;381 }382383 FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);384 workbook.Write(fs);385 fs.Dispose();386387 sheet = null;388 headerRow = null;389 workbook = null;390391 return filePath;392 }393394 #endregion396 #region 公共导⼊⽅法397398 /// <summary>399 /// 由Excel导⼊DataTable400 /// </summary>401 /// <param name="excelFileStream">Excel⽂件流</param>402 /// <param name="sheetName">Excel⼯作表名称</param>403 /// <param name="headerRowIndex">Excel表头⾏索引</param>404 /// <param name="isCompatible">是否为兼容模式</param>405 /// <returns>DataTable</returns>406 public static DataTable ImportFromExcel(Stream excelFileStream, string sheetName, int headerRowIndex, bool isCompatible) 407 {408 IWorkbook workbook = CreateWorkbook(isCompatible, excelFileStream);409 ISheet sheet = null;410 int sheetIndex = -1;411 if (int.TryParse(sheetName, out sheetIndex))412 {413 sheet = workbook.GetSheetAt(sheetIndex);414 }415 else416 {417 sheet = workbook.GetSheet(sheetName);418 }419420 DataTable table = GetDataTableFromSheet(sheet, headerRowIndex);421422 excelFileStream.Close();423 workbook = null;424 sheet = null;425 return table;426 }427428 /// <summary>429 /// 由Excel导⼊DataTable430 /// </summary>431 /// <param name="excelFilePath">Excel⽂件路径,为物理路径。
ASP.NET编程中对Excel文档操作的探讨及应用
题。
关键 词 : As .e ; x e; 据 库 pn t E c l 数
Dic so nd Ap i a i n fEx e c s us i n a plc to o c l Do um e si nt n ASP. NET o r m mi g Pr g a n
21 年 第1 0 0 9卷 第 3 期
计 算 机 系 统 应 用
A N 编程中对 E c S .盯 P x e 文档操作的探讨及应用① l
张文博 余 文芳 ( 武汉通信指挥 学院 6系 2 2队 湖北 武 汉 4 0 1 ) 3 0 0
摘 要 : 通过对 A p n t s .e 编程中 常用的操作 E c l x e 文档 方法的探讨 ,得 出了两种 实际可行 的方法 ,并在具体项
i p ri g m o n Ex e d c m e t t te aa a e s eie , wh c s l e a r ci a p o lm i a pn t t c l o u n s O h d tb s i r lz d ih o v s p a t l r b e c n s .e p o r m m i g r ga n.
2 A pn t s .e下操作E c l x e文档的两种常用方法
通过在实践 中的归纳总结 ,笔者发现在 As .e pn t
下对 E c l x e 文档 的操作有 以下两种常用的方法 :
21 将 E c I . x e 文档作为数据源进行操作
在 .e n t环境 下 ,可 以直 接 以数 据源 的形式 操作
ASP导出Excel数据的四种方法
ASP导出E xcel数据的四种方法什么是OWC?OWC是O ffice WebCompe nt的缩写,即Mic rosof t的Off ice W eb组件,它为在We b中绘制图形提供了灵活的同时也是最基本的机制。
在一个intr anet环境中,如果可以假设客户机上存在特定的浏览器和一些功能强大的软件(如IE5和Off ice 2000),那么就有能力利用Of ficeWeb组件提供一个交互式图形开发环境。
这种模式下,客户端工作站将在整个任务中分担很大的比重。
<%Opti on Ex plici tCl ass E xcelG enP rivat e obj Sprea dshee tPr ivate iCol Offse tP rivat e iRo wOffs etS ub Cl ass_I nitia lize()Se t obj Sprea dshee t = S erver.Crea teObj ect("OWC.S pread sheet")i RowOf fset= 2 iColO ffset = 2EndSub SubClass_Term inate()S et ob jSpre adshe et =Nothi ng 'C leanupE nd Su bP ublic Prop ertyLet C olumn Offse t(iCo lOff)IfiColO ff >0 the niC olOff set = iCol Off ElseiCol Offse t = 2End If End P roper tyPubli c Pro perty LetRowOf fset(iRowO ff) If iR owOff> 0theniRow Offse t = i RowOf fEl sei RowOf fset= 2 End I fEn d Pro perty SubGener ateWo rkshe et(ob jRS)'Pop ulate s the Exce l wor kshee t bas ed on a Re cords et'sconte nts 'Star t bydispl aying thetitle sIf objR S.EOF then Exit SubDimobjFi eld,iCol, iRowiCo l = i ColOf fsetiRow = iR owOff set For E ach o bjFie ld in objR S.Fie lds objSp reads heet.Cells(iRow, iCo l).Va lue = objF ield.NameobjS pread sheet.Colu mns(i Col).AutoF itCol umns'设置E xcel表里的字体objS pread sheet.Cell s(iRo w, iC ol).F ont.B old = Trueobj Sprea dshee t.Cel ls(iR ow, i Col).Font.Itali c = F alseobjS pread sheet.Cell s(iRo w, iC ol).F ont.S ize = 10 objSp reads heet.Cells(iRow, iCo l).Ha lignm ent = 2 '居中iC ol =iCol+ 1 Next'objF ield'Dis playall o f the dataDoWhile NotobjRS.EOFiRow = iR ow +1iC ol =iColO ffsetFor Each objF ieldin ob jRS.F ieldsIfIsNul l(obj Field.Valu e) th eno bjSpr eadsh eet.C ells(iRow, iCol).Val ue =""E lse objSp reads heet.Cells(iRow, iCo l).Va lue = objF ield.Valueobj Sprea dshee t.Col umns(iCol).Auto FitCo lumnsobj Sprea dshee t.Cel ls(iR ow, i Col).Font.Bold= Fal seo bjSpr eadsh eet.C ells(iRow, iCol).Fon t.Ita lic = Fals eob jSpre adshe et.Ce lls(i Row,iCol).Font.Size = 10End If iCol= iCo l + 1Nex t 'ob jFiel dob jRS.M oveNe xtL oop End S ub Fu nctio n Sav eWork sheet(strF ileNa me) 'Sav e the work sheet to a spec ified file nameOn E rrorResum e Nex tCa ll ob jSpre adshe et.Ac tiveS heet.Expor t(str FileN ame,0)S aveWo rkshe et =(Err.Numbe r = 0)En d Fun ctionEnd Clas sD im ob jRS Set o bjRS= Ser ver.C reate Objec t("AD ODB.R ecord set")obj RS.Op en "S ELECT * FR OM xx xx","Prov ider=SQLOL EDB.1;Pers ist S ecuri ty Info=True;UserID=xx xx;Pa sswor d=xxx x;Ini tialCatal og=xx xx;Da ta so urce=xxxx;" Di m Sav eNameSav eName = Re quest.Cook ies("saven ame")("nam e") Dim o bjExc elD im Ex celPa thE xcelP ath = "Exc el\"& Sav eName & ".xls"SetobjEx cel = NewExcel Gen objEx cel.R owOff set = 1o bjExc el.Co lumnO ffset = 1objE xcel.Gener ateWo rkshe et(ob jRS)If o bjExc el.Sa veWor kshee t(Ser ver.M apPat h(Exc elPat h)) t hen 'Resp onse.Write "<ht ml><b ody b gcolo r='ga insbo ro' t ext='#000000'>已保存为Ex cel 文件.<a hre f='"& ser ver.U RLEnc ode(E xcelP ath)& "'>下载</a>"E lse Respo nse.W rite"在保存过程中有错误!"E nd IfSet objE xcel= Not hingobjR S.Clo seS et ob jRS = Noth ing %>二、用Excel的Appl icati on组件在客户端导出到Exce l或Wor d注意:两个函数中的“d ata“是网页中要导出的tab le的i d<i nputtype="hidd en" n ame="out_w ord"oncli ck="v bscri pt:bu ildDo c" va lue="导出到wo rd" c lass="notP rint"><i nputtype="hidd en" n ame="out_e xcel" oncl ick="Autom ateEx cel();" va lue="导出到ex cel"class="not Print">导出到Exce l代码<SCRI PT LA NGUAG E="ja vascr ipt"><!--fu nctio n Aut omate Excel(){//Start Exce l and getAppli catio n obj ect.varoXL = newActiv eXObj ect("Excel.Appl icati on");//Get a newworkb ook.varoWB = oXL.Workb ooks.Add();va r oSh eet = oWB.Activ eShee t;v ar ta ble = docu ment.all.d ata;varhang= tab le.ro ws.le ngth;va r lie = ta ble.r ows(0).cel ls.le ngth;// Addtable head ers g oingcellby ce ll. for (i=0;i<hang;i++){ for (j=0;j<lie;j++)o Sheet.Cell s(i+1,j+1).valu e = t able.rows(i).ce lls(j).inn erTex t;}}oXL.Visib le =true;oXer Contr ol =true;} //--></S CRIPT>导出到Word代码<s cript lang uage="vbsc ript">Su b bui ldDocset tabl e = d ocume nt.al l.dat aro w = t able.rows.lengt hco lumn= tab le.ro ws(1).cell s.len gth SetobjWo rdDoc = Cr eateO bject("Wor d.Doc ument")objWo rdDoc.Appl icati on.Do cumen ts.Ad d the Templ ate,Falseobj WordD oc.Ap plica tion.Visib le=Tr ueDim t heArr ay(20,10000)f or i=0 torow-1for j=0to co lumn-1th eArra y(j+1,i+1) = ta ble.r ows(i).cel ls(j).inne rTEXTnex tne xto bjWor dDoc.Appli catio n.Act iveDo cumen t.Par agrap hs.Ad d.Ran ge.In sertB efore("综合查询结果集") //显示表格标题ob jWord Doc.A pplic ation.Acti veDoc ument.Para graph s.Add.Rang e.Ins ertBe fore("") Set r ngPar a = o bjWor dDoc.Appli catio n.Act iveDo cumen t.Par agrap hs(1).Rang eWi th rn gPara.Bo ld =True//将标题设为粗体.Par agrap hForm at.Al ignme nt =1 //将标题居中.Fon t.Nam e = "隶书" //设定标题字体.Font.Size= 18//设定标题字体大小End WithSet rngC urren t = o bjWor dDoc.Appli catio n.Act iveDo cumen t.Par agrap hs(3).Rang eSe t tab Curre nt =ObjWo rdDoc.Appl icati on.Ac tiveD ocume nt.Ta bles.Add(r ngCur rent,row,c olumn)f or i= 1 t o col umn objW ordDo c.App licat ion.A ctive Docum ent.T ables(1).R ows(1).Cel ls(i).Rang e.Ins ertAf ter theArr ay(i,1)o bjWor dDoc.Appli catio n.Act iveDo cumen t.Tab les(1).Row s(1).Cells(i).R ange.Parag raphF ormat.alig nment=1n ext For i =1 t o col umn For j = 2to ro wob jWord Doc.A pplic ation.Acti veDoc ument.Tabl es(1).Rows(j).C ells(i).Ra nge.I nsert After theA rray(i,j)objW ordDo c.App licat ion.A ctive Docum ent.T ables(1).R ows(j).Cel ls(i).Rang e.Par agrap hF orm at.al ignme nt=1NextNex tE nd Su b</SCRIP T>三、直接在IE中打开,再存为EXCEL文件把读出的数据用<t able>格式,在网页中显示出来,同时,加上下一句即可把EX CEL表在客客户端显示。
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报表生成报表是做系统经常遇到的事,一些企业或者单位往往要求EXCEL格式的报表!第一种方式利用FSO生成文本文件。
程序代码:Set fs = server.CreateObject("scripting.filesystemobject")'--假设你想让生成的EXCEL文件做如下的存放filename = "c:\online.xls"'-创建EXCEL文件set myfile = fs.CreateTextFile(filename,true)rs.Open sql,connif rs.EOF and rs.BOF thenelsedim strLine,responsestrstrLine=""For each x in rs.fieldsstrLine= strLine & & chr(9)Next'--将表的列名先写入EXCELmyfile.writeline strLineDo while Not rs.EOFstrLine=""for each x in rs.FieldsstrLine= strLine & x.value & chr(9)next'--将表的数据写入EXCELmyfile.writeline strLiners.MoveNextloopend ifSet fs=Nothing这方法的好处是不管有多少条记录速度上是没问题但是有一个很严重的缺点就是生成的EXCEL文件的格式不能得到很好的控制例如单元格的格式不能改变等第二种方法用EXCEL组件+EXCEL模板原理是打开一个存在的EXCEL模板文件然后写入数据后在另存为所要的报表文件优点:格式能很好的控制缺点:速度上很慢 (因为控件接口很费资源)看了微软的说明又想到了用数组做中转的方法只要打开一个接口写入所有数据,于是问题得到了解决,可是新的问题出来了,100万或者更高的记录时数组就的空间分配就成了问题了.工夫不负有心人 ,经过几天努力终于完美解决就是记录多时分批写入~~~~~~~~~程序代码:sub writetoarr(lines,begin_rs,begin_exl)'====================================== ======================================== '过程writetoarr(lines,begin_rs,begin_exl)写入EXCEL'lines:要写入的记录条数'begin_rs:从第几条记录开始'begin_exl:要写入的EXCEL开始位置'====================================== ======================================== redim temparr(lines-1,11)'--将表的列名存放到数组'--将表的数据存放到数组ii=1For i = begin_rs To begin_rs+lines-1j=0'response.write ii&"<br>"For each x in rs.fieldstemparr(ii-1,j)=x.valuej=j+1Nextii=ii+1rs.movenextNextobjExcelSheet.Range("A"&begin_exl).Resize(lines, 12).Value = temparrredim temparr(0,0)response.write "从A"&begin_exl&"开始写到A"&begin_exl+lines&"<br>"response.write "从第"&begin_rs&"条到"&begin_rs+lines&"条记录<br>"response.write "共写入"&lines&"行<br>"response.write "-------------------------<br>"end submaxk=rs.recordcountbeginrs=1 '从第几条记录开始,一般是1beginexl=2 '从excel的第几行开始写,一般是2liness=200 '每次操作多少条记录,不建议超过10万do while maxk>0if maxk>liness thencall writetoarr(liness,beginrs,beginexl)beginrs=beginrs+linessbeginexl=beginexl+linessmaxk=maxk-linesselsecall writetoarr(maxk,beginrs,beginexl)exit doend ifloop。
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导出为Word或Excel的最简单方法
ASP导出为Word或Excel的最简单方法2010-09-04 15:05方法1:把一个Word文档另存为XML格式(可能需要Office2003才能支持),然后你就可以用操作XML文件的方法,来对这个文件中指定的文字替换成你需要的内容。
重新打开这个文件,你会发现它是在Word中打开的,这样可以用Word来继续编辑或者打印。
方法2:我在做一项目时,客户要求要将从数据库中获取数据后的ASP页面导出成EXCEL或WORD文档。
经本人试验后找出了最简单的方法:在ASP文件的最开头位置加入下面的代码就可以了,非常简单。
Asp代码1.EXCEL2.<%3.Response.ContentType ="application/vnd.ms-excel"4.Response.AddHeader "Content-Disposition", "attachment; filename=红宝网络表格.xls"5.%>6.7.WORD8.<%9.Response.ContentType ="application/vnd.ms-word"10.Response.AddHeader "Content-Disposition", "attachment; filename=红宝网络文档.doc"11.%>导出为WORD时,若文档中含有表格,需要打打印,则要在导出的页面中加入下面的样式。
Css代码1.<style type="text/css">2.<!--3.table{4.border-collapse:collapse;border:none;mso-border-alt:solidwindowtext .5pt;5.mso-yfti-tbllook:480;mso-padding-alt:0cm 5.4pt 0cm5.4pt;mso-border-insideh:6..5pt solid windowtext;mso-border-insidev:.5pt solidwindowtext;border-left:solid windowtext 1.0pt;border-top:solid windowtext 1.0pt;7.}8.td{9.border-top:none;border-left:10.none;border-bottom:solid windowtext 1.0pt;border-right:solidwindowtext 1.0pt;11.mso-border-top-alt:solidwindowtext .5pt;mso-border-left-alt:solid windowtext .5pt;12.mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm5.4pt;13.}14.-->15.</style>我打字系统项目中的一个导出为EXCEL文件的实例代码如下:Asp代码1.<!--#include file="hbwlConfig.asp" -->2.<%Response.ContentType ="application/vnd.ms-excel"3.Response.AddHeader "Content-Disposition", "attachment;filename=chengji.xls"%>4.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">5.<html xmlns="/1999/xhtml">6.<head>7.<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />8.<title>打字成绩</title>9.<style type="text/css">10..tableWg {border:1px solid #9bbde6;}11..tableWg tr{text-align:center;}12..tableWg td{ border-bottom:1px dotted #9bbde6; border-right:1pxdotted #9bbde6;}13.</style>14.</head>15.<body>16.<%sql=session("chengjisql")17.response.Write hbwl.dbSelect(sql,0,1,"",0,"",0,"tableWg")%>18.</body>19.</html>20.<%set hbwl=nothing%>文章来源:季长旭博客鹿胎膏。
ASP连接excel的方法
asp连接Excel的方法一、asp连接Excel的方法与代码:<%dim connxls,connstrxlsconnstrxls="DBQ=d:\newexcel.xls;DefaultDir=;DRIVER={Microsoft Excel Driver (*.xls)};"Set connxls=Server.CreateObject("ADODB.Connection")connxls.Open connstrxlsSet rsxls=Server.CreateObject("ADODB.Recordset")SQLxls = "select * from [new$]"%>注意:写法和连接ACCESS基本相同,不同的是,在调用工作表的时候,不能直接用表名,工作表名后要加$,而且要用“[]”括起来。
二、asp操作Excel的总结:1、建立Excel对象setobjExcelApp=CreateObject("Excel.Application")objExcelApp.DisplayAlerts=false不显示警告objExcelApp.Application.Visible=false不显示界面2、新建Excel文件objExcelApp.WorkBooks.addsetobjExcelBook=objExcelApp.ActiveWorkBooksetobjExcelSheets=objExcelBook.WorksheetssetobjExcelSheet=objExcelBook.Sheets(1)3、读取已有Excel文件strAddr=Server.MapPath(".")objExcelApp.WorkBooks.Open(strAddr&"\Templet\Table.xls")Set objExcelBook=objExcelApp.ActiveWorkBookSet objExcelSheets=objExcelBook.WorksheetsSet objExcelSheet=objExcelBook.Sheets(1)4、另存Excel文件objExcelBook.SaveAsstrAddr&"\Temp\Table.xls"5、保存Excel文件objExcelBook.Save(笔者测试时保存成功,页面报错。
在ASP网页中访问Excel文件
在ASP网页中访问Excel文件在ASP网页中访问Excel文件Excel文件可以作为活动文档(ActiveX Document)在活动文档容器(ActiveX Document Container)中打开,而IE就是一个活动文档容器,所以当页面中的链接指向一个Excel文件时,单击此链接即可启动Excel,最终将文件显示在IE窗口中。
这种方法虽然简单,但存在不少缺陷:客户机内必须安装Excel。
在企业内部网上还有可能做到,但Internet上就不现实了。
访问文档时将启动Excel,速度较慢。
若览器不是IE,则可能不是活动文档容器,因此将不能正确显示文件。
下面介绍一种在ASP文件中通过ADO访问Excel文件的方法。
----ADO是微软发布的基于OLEDB技术的数据库编程接口,通过ODBC驱动程序可以访问多种不同格式的数据文件,其中包括Excel文件。
要获得Excel的ODBC驱动程序,可以通过安装Office97,也可以去微软的站点下载。
正确安装后在控制面板中会出现ODBC数据源管理器,打开它确认在驱动程序页中有Excel的驱动程序。
然后编写Brow.ASP程序,如下例所示。
例中假设在同一目录下有Excel文件01.xls,且包含名为sheet1的工作表,工作表的第一行为列标题,以后为相应的数据。
Brow.asp:程序代码:<%Const adOpenStatic = 3Dim conn Dim rs ,dbPath Set conn = erver.CreateObject("ADODB.Connection") ‘ 生成实际路dbPath=server.MapPath("01.xls") ‘ 驱动程序名称必须与ODBC中的驱动程序名完全一致,包括空格conn.Open "driver={Microsoft Excel Driver (*.xls)};dbq=" & dbPath Set rs = Server.CreateObject("ADODB.Rec ordset") ‘ 在工作表后加上$,同时必须在工作表名外加括号rs.Open "[sheet1$]", conn, adOpenStatic% >< html >< head >< meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80" >< meta name="GENERATOR" content="Microsoft FrontPage Express 2.0" >< title > 浏览Excel数据表< /title >< /head >< body bgcolor="#FFFFFF" >< h2 align="center" >Brow.asp - 浏览Excel数据表< /h2 >< hr >< %Response.Write "< CENTER >< TABLE BORDER=1 >"Response.Write "< TR BGCOLOR=#00FFFF >"Response.WRITE "< TD >编号< /TD >" ‘ 显示每列的标题For i=0 to rs.Fields.Count-1Response.WRITE "< TD >" & rs.Fields(i).Name & "< /TD >"NextResponse.Write "< /TR >" RecNo=1‘ 显示工作表中的所有数据Do While Not rs.EOFResponse.Write "< TR > "Response.Write "< TD >" & RecNo & "< /TD >"‘显示各列的数据For i=0 to rs.Fields.Count-1Response.WRITE "< TD >" & rs.Fields(i).Value & "< /TD >"NextResponse.Write "< /TR >"rs.MoveNext RecNo=RecNo+1 LoopResponse.Write "< /TABLE >< /CENTER >"% >< hr > < /body > < /html >ODBC 将指定的工作表的第一行各列的内容识别成字段名,以下各行作为相应的数据,若打开的工作表中数据将没有按此规律出现,则需要指定范围。
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数据导⼊到数据库中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
asp操作excel方法代码如下:<%‘************************************************* ******************‘使用说明‘dim a‘set a=new createexcel‘a.savepath=x ‘保存路径‘a.sheetname=工作簿名称‘多个工作表a.sheetname=array(工作簿名称一,工作簿名称二)‘a.sheettitle=表名称‘可以为空多个工作表a.sheetname=array(表名称一,表名称二)‘a.data =d ‘二维数组‘多个工作表 array(b,c) b 与c为二维数组‘dim rs‘set rs=server.createobject(adodb.recordset)‘rs.open select id, classid, classname from [class] ,conn, 1, 1‘a.adddbdata rs, 字段名一,字段名二, 工作簿名称, 表名称, true ‘true自动获取表字段名‘a.adddata c, true , 工作簿名称, 表名称‘c二维数组 true 第一行是否为标题行‘a.addtdata e, sheet1 ‘按模板生成c=array(array(aa1, 内容), array(aa2, 内容2)) ‘a.create()‘edtime 生成时间,毫秒数‘a.savepath 保存路径‘set a=nothing‘设置com组件的操作权限。
在命令行键入“dcomcnfg”,则进入com组件配置界面,选择microsoftexcel后点击属性按钮,将三个单选项一律选择自定义,编辑中将everyone 加入所有权限‘************************************************* ******************class createexcelprivate createtype_private savepath_private readpath_private authorstr rem 设置作者private versionstr rem 设置版本private systemstr rem 设置系统名称private sheetname_ rem 设置表名private sheettitle_ rem 设置标题private exceldata rem 设置表数据private excelapp rem excel.applicationprivate excelbookprivate excelsheetsprivate usedtime_ rem 使用的时间public titlefirstline rem 首行是否标题private sub class_initialize()server.scripttimeout = 99999usedtime_ = timersystemstr = lc00_createexcelserverauthorstr = surnfu 31333716versionstr = 1.0if not isobjinstalled(excel.application) then inerr(服务器未安装excel.application控件)end ifset excelapp = createobject(excel.application) excelapp.displayalerts = falseexcelapp.application.visible = falsecreatetype_ = 1readpath_ = nullend subprivate sub class_terminate()excelapp.quitif isobject(excelsheets) then set excelsheets = nothingif isobject(excelbook) then set excelbook = nothingif isobject(excelapp) then set excelapp = nothing end subpublic property let readpath(byval val)if instr(val, :)<0 thenreadpath_ = trim(val)elsereadpath_=server.mappath(trim(val))end ifend propertypublic property let savepath(byval val)if instr(val, :)<0 thensavepath_ = trim(val)elsesavepath_=server.mappath(trim(val))end ifend propertypublic property let createtype(byval val) if val < 1 and val < 2 thencreatetype_ = 1elsecreatetype_ = valend ifend propertypublic property let data(byval val)if not isarray(val) theninerr(表数据设置有误)end ifexceldata = valend propertypublic property get savepath()savepath = savepath_end propertypublic property get usedtime()usedtime = usedtime_end propertypublic property let sheetname(byval val) if not isarray(val) thenif val = theninerr(表名设置有误)end iftitlefirstline = trueelseredim titlefirstline(ubound(val))dim ik_for ik_ = 0 to ubound(val)titlefirstline(ik_) = truenextend ifsheetname_ = valend propertypublic property let sheettitle(byval val) if not isarray(val) thenif val = theninerr(表标题设置有误)end ifend ifsheettitle_ = valend propertyrem 检查数据private sub checkdata()if savepath_ = then inerr(保存路径不能为空)if not isarray(sheetname_) thenif sheetname_ = then inerr(表名不能为空)end ifif createtype_ = 2 thenif not isarray(exceldata) theninerr(数据载入错误,或者未载入)end ifexit subend ifif isarray(sheetname_) thenif not isarray(sheettitle_) thenif sheettitle_ < then inerr(表标题设置有误,与表名不对应)end ifend ifif not isarray(exceldata) theninerr(表数据载入有误)end ifif isarray(sheetname_) thenif getarraydim(exceldata) < 1 then inerr(表数据载入有误,数据格式错误,维度应该为一)elseif getarraydim(exceldata) < 2 then inerr(表数据载入有误,数据格式错误,维度应该为二)end ifend subrem 生成excelpublic function create()call checkdata()if not isnull(readpath_) thenexcelapp.workbooks.open(readpath_)elseexcelapp.workbooks.addend ifset excelbook = excelapp.activeworkbookset excelsheets = excelbook.worksheetsif createtype_ = 2 thendim ih_for ih_ = 0 to ubound(exceldata)call setsheets(exceldata(ih_), ih_)nextexcelbook.saveas savepath_usedtime_ = formatnumber((timer - usedtime_)*1000, 3)exit functionend ifif isarray(sheetname_) thendim ik_for ik_ = 0 to ubound(exceldata)call createsheets(exceldata(ik_), ik_)nextelsecall createsheets(exceldata, -1)end ifexcelbook.saveas savepath_usedtime_ = formatnumber((timer - usedtime_)*1000, 3)end functionprivate sub createsheets(byval data_, dataid_) dim spreadsheetdim tempsheettitledim temptitlefirstlineif dataid_<-1 thenif dataid_ excelsheets.count - 1 thenexcelsheets.add()set spreadsheet = excelbook.sheets(1)elseset spreadsheet = excelbook.sheets(dataid_ + 1) end ifif isarray(sheettitle_) thentempsheettitle = sheettitle_(dataid_)elsetempsheettitle =end iftemptitlefirstline = titlefirstline(dataid_) = sheetname_(dataid_)elseset spreadsheet = excelbook.sheets(1) = sheetname_tempsheettitle = sheettitle_temptitlefirstline = titlefirstlineend ifdim line_ : line_ = 1dim rownum_ : rownum_ = ubound(data_, 1) + 1dim lastcols_if tempsheettitle < then‘spreadsheet.columns(1).shrinktofit=true ‘设定是否自动适应表格单元大小(单元格宽不变)lastcols_ = getcolname(ubound(data_, 2) + 1)with spreadsheet.cells(1, 1).value = tempsheettitle‘设置excel表里的字体.font.bold = true ‘单元格字体加粗.font.italic = false ‘单元格字体倾斜.font.size = 20 ‘设置单元格字号=宋体‘设置单元格字体‘.font.colorindex=2 ‘设置单元格文字的颜色,颜色可以查询,2为白色end withwith spreadsheet.range(a1:& lastcols_ &1) .merge ‘合并单元格(单元区域)‘.interior.colorindex = 1 ‘设计单元络背景色 .horizontalalignment = 3 ‘居中end withline_ = 2rownum_ = rownum_ + 1end ifdim irow_, icol_dim drow_, dcol_dim templastrange : templastrange = getcolname(ubound(data_, 2)+1) & (rownum_) dim beginrow : beginrow = 1if tempsheettitle < then beginrow = beginrow + 1if temptitlefirstline = true then beginrow = beginrow + 1if beginrow=1 thenwith spreadsheet.range(a1:& templastrange) .borders.linestyle = 1.borderaround -4119, -4138 ‘设置外框.numberformatlocal = @ ‘文本格式.font.bold = false.font.italic = false.font.size = 10.shrinktofit=trueend withelsewith spreadsheet.range(a1:& templastrange) .borders.linestyle = 1.borderaround -4119, -4138.shrinktofit=trueend withwith spreadsheet.range(a& beginrow &:& templastrange).numberformatlocal = @.font.bold = false.font.italic = false.font.size = 10end withend ifif temptitlefirstline = true thenbeginrow = 1if tempsheettitle < then beginrow = beginrow + 1with spreadsheet.range(a& beginrow &:& getcolname(ubound(data_, 2)+1) & (beginrow)) .numberformatlocal = @.font.bold = true.font.italic = false.font.size = 12.interior.colorindex = 37.horizontalalignment = 3 ‘居中.font.colorindex=2end withend iffor irow_ = line_ to rownum_for icol_ = 1 to (ubound(data_, 2) + 1)dcol_ = icol_ - 1if tempsheettitle < then drow_ = irow_ - 2 else drow_ = irow_ - 1if not isnull(data_(drow_, dcol_)) thenwith spreadsheet.cells(irow_, icol_).value = data_(drow_, dcol_)end withend ifnextnextset spreadsheet = nothingend subrem 测试组件是否已经安装private function isobjinstalled(strclassstring) on error resume nextisobjinstalled = falseerr = 0dim xtestobjset xtestobj = server.createobject(strclassstring) if 0 = err then isobjinstalled = trueset xtestobj = nothingerr = 0end functionrem 取得数组维数private function getarraydim(byval arr)getarraydim = nulldim i_, tempif isarray(arr) thenfor i_ = 1 to 60on error resume nexttemp = ubound(arr, i_)if err.number < 0 thengetarraydim = i_ - 1err.clearexit functionend ifnextgetarraydim = i_end ifend functionprivate function getnumformatlocal(datatype)select case datatypecase currency:getnumformatlocal = ¥#,##0.00_);(¥#,##0.00) case time:getnumformatlocal = [$-f800]dddd, mmmm dd, yyyy case char:getnumformatlocal = @case common:getnumformatlocal = g/通用格式case number:getnumformatlocal = #,##0.00_case else :getnumformatlocal = @end selectend functionpublic sub adddbdata(byval rsflied, byval fliedtitle, byval tempsheetname_, byval tempsheettitle_, dbtitle)if rsflied.eof then exit subdim colnum_ : colnum_ = rsflied.fields.countdim rownum_ : rownum_ = rsflied.recordcountdim arrfliedtitleif dbtitle = true thenfliedtitle =dim ig_for ig_=0 to colnum_ - 1fliedtitle = fliedtitle & rsflied.fields.item(ig_).nameif ig_ < colnum_ - 1 then fliedtitle = fliedtitle &,nextend ifif fliedtitle< thenrownum_ = rownum_ + 1arrfliedtitle = split(fliedtitle, ,)if ubound(arrfliedtitle) < colnum_ - 1 then inerr(获取数据库表有误,列数不符)end ifend ifdim tempdata : redim tempdata(rownum_ - 1, colnum_ - 1)dim ix_, iy_dim izif fliedtitle< then iz = rownum_ - 2 else iz = rownum_ - 1for ix_ = 0 to izfor iy_ = 0 to colnum_ - 1if fliedtitle< thenif ix_=0 thentempdata(ix_, iy_) = arrfliedtitle(iy_)tempdata(ix_ + 1, iy_) = rsflied(iy_)elsetempdata(ix_ + 1, iy_) = rsflied(iy_)end ifelsetempdata(ix_, iy_) = rsflied(iy_)end ifnextrsflied.movenextnextdim tempfirstlineif fliedtitle< then tempfirstline = true else tempfirstline = falsecall adddata(tempdata, tempfirstline,tempsheetname_, tempsheettitle_)end subpublic sub adddata(byval tempdate_, byval tempfirstline_, byval tempsheetname_, byval tempsheettitle_)if not isarray(exceldata) thenexceldata = tempdate_titlefirstline = tempfirstline_sheetname_ = tempsheetname_sheettitle_ = tempsheettitle_elseif getarraydim(exceldata) = 1 thendim temparrlen : temparrlen = ubound(exceldata)+1 redim preserve exceldata(temparrlen)exceldata(temparrlen) = tempdate_redim preserve titlefirstline(temparrlen)titlefirstline(temparrlen) = tempfirstline_redim preserve sheetname_(temparrlen)sheetname_(temparrlen) = tempsheetname_redim preserve sheettitle_(temparrlen)sheettitle_(temparrlen) = tempsheettitle_elsedim tempolddata : tempolddata = exceldataexceldata = array(tempolddata, tempdate_)titlefirstline = array(titlefirstline, tempfirstline_)sheetname_ = array(sheetname_, tempsheetname_) sheettitle_ = array(sheettitle_, tempsheettitle_) end ifend ifend subrem 模板增加数据方法public sub addtdata(byval tempdate_, byval tempsheetname_)createtype_ = 2if not isarray(exceldata) thenexceldata = array(tempdate_)sheetname_ = array(tempsheetname_)elsedim temparrlen : temparrlen = ubound(exceldata)+1 redim preserve exceldata(temparrlen)exceldata(temparrlen) = tempdate_redim preserve sheetname_(temparrlen)sheetname_(temparrlen) = tempsheetname_end ifend subprivate sub setsheets(byval data_, dataid_)dim spreadsheetset spreadsheet = excelbook.sheets(sheetname_(dataid_))spreadsheet.activatedim ix_for ix_ =0 to ubound(data_)if not isarray(data_(ix_)) then inerr(表数据载入有误,数据格式错误)if ubound(data_(ix_)) < 1 then inerr(表数据载入有误,数据格式错误)spreadsheet.range(data_(ix_)(0)).value = data_(ix_)(1)nextset spreadsheet = nothingend subpublic function gettime(msec_)dim retime_ : retime_=if msec_ < 1000 thenretime_ = msec_ &mselsedim second_second_ = (msec_ 1000)if (msec_ mod 1000)<0 thenmsec_ = (msec_ mod 1000) &毫秒elsemsec_ =end ifdim n_, arytime(2), arytimeunit(2)arytimeunit(0) = 秒arytimeunit(1) = 分arytimeunit(2) = 小时n_ = 0dim tempsecond_ : tempsecond_ = second_while(tempsecond_ / 60 = 1)tempsecond msec_< then retime_ = retime_ & msec_end ifgettime = retime_end functionrem 取得列名private function getcolname(byval colnum)dim arrlitter : arrlitter=split(a b c d e f g h i j k l m n o p q r s t u v w x y z, )dim revalue_if colnum <= ubound(arrlitter) + 1 thenrevalue_ = arrlitter(colnum - 1)elserevalue_ = arrlitter(((colnum-1) 26)) & arrlitter(((colnum-1) mod 26))end ifgetcolname = revalue_end functionrem 设置错误private sub inerr(errinfo)err.raise vbobjecterror + 1, systemstr &(version & versionstr &), errinfo end subend classdim b(4,6)dim c(50,20)dim i, jfor i=0 to 4for j=0 to 6b(i,j) =i&-&jnextnextfor i=0 to 50for j=0 to 20c(i,j) = i&-&j &我的nextnextdim e(20)for i=0 to 20e(i)= array(a&(i+1), i+1)next‘使用示例需要xx.xls模板支持‘set a=new createexcel‘a.readpath = xx.xls‘a.savepath=xx-1.xls‘a.addtdata e, sheet1‘a.create()‘response.write(生成& a.savepath & 使用了 & a.gettime(edtime) &<br) ‘set a=nothing‘使用示例一a.savepath=x.xlsa.adddata b, true , 测试c, 测试ca.titlefirstline = false ‘首行是否为标题行a.create()response.write(生成& a.savepath & 使用了 & a.gettime(edtime) &<br) set a=nothing‘使用示例二set a=new createexcela.savepath=y.xlsa.sheetname=工作簿名称‘多个工作表a.sheetname=array(工作簿名称一,工作簿名称二)a.sheettitle=表名称‘可以为空多个工作表a.sheetname=array(表名称一,表名称二)a.data =b ‘二维数组‘多个工作表 array(b,c) b 与c为二维数组a.create()response.write(生成& a.savepath & 使用了 & a.gettime(edtime) &<br) set a=nothing‘使用示例三生成两个表a.savepath=z.xlsa.sheetname=array(工作簿名称一,工作簿名称二)a.sheettitle=array(表名称一,表名称二)a.data =array(b, c) ‘b与c为二维数组a.titlefirstline = array(false, true) ‘首行是否为标题行a.create()response.write(生成& a.savepath & 使用了 & a.gettime(edtime) &<br) set a=nothing‘使用示例四需要数据库支持‘dim rs‘set rs=server.createobject(adodb.recordset)‘rs.open select id, classid, classname from [class] ,conn, 1, 1‘set a=new createexcel‘a.savepath=a‘a.adddbdata rs, 序号,类别序号,类别名称, 工作簿名称, 类别表, false‘a.create()‘response.write(生成& a.savepath & 使用了 & a.gettime(edtime) &<br) ‘set a=nothing‘rs.close‘set rs=nothing%。