急需!!应收应付账款excel表格表格EXCEL格式 ben_allkillcom

Asp.Net 导出数据格式为Excel 数据的9种方案
编辑:www.fx114.net
本篇文章主要介绍了"Asp.Net 导出数据格式为Excel 数据的9种方案",主要涉及到Asp.Net 导出数据格式为Excel 数据的9种方案方面的内容,对于Asp.Net 导出数据格式为Excel 数据的9种方案感兴趣的同学可以参考一下。
Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式、Tab格式、website table 等多钟格式的文档。它具备自动识别行号,字符,格式化数字等功能,例如:如果你在Excel 单元格中输入数字 && 会自动转化为&1.23457E+11&。
正因为Excel的强大和易用,大家都喜欢将数据导出为 Excel 备用。这里我会介绍一系列通过Asp.Net导出Excel数据的方法。将导出文件存储到服务器并提供地址给客户端下载,或重定向到文件下载页面:当Response时,数据列以 &\t& 分隔,行以&\n&分隔。好了,现在给大家展示这是怎么做的。
使用代码导出
方案1:导出全部HTML 数据到 Excel
这种方法是将Html中的所有文档内容,包括按钮,表格,图片等所有页面内容导出为 Excel
Response.Clear();&&&&&
Response.Buffer =&&&&&
Response.AppendHeader(&Content-Disposition&,&filename=&+DateTime.
Now.ToString(&yyyyMMdd&)+&.xls&);&&&&&&&&&&&
Response.ContentEncoding = System.Text.Encoding.UTF8;&&&
Response.ContentType = &&application/ms-excel&;&&&
this.EnableViewState =
这里我们使用了Page的&ContentType& 属性,它默认为&text/Html&,输出到客户端即为Html。如果我们将它改为&ms-excel&,页面将输出Excel格式的内容,客户端就可以下载并存储它了。
页面property 还包括:image/JPEG, text/HTML, image/GIF and vnd.ms-excel/msword.
方案2:从DataGrid导出数据到Excel
尽管上面的方法能帮你导出Excel数据,但它导出了所有的HTML内容,包括按钮、图片等,这并不是我们所需要的。通常,我们仅仅需要导出DataGrid中的数据。
System.Web.UI.Control ctl=this.DataGrid1;
//DataGrid1 (you created in the windowForm)
HttpContext.Current.Response.AppendHeader(&Content-Disposition&,&filename=Excel.xls&);
HttpContext.Current.Response.Charset =&UTF-8&;&&&&&
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.D
HttpContext.Current.Response.ContentType = &application/ms-excel&;
ctl.Page.EnableViewState =&&&&
System.IO.StringWriter& tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
如果你有多个包含DataGrid 并需导出数据的页面,我们可以封装方法:
public void DGToExcel(System.Web.UI.Control ctl)&&&
&& HttpContext.Current.Response.AppendHeader(&Content-Disposition&,&filename=Excel.xls&);&
&& HttpContext.Current.Response.Charset =&UTF-8&;&&&&&
&& HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;&
&& HttpContext.Current.Response.ContentType =&application/ms-excel&;
&& ctl.Page.EnableViewState =&&&&
&& System.IO.StringWriter& tw = new System.IO.StringWriter() ;&
&& System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);&
&& ctl.RenderControl(hw);&
&& HttpContext.Current.Response.Write(tw.ToString());&
&& HttpContext.Current.Response.End();&
调用方法:DGToExcel(datagrid1);
方案3:自动导出Excel数据
使用此方法,你需要 下载免费的.NET组件 ,并使用如下代码(部分)导出数据:
private void button1_Click(object sender, EventArgs e)
&&& System.Data.OleDb.OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
&&& oleDbConnection1.ConnectionString = @&Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\..\..\Database\demo.mdb&;
&&& System.Data.OleDb.OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand();
&&& mandText = &select * from parts&;
&&& oleDbCommand1.Connection = oleDbConnection1;
&&& System.Data.OleDb.OleDbCommand oleDbCommand2 = new System.Data.OleDb.OleDbCommand();
&&& mandText = &select * from country&;
&&& oleDbCommand2.Connection = oleDbConnection1;
   Spire.DataExport.Delegates.DataParamsEventHandler(this.cellExport3_GetDataParams);
&&& oleDbConnection1.Open();
&&&&&&& cellExport3.SaveToFile();
&&& finally
&&&&&&& oleDbConnection1.Close();
private void cellExport3_GetDataParams
(object sender, Spire.DataExport.EventArgs.DataParamsEventArgs e)
&&& if ((e.Sheet == 0) && (e.Col == 6))
&&&&&&& e.FormatText = (sender as Spire.DataExport.XLS.WorkSheet).ExportCell.DataFormats.C
执行上面的代码,你将得到:
此方案导出的Excel文件可以直接在Excel 2010 中打开、编辑和修改。虽然一些特定的功能不可用,但它能够被Excel 2010使用。
方案4:从DataSet导出Excel数据
依照上面都的方法,我么能很容易的导出DataSet数据到Excel,我们只需要在页面Response 时将DataSet 表中的数据组装为&ms-excel& 格式的数据,并通过Http发送出去。
注:ds 代表Dataset,用它来填充DataTable,文件名包含后缀,例如:excel2006.xls。
public& void CreateExcel(DataSet ds,string FileName)&&
resp = Page.R&
resp.ContentEncoding = System.Text.Encoding.GetEncoding(&UTF-8&);&
resp.AppendHeader(&Content-Disposition&, &filename=&+FileName);&&&&
string colHeaders= &&, ls_item=&&;&&&
// Define table object and row object,&
// and at the same time use DataSet initialize value.&
DataTable dt=ds.Tables[0];&
DataRow[] myRow=dt.Select();//dt.Select(&id&10&)
Data Filer can be used as: dt.Select(&id&10&)
&&&&&&& int i=0;&
&&&&&&& int cl=dt.Columns.C&
//Get column titles of each DataTable and divided by &t&. Press &enter& after the last column title.&
for(i=0;i&i++) colheaders+=&dt.Columns[i].Caption.ToString()+&t&;&&
&&& for(i=&0;i&i++)& if(i=&=(cl-1))//(last& +=&dt.Columns[i].Caption.ToString()&&
&&& ls_item+=&row[i].ToString()+&t&;& /&
方案5:从DataView导出Excel数据
如果你想导出不规则的行和列到Excel,你可以使用一下方法:
public void OutputExcel(DataView dv,string str)&
&& //dv presents data which will be exported to Excel,&
str is the name of title
&& GC.Collect();&
&& A// = new Application();&
&& int rowIndex=4;&
&& int colIndex=1;&
&& _Workbook xBk;&
&& _Worksheet xSt;&
&& excel= new ApplicationClass();&&&
&& xBk = excel.Workbooks.Add(true);&&&
&& xSt = (_Worksheet)xBk.ActiveS&
&& // Acquire Title
&& foreach(DataColumn col in dv.Table.Columns)&
&&& colIndex++;&
&&& excel.Cells[4,colIndex] = col.ColumnN&
&&& xSt.get_Range(excel.Cells[4,colIndex],excel.Cells
&&& [4,colIndex]).HorizontalAlignment&
&&& = XlVAlign.xlVAlignC//Set title format as middle&
&& //Obtain data from table&
&& foreach(DataRowView row in dv)&
&&& rowIndex ++;&
&&& colIndex = 1;&
&&& foreach(DataColumn col in dv.Table.Columns)&
&&&& colIndex ++;&
&&&& if(col.DataType == System.Type.GetType(&System.DateTime&))&
&&&&& excel.Cells[rowIndex,colIndex]&
&&& = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString(&yyyy-MM-dd&);&
&&&&& xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells
&&& [rowIndex,colIndex]).HorizontalAlignment&
&&& = XlVAlign.xlVAlignC// Set the style as middle&
&&&& else&
&&&&& if(col.DataType == System.Type.GetType(&System.String&))&
&&&&& excel.Cells[rowIndex,colIndex] = &'&+row[col.ColumnName].ToString();&
&&&&& xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells
&&& [rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignC
&&&& // Set the style as middle
&&&& else&
&&&&& excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();&
&& //load a Aggregate line
&& int rowSum = rowIndex + 1;&
&& int colSum = 2;&
&& excel.Cells[rowSum,2] = & Aggregate &;
&& xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment&
&&& = XlHAlign.xlHAlignC&
&& //Set color for the selected content
&& xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();&
&& xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells
&&& [rowSum,colIndex]).Interior.ColorIndex&
&&& = 19;//more than 50 types of color for you to choose&
&& //obtain title of the whole excelsheet
&& excel.Cells[2,2] =&
&& //Set title format for the whole excelsheet
&& xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold =&
&& xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;&
&& //Set fittest width&
&& xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();&
&& xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();&
&& //Set the tile as Cross and Middle&
&& xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();&
&& xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment&
&&& = XlHAlign.xlHAlignCenterAcrossS&
&& //Draw borders&
&& xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
&& xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders
&& [XlBordersIndex.xlEdgeLeft].Weight
&&& = XlBorderWeight.xlT// Set left line as bold
&& xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders
[XlBordersIndex.xlEdgeTop].Weight&
= XlBorderWeight.xlT// Set upper line as bold
&& xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders
[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlT//Set right line as bold
&& xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders
[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlT//Set bottom line as bold
&& //Display effect&
&& excel.Visible=&
&& //xSt.Export(Server.MapPath(&.&)+&);&
&& xBk.SaveCopyAs(Server.MapPath(&.&)+&&);&
&&&&&&&&&&& xBk.Close(false, null,null);&&&
&&&&&&&&&&& excel.Quit();&
&&&&&&&&&&& System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);&
&&&&&&&&&&& System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);&
&&& System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);&
&&&&&&&&&&& xBk =&
&&&&&&&&&&& excel =&
&&&&&&&&&&& GC.Collect();&
&& string path = Server.MapPath(this.xlfile.Text+&.xls&);&
&& System.IO.FileInfo file = new System.IO.FileInfo(path);&
&& Response.Clear();&
&& Response.Charset=&UTF-8&;&
&& Response.ContentEncoding=System.Text.Encoding.UTF8;&
&& //Add header, give a default file name for &File Download/Store as&
&& Response.AddHeader(&Content-Disposition&, & filename=&
+ Server.UrlEncode(file.Name));&
&& //Add header, set file size to enable browser display download progress
&& Response.AddHeader(&Content-Length&, file.Length.ToString());&&&&
&& //Set the return string is unavailable reading for client, and must be downloaded
&& Response.ContentType = &application/ms-excel&;&&
&& //Send file string to client&
&& Response.WriteFile(file.FullName);&
&& //Stop execute&&
&& Response.End();&
两种 WinForms 导出Excel 数据的解决方案
SqlConnection conn=new SqlConnection
(System.Configuration.ConfigurationSettings.AppSettings[&conn&]);&
&& SqlDataAdapter da=new SqlDataAdapter(&select * from tb1&,conn);&
&& DataSet ds=new DataSet();&
&& da.Fill(ds,&table1&);&
&& DataTable dt=ds.Tables[&table1&];&
&& string downloadurl&].ToString()+DateTime.Today.ToString
(&yyyyMMdd&)+new Random(DateTime.Now.Millisecond).Next
(10000).ToString()+&.csv&;//Store the path of downloadurl&
in web.config and the format should be set as &date + 4 random number &
&& FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write);&
&& StreamWriter sw=new StreamWriter
(fs,System.Text.Encoding.GetEncoding(&utf-8&));(&utf-8&)&
&& sw.WriteLine(&Auto number, name, age&);
&& foreach(DataRow dr in dt.Rows)&
&&& sw.WriteLine(dr[&ID&]+&,&+dr[&vName&]+&,&+dr[&iAge&]);&
&& sw.Close();&
&& Response.AddHeader(&Content-Disposition&, &&
filename=& + Server.UrlEncode(name));&
&& Response.ContentType = &application/ms-excel&;
//Set the return string is unavailable reading for client, and must be downloaded
&& Response.WriteFile(name); //Send file string to client
&& Response.End();
public void Out2Excel(string sTableName,string url)
Excel.Application oExcel=new Excel.Application();
Workbooks oB
Workbook oB
Worksheet oS
string sFile=&&,sTemplate=&&;
System.Data.DataTable dt=TableOut(sTableName).Tables[0];
sFile=url+&myExcel.xls&;
sTemplate=url+&MyTemplate.xls&;
oExcel.Visible=
oExcel.DisplayAlerts=
//define a new workbook
oBooks=oExcel.W
oBooks.Open(sTemplate,Type.Missing,Type.Missing,Type.Missing,Type.Missing.
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing);
oBook=oBooks.get_Item(1);
oSheets=oBook.W
oSheet=(Worksheet)oSheets.get_Item(1);
//Give the sheet a name
oSheet.Name=&Sheet1&;
oCells=oSheet.C
//Call dumpdata process and export to Excel
DumpData(dt,oCells);
oSheet.SaveAs(sFile,Excel.XlFileFormat.xlTemplate,Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,&
Type.Missing, Type.Missing, Type.Missing);
oBook.Close(false, Type.Missing,Type.Missing);
//Exit Excel and free invoking COM resource
oExcel.Quit();
GC.Collect();
KillProcess(&Excel&);
private void KillProcess(string processName)
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
//get all opened progresses
foreach (Process thisproc in Process.GetProcessesByName(processName))
if(!thisproc.CloseMainWindow())
thisproc.Kill();
catch(Exception Exc)
throw new Exception(&&,Exc);
protected void ExportExcel()
&& gridbind();&
&& if(ds1==null)&
&& string saveFileName=&&;
//&& bool fileSaved=
&& SaveFileDialog saveDialog=new SaveFileDialog();
&& saveDialog.DefaultExt =&xls&;
&& saveDialog.Filter=&Excel File|*.xls&;
&& saveDialog.FileName =&Sheet1&;
&& saveDialog.ShowDialog();
&& saveFileName=saveDialog.FileN
&& if(saveFileName.IndexOf(&:&)&0) // Cancelled
//excelapp.Workbooks.Open&& (App.path & Progress table.xls)&
&& Excel.Application xlApp=new Excel.Application();
&& object missing=System.Reflection.Missing.V&
&&& if(xlApp==null)
&&& MessageBox.Show(&Create Excel object failed, maybe you dont install Excel &);
&& Excel.Workbooks workbooks=xlApp.W
&& Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
&& Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];// Get sheet1
&& Excel.R
&& string oldCaption=Title_label .Text.Trim ();
&& long totalCount=ds1.Tables[0].Rows.C
&& long rowRead=0;
&& float percent=0;&
&& worksheet.Cells[1,1]=Title_label .Text.Trim ();
&& //Write text
&& for(int i=0;i&ds1.tables[0].columns.i++)&
&&& worksheet.cells[2,i+1]=&ds1.Tables[0].Columns.ColumnN&&
&&& range.interior.colorindex=&15;& range.font.bold=&&&
&&& .visible=&& r=&0;r&ds1.Tables[0].Rows.Cr++)&&
&&& i=&0;i&ds1.Tables[0].Columns.Ci++)&&
&&& worksheet.cells[r+3,i+1]=&ds1.Tables[0].Rows[r];&&
&&& percent=&((float)(100*rowRead))/totalC& this.caption.visible=&&&
&&& this.caption.text=& Exporting Data [& range=&(Excel.Range)worksheet.Cells
&&& [2,i+1];& range.borders[excel.xlbordersindex.xlinsidehorizontal].colorindex=
&&& &Excel.XlColorIndex.xlColorIndexA&&
&&& range.borders[excel.xlbordersindex.xlinsidehorizontal].linestyle=
&&& &Excel.XlLineStyle.xlC&&
&&& range.borders[excel.xlbordersindex.xlinsidehorizontal].weight=
&&& &Excel.XlBorderWeight.xlT&&1)
&&& range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex
=Excel.XlColorIndex.xlColorIndexA
&& workbook.Close(missing,missing,missing);
&& xlApp.Quit();
方案8 (from Cipherlad):
使用DataSet 的GetXml方法,并且使用XSLT将XML转化为标准的Excel格式,你可以使用不同样式模版对应不容版本的Excel,甚至可以用于导出其它文档。
方案9 (from Sergelp):
使用 OOXML 格式的开源库:/
这是一个非常便捷的库,它包含多种格式、字体、颜色订制,你也不需要安装Excel软件,你可以在服务端创建Excel,然后实现下载,如下代码所示:
Dim ms As MemoryStream = ArticleDAL.GetStreamFromDataSet()
Response.Clear()
Response.AddHeader(&content-disposition&, String.Format(&filename={0}&, strFile))
Response.ContentType = &application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&
ms.WriteTo(Response.OutputStream)
Response.End()
本文标题:
本页链接:我是会计新手,求应付账款帐,应收账款帐,销售收入帐,各类明细账excel电子表格记账模板 谢谢_百度知道
我是会计新手,求应付账款帐,应收账款帐,销售收入帐,各类明细账excel电子表格记账模板 谢谢
我有更好的答案
按默认排序
用wps里面有不少模板.另外去excelhome网站向人求助.
可以看一下生财宝进销存的报表可能对你会有参考
找个账页随便弄一下不就行了
其他类似问题
excel电子表格的相关知识
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁《如何不调用EXCEL.APPLICATION将RECORDSET数据导出为EXCEL表格?》-- access911.net 文章
&&OTaA System&&
&&搜索文章:
你现在的位置:文章索引 -> 文章分类 -> VBA &
系统正在加载内容,请耐心等待...
&ADO/DAO/ADO.NET
&ASP/ASP.NET
站长 E-Mail
显示附加信息&&&&
如何不调用EXCEL.APPLICATION将RECORDSET数据导出为EXCEL表格?
作者:cg1&&摘自:&&:cg1&&更新日期:&&浏览人次:
&问题:如何不调用EXCEL.APPLICATION将RECORDSET数据导出为EXCEL表格? 一般要导出到&XLS&文件都是用&OLE&方式,也就是创建&EXCEL.APPLICATION&的方法来导出,但是微软并不推荐这种方法,那么除了用&EXCEL.APPLICATION&方法还有其他什么方法?&
回答:方法很多,比如用&ODBC&直接操作&XLS&这种文件格式。还有用&XLS&能够另存为&XML&数据表的特性直接组织&XML&字符串的方式。本文就介绍组织&XML&表格的方式。这种方式比较灵活,在&ASP&环境下也能使用。而且还能根据需要修改各种显示格式。 而操作&XML&也有多种方式,比如直接用拼接字符串形成&XML&文档的方法;或者用&XML&DOM&来形成文档。两种方法各有优劣,本文介绍用拼接字符串的方法。 界面截图:图片如下:
建立一个名为&clsRecordsetToXls&的类模块
Option&Compare&Database '=========================================================== '&类名&&&&&&&&:&&clsRecordsetToXls '&版本号&&&&&&:&&2.0 '&说明&&&&&&&&:&&本模块用于导出内存中的Recordset数据到某个xml '&&&&&&&&&&&&&&&&&文档。导出的进度可以用订阅事件来探察。减少了 '&&&&&&&&&&&&&&&&&与界面的耦合。相对1.0增加了事件订阅。 '&引用&&&&&&&&:&&Microsoft&ActiveX&Data&Objects&2.1&Library '&&&&&&&&&&&&&&&&&Microsoft&Scripting&Runtime '&调用演示&&&&:&&请参考调用示例 '&最后修改日期:&&&23:36:00 '&示例地址&&&&:&&http://access911.net/?72FABF1E17DCEDF3 '&作者&&&&&&&&:&&cg1 '&网站&&&&&&&&:&&http://access911.net '&电子邮件&&&&:&& '&版权&&&&&&&&:&&作者保留一切权力, '&&&&&&&&&&&&&&&&&请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Public&Enum&ParametersReturnField &&&&eepChs&=&1&&&&&&&&&&'中文字段名 &&&&eepEng&=&2&&&&&&&&&&'英文字段名 &&&&eepVisible&=&3&&&&&&'该字段是否可见 &&&&eepVbConst&=&4&&&&&&'ADODB&的数据类型常量数值,10进制 &&&&eepExcelConst&=&5&&&'Excel&的XML数据类型常量,字符串 &&&&eepReportName&=&6&&&'报表的名称。一个参数表可以存放多种报表,以报表名称区分。 End&Enum Private&Const&PARAMETERS_TABLE_FIELD&As&String&=&&,ColChs,ColEng,Visible,DataTypeConst,ExcelDataTypeString,ReportName& Private&Const&STRING_PAGESZIE&As&Long&=&60000&&&'组织字符串后每多少个字符后写入到硬盘的文件中。 Private&rsFld&As&New&ADODB.Recordset Private&rsData&As&New&ADODB.Recordset Private&conn&As&New&ADODB.Connection
Public&blnStop&As&Boolean Public&t&As&Double Private&strReportName&As&String Private&strXlsFullPath&As&String Private&strXlsEncoding&As&String Private&strXlsHead&As&String Private&strXlsHeadDefault&As&String Private&strXlsFoot&As&String Private&blnParametersRecordset&As&Boolean&&&'true表示参数为内存赋值,false表示参数直接从参数表中获取。 Private&dblStartTimer&As&Double&&&'开始处理时间。秒数 Private&dblEndTimer&As&Double
'当开始导出数据时,出发导出事件。 '参数:都是按地址传递 'currentRow&当前正在处理的行号 'recordCount&行数总和 'rs就是当前正在导出的记录集, 'fieldName当前正在导出的字段, 'cancel表示是否取消本次导出。 Public&Event&Exporting(ByVal&currentRow&As&Long,&_ &&&&ByVal&recordCount&As&Long,&_ &&&&ByVal&currentTimer&As&Double,&_ &&&&ByRef&rs&As&ADODB.Recordset,&_ &&&&ByRef&field&As&ADODB.field,&_ &&&&ByRef&cancel&As&Boolean) '用户手动停止触发的事件 Public&Event&ProcessStop(ByVal&currentRow&As&Long,&_ &&&&ByVal&recordCount&As&Long,&_ &&&&ByVal&currentTimer&As&Double,&_ &&&&ByRef&msg&As&String) '记录处理结束 'currentRow&当前导出的行 'successed&为true则表示成功,false表示有失败项目 'msg&失败或者成功的提示 Public&Event&ProcessEnd(ByVal&currentRow&As&Long,&_ &&&&ByVal&currentTimer&As&Double,&_ &&&&ByVal&successed&As&Boolean,&_ &&&&ByVal&msg&As&String)
'需要到处成xls的具体数据就存放在这个属性中 Public&Property&Set&DataRs(ByRef&rs&As&ADODB.Recordset) &&&&Set&rsData&=&rs End&Property '导出的xml格式xls存放在哪里 Public&Property&Let&XlsFullPath(ByVal&s&As&String) &&&&strXlsFullPath&=&s End&Property '设定用于获取参数表中的数据的链接字串。 Public&Property&Set&ActiveConnection(ByRef&c&As&ADODB.Connection) &&&&Set&conn&=&c &&&&blnParametersRecordset&=&False End&Property '判断参数表示从内存中获取还是从数据库的表中获取。 Public&Property&Get&IsParaFromRs()&As&Boolean &&&&IsParaFromRs&=&blnParametersRecordset End&Property '将内存中创建的参数表传递到类中。 Public&Property&Set&ParaRs(ByRef&rs&As&ADODB.Recordset) &&&&Set&rsFld&=&rs &&&&blnParametersRecordset&=&True End&Property
Public&Property&Let&XlsEncoding(ByVal&s&As&String) &&&&'默认编码为gb2312 &&&& &&&&If&s&=&&&&Then &&&&&&&&strXlsEncoding&=&&GB2312& &&&&ElseIf&LCase(s)&=&&gb2312&&Then &&&&&&&&strXlsEncoding&=&&GB2312& &&&&ElseIf&LCase(s)&=&&utf-8&&Then &&&&&&&&strXlsEncoding&=&&UTF-8& &&&&Else &&&&&&&&Err.Raise&vbObjectError&+&515,&&clsRecordsetToXls.XlsEncoding&Property&Let&,&&目前只支持&GB2312&和&UTF-8&两种编码。& &&&&End&If &&&& &&&&strXlsHead&=&Replace(strXlsHeadDefault,&&[encoding&property]&,&&encoding=&&&&&&strXlsEncoding&&&&&&&) &&&& End&Property '设定报表名称。主要用于查询参数表。报表名称只能是英文和数字。 Public&Property&Let&ReportName(ByVal&v&As&String) &&&&Dim&i&As&Long &&&&Dim&s&As&String &&&& &&&&For&i&=&1&To&Len(v) &&&&&&&&s&=&Mid(v,&i,&1) &&&&&&&&If&(Asc(s)&&=&Asc(&0&)&And&Asc(s)&&=&Asc(&9&))&Or&_ &&&&&&&&&&&&(Asc(s)&&=&Asc(&a&)&And&Asc(s)&&=&Asc(&z&))&Or&_ &&&&&&&&&&&&(Asc(s)&&=&Asc(&A&)&And&Asc(s)&&=&Asc(&Z&))&Then &&&&&&&&Else &&&&&&&&&&&&Err.Raise&vbObjectError&+&514,&&clsRecordsetToXls.ReportName&Property&Let&,&&ReprotName属性中包含非法字符:&&&&s&&&&。& &&&&&&&&End&If &&&&Next &&&&strReportName&=&v End&Property '判断处理过程是否停止,用按地址传递的方法传递一个变量进来 Public&Property&Let&ProcesStop(ByVal&v&As&Boolean) &&&&blnStop&=&v End&Property '创建导出到EXCEL时要使用的参数表,只在数据库中不包含参数表时使用一次。用于预先配置数据库。 Function&CreateExportParaTable() &&&&Dim&strSql&As&String &&&&strSql&=&&create&table&ExportExcelParam1&(Id&AUTOINCREMENT(1,1)&PRIMARY&KEY,ColChs&varchar(200),ColEng&varchar(200),Visible&yesno,DataTypeConst&long,ExcelDataTypeString&varchar(200),ReportName&varchar(200))& &&&&conn.Execute&strSql End&Function
'在内存中创建参数recordset。用于当参数不放在表中时进行操作。 Public&Function&CreateParametersRs(ByVal&fieldDescString&As&String,&ByRef&rs&As&ADODB.Recordset) &&&&Dim&s1()&As&String &&&&Dim&s2&As&String &&&& &&&&Set&rs&=&New&ADODB.Recordset &&&&'下面用&adodb.recordset&进行排序 &&&&rs.CursorLocation&=&adUseClient &&&&rs.Fields.Append&&ColChs&,&adVarChar,&255 &&&&rs.Fields.Append&&ColEng&,&adVarChar,&255 &&&&rs.Fields.Append&&Visible&,&adBoolean,&255 &&&&rs.Fields.Append&&DataTypeConst&,&adInteger &&&&rs.Fields.Append&&ExcelDataTypeString&,&adVarChar,&255 &&&&rs.Fields.Append&&ReportName&,&adVarChar,&255 &&&&rs.Open &&&& &&&&'中文,英文,true,122,String,ReportName &&&&If&fieldDescString&&&&&&&Then &&&&&&&&s1&=&Split(fieldDescString,&&,&) &&&&&&&&If&UBound(s1)&+&1&Mod&6&=&0&Then &&&&&&&&&&&&Debug.Print&&dddddddddd& &&&&&&&&End&If &&&&&&&&For&i&=&0&To&UBound(s1) &&&&&&&&&&&&rs.AddNew &&&&&&&&&&&&rs(&ColChs&).Value&=&Trim(s1(i)) &&&&&&&&&&&&rs(&ColEng&).Value&=&Trim(s1(i&+&1)) &&&&&&&&&&&&rs(&Visible&).Value&=&CBool(Trim(s1(i&+&2))) &&&&&&&&&&&&rs(&DataTypeConst&).Value&=&CLng(Trim(s1(i&+&3))) &&&&&&&&&&&&rs(&ExcelDataTypeString&).Value&=&Trim(s1(i&+&4)) &&&&&&&&&&&&rs(&ReportName&).Value&=&Trim(s1(i&+&5)) &&&&&&&&&&&&rs.Update &&&&&&&&&&&&i&=&i&+&5 &&&&&&&&Next &&&&End&If &&&& &&&& End&Function '根据到处功能的参数定义表 Private&Function&FieldProperty(ByVal&filter&As&String,&ByVal&returnField&As&ParametersReturnField)&As&String &&&&If&rsFld.State&&&&adStateOpen&Then &&&&&&&&Set&rsFld&=&New&ADODB.Recordset &&&&&&&&If&blnParametersRecordset&=&False&Then &&&&&&&&&&&&rsFld.CursorLocation&=&adUseClient &&&&&&&&&&&&rsFld.Open&&select&*&from&ExportExcelParam&where&reportname&='&&&&strReportName&&&&'&,&conn,&adOpenStatic,&adLockReadOnly &&&&&&&&Else &&&&&&&&&&&&Err.Raise&vbObjectError&+&545,&&clsRecordsetToXls.FieldProperty&,&&在检查字段参数定义时发现错误:未能从内存中读取到导出字段设置参数表,请确认已经正确设定ParaRs属性。& &&&&&&&&End&If &&&&End&If &&&& &&&&rsFld.filter&=&Split(PARAMETERS_TABLE_FIELD,&&,&)(ParametersReturnField.eepEng)&&&&='&&&&filter&&&&'& &&&&If&rsFld.recordCount&=&1&Then &&&&&&&&FieldProperty&=&rsFld(Split(PARAMETERS_TABLE_FIELD,&&,&)(returnField)).Value &&&&ElseIf&rsFld.recordCount&&&1&Then &&&&&&&&Err.Raise&vbObjectError&+&549,&TypeName(Me)&&&&.FieldProperty&,&&在检查字段参数定义时发现错误:对字段《&&&&filter&&&&》的设定有重复,请开发人员进行检查导出参数表!& &&&&ElseIf&rsFld.recordCount&=&0&Then &&&&&&&&Debug.Print&&未找到英文字段名为:&&&&filter&&&&&的设定,现在忽略。& &&&&End&If End&Function '替换XML中需要encode的字符。 Private&Function&CheckXmlString(ByVal&s&As&Variant)&As&String &&&&If&IsNull(s)&=&False&Then &&&&&&&&'注意,以下代码在网页中会显示不正常。 &&&&&&&&s&=&Replace(s,&&&&,&&&&)&&&&'&amp &&&&&&&&s&=&Replace(s,&&&&,&&&&)&&&&&'> &&&&&&&&s&=&Replace(s,&&&&,&&&&)&&&&&'< &&&&&&&&s&=&Replace(s,&&&&&,&&&&)&&'" &&&&&&&&s&=&Replace(s,&&'&,&&&&)&&&'' &&&&&&&&CheckXmlString&=&s &&&&End&If End&Function '在指定字符串旁边添加tag标志。dataType为可选,如果赋值了,则添加excel&xml&特有的ss:Type&和&ss:StyleId属性。 Private&Function&AddTag(ByVal&v&As&String,&ByVal&tagName&As&String,&Optional&ByVal&dataType&As&String,&Optional&ByVal&styleId&As&String)&As&String &&&&Dim&strType&As&String &&&&Dim&strStyle&As&String &&&& &&&&If&dataType&=&&&&Then &&&&&&&&strType&=&&& &&&&Else &&&&&&&&strType&=&&&ss:Type='&&&&dataType&&&&'& &&&&End&If &&&& &&&&If&styleId&=&&&&Then &&&&&&&&strStyle&=&&& &&&&Else &&&&&&&&strStyle&=&&&ss:StyleID='&&&&styleId&&&&'& &&&&End&If &&&& &&&&AddTag&=&&&&&&&tagName&&&strType&&&strStyle&&&&&&&&&v&&&&&/&&&&tagName&&&&&& &&&& End&Function
Private&Function&WriteHeadFoot(ByVal&filename&As&String) &&&& &&&&Set&fs&=&CreateObject(&Scripting.FileSystemObject&) &&&&'Set&a&=&fs.CreateTextFile(filename,&True) &&&&Set&a&=&fs.OpenTextFile(filename,&1,&True) &&&&Dim&s&As&String &&&&s&=&a.readall &&&&a.Close &&&&Set&a&=&fs.CreateTextFile(filename,&True) &&&&a.write&ReadHead()&&&s&&&ReadFoot() &&&&a.Close End&Function Public&Function&DoExport() &&&& &&&&RsToXls&rsData,&strXlsFullPath End&Function '根据参数recordset&导出其导出参数模板字符串。 Public&Function&CreateDataRsFieldDescString(ByRef&rs&As&ADODB.Recordset,&ByVal&isOneLine&As&Boolean)&As&String &&&&Dim&fld&As&ADODB.field &&&&Dim&s&As&String &&&& &&&&For&Each&fld&In&rs.Fields &&&&&&&&If&s&&&&&&&Then &&&&&&&&&&&&If&isOneLine&=&True&Then &&&&&&&&&&&&&&&&s&=&s&&&&,&&&&String(10,&&&&) &&&&&&&&&&&&Else &&&&&&&&&&&&&&&&s&=&s&&&&,&&&&&&_&&&&vbCrLf&&&&&&& &&&&&&&&&&&&End&If &&&&&&&&End&If &&&&&&&&s&=&s&&&fld.Name&&&&,&&&&fld.Name&&&&,True,&&&&fld.Type&&&&,& &&&&&&&&''中文,英文,true,122,String,ReportName &&&&&&&&Select&Case&fld.Type &&&&&&&&Case&ADODB.adVarChar &&&&&&&&&&&&s&=&s&&&&String& &&&&&&&&Case&ADODB.adNumeric,&ADODB.adInteger,&ADODB.adDouble &&&&&&&&&&&&s&=&s&&&&Number& &&&&&&&&Case&ADODB.adDate,&ADODB.adDBDate &&&&&&&&&&&&s&=&s&&&&DateTime& &&&&&&&&Case&Else &&&&&&&&&&&&s&=&s&&&&String& &&&&&&&&End&Select &&&&&&&&s&=&s&&&&,Default& &&&&Next &&&&CreateDataRsFieldDescString&=&s End&Function '去null值,模仿&VBA&的NZ&函数 Private&Function&VB6Nz(ByVal&v&As&Variant,&ByVal&defaultValue&As&Variant)&As&Variant &&&&If&IsNull(v)&=&True&Then &&&&&&&&VB6Nz&=&defaultValue &&&&Else &&&&&&&&VB6Nz&=&v &&&&End&If End&Function Private&Function&RsToXls(ByRef&rs&As&ADODB.Recordset,&ByVal&filename&As&String) &&&&Dim&i&As&Long &&&&Dim&i2&As&Long On&Error&GoTo&RsToRs_Err &&&&Set&fs&=&CreateObject(&Scripting.FileSystemObject&) &&&&Set&a&=&fs.OpenTextFile(filename,&8,&True) &&&&Dim&s&As&String &&&&Dim&s3&As&String &&&&Dim&sr&As&String &&&&Dim&blnCancel&As&Boolean &&&& &&&&For&i&=&0&To&rs.Fields.Count&-&1 &&&&&&&&Debug.Print&FieldProperty(rs.Fields(i).Name,&eepVisible) &&&&&&&&If&FieldProperty(rs.Fields(i).Name,&eepVisible)&=&&True&&Then &&&&&&&&&&&&s&=&AddTag(CheckXmlString(FieldProperty(rs.Fields(i).Name,&eepChs)),&&Data&,&&String&) &&&&&&&&&&&&s&=&AddTag(s,&&Cell&) &&&&&&&&&&&&sr&=&sr&&&s &&&&&&&&End&If &&&&Next &&&&sr&=&AddTag(sr,&&Row&) &&& &&&&s3&=&strXlsHead&&&sr &&&&&&&& &&&&Do&Until&rs.EOF &&&&&&&&sr&=&&& &&&&&&&&s&=&&& &&&&&&&&i2&=&i2&+&1 &&&&&&&&For&i&=&0&To&rs.Fields.Count&-&1 &&&&&&&&&&&&If&blnStop&=&True&Then &&&&&&&&&&&&&&&&dblEndTimer&=&Timer() &&&&&&&&&&&&&&&&RaiseEvent&ProcessStop(i2,&rs.recordCount,&dblEndTimer&-&dblStartTimer,&&用户手动停止操作。&) &&&&&&&&&&&&&&&&Exit&Function &&&&&&&&&&&&End&If &&&&&&&&&&&&'触发事件 &&&&&&&&&&&&dblEndTimer&=&Timer() &&&&&&&&&&&&RaiseEvent&Exporting(i2,&rs.recordCount,&dblEndTimer&-&dblStartTimer,&rs,&rs.Fields(i),&blnCancel) &&&&&&&&&&&&If&blnCancel&=&False&Then &&&&&&&&&&&&&&&&If&FieldProperty(rs.Fields(i).Name,&eepVisible)&=&&True&&Then &&&&&&&&&&&&&&&&&&&&Select&Case&rs.Fields(i).Type &&&&&&&&&&&&&&&&&&&&Case&ADODB.adVarChar &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(CheckXmlString(rs.Fields(i).Value),&&Data&,&&String&) &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(s,&&Cell&) &&&&&&&&&&&&&&&&&&&&Case&ADODB.adNumeric,&ADODB.adInteger,&ADODB.adDouble &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(VB6Nz(rs.Fields(i).Value,&&&),&&Data&,&&Number&) &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(s,&&Cell&) &&&&&&&&&&&&&&&&&&&&Case&ADODB.adDate,&ADODB.adDBDate &&&&&&&&&&&&&&&&&&&&&&&&'注意&EXCEL&XML&中日期是特殊的,以&T16:55:47.071&这样的格式保存。 &&&&&&&&&&&&&&&&&&&&&&&&If&IsDate(rs.Fields(i).Value)&=&True&Then &&&&&&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(Format(rs.Fields(i).Value,&&YYYY-MM-DDTHH:NN:SS&),&&Data&,&&DateTime&) &&&&&&&&&&&&&&&&&&&&&&&&&&&&'注意!日期比较特别,其有特定格式,该格式是&head&中styles标记中特别定义的。 &&&&&&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(s,&&Cell&,&,&&clsRecordsetToXlsDatetime&) &&&&&&&&&&&&&&&&&&&&&&&&Else &&&&&&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(CheckXmlString(VB6Nz(rs.Fields(i).Value,&&&)),&&Data&,&&String&) &&&&&&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(s,&&Cell&) &&&&&&&&&&&&&&&&&&&&&&&&End&If &&&&&&&&&&&&&&&&&&&&Case&Else &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(CheckXmlString(rs.Fields(i).Value),&&Data&,&&String&) &&&&&&&&&&&&&&&&&&&&&&&&s&=&AddTag(s,&&Cell&) &&&&&&&&&&&&&&&&&&&&End&Select &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&sr&=&sr&&&s &&&&&&&&&&&&&&&&&&&&DoEvents &&&&&&&&&&&&&&&&End&If &&&&&&&&&&&&End&If &&&&&&&&Next &&&&&&&&sr&=&AddTag(sr,&&Row&) &&&&&&&&sr&=&sr&&&vbCrLf &&&&&&&&s3&=&s3&&&sr &&&&&&&&DoEvents &&&&&&&&If&blnStop&=&True&Then &&&&&&&&&&&&dblEndTimer&=&Timer() &&&&&&&&&&&&RaiseEvent&ProcessStop(i2,&rs.recordCount,&dblEndTimer&-&dblStartTimer,&&用户手动停止操作。&) &&&&&&&&&&&&Exit&Function &&&&&&&&End&If &&&&&&&& &&&&&&&&If&Len(s3)&&&STRING_PAGESZIE&Then &&&&&&&&&&&&a.write&s3 &&&&&&&&&&&&s3&=&&& &&&&&&&&End&If &&&&&&&& &&&&&&&&rs.MoveNext &&&&Loop &&&&&&&& &&&&a.write&s3&&&strXlsFoot &&&&a.Close &&&& &&&& &&&&dblEndTimer&=&Timer() &&&&RaiseEvent&ProcessEnd(i2,&dblEndTimer&-&dblStartTimer,&True,&&成功。&) &&&& &&&&Exit&Function &&&& RsToRs_Err: &&&&dblEndTimer&=&Timer() &&&&If&Err&&&&0&Then &&&&&&&&RaiseEvent&ProcessEnd(i2,&dblEndTimer&-&dblStartTimer,&False,&Err.Number&&&Err.Source&&&Err.Description) &&&&End&If &&&&&&&& End&Function Private&Function&ReadHead() &&&&Set&fs&=&CreateObject(&Scripting.FileSystemObject&) &&&&Set&a&=&fs.OpenTextFile(CurrentProject.Path&&&&\head.txt&,&1) &&&&Dim&s&As&String &&&&s&=&a.readall &&&&a.Close &&&&ReadHead&=&s End&Function Private&Function&ReadFoot() &&&&Set&fs&=&CreateObject(&Scripting.FileSystemObject&) &&&&Set&a&=&fs.OpenTextFile(CurrentProject.Path&&&&\foot.txt&,&1) &&&&Dim&s&As&String &&&&s&=&a.readall &&&&a.Close &&&&ReadFoot&=&s End&Function
Private&Sub&Class_Initialize() &&&&dblStartTimer&=&Timer() &&&& &&&&strXlsHeadDefault&=&&&?xml&version=&&1.0&&&[encoding&property]?&&?mso-application&progid=&&Excel.Sheet&&?&&Workbook&xmlns=&&urn:schemas-microsoft-com:office:spreadsheet&&&xmlns:o=&&urn:schemas-microsoft-com:office:office&&&xmlns:x=&&urn:schemas-microsoft-com:office:excel&&&xmlns:ss=&&urn:schemas-microsoft-com:office:spreadsheet&&&&xmlns:html=&&http://www.w3.org/TR/REC-html40&&&&&&ExcelWorkbook&xmlns=&&urn:schemas-microsoft-com:office:excel&&&&&&&/ExcelWorkbook&&&&Styles&&&Style&ss:ID=&&clsRecordsetToXlsDatetime&&&&&&NumberFormat&ss:Format=&&yyyy/m/d;@&&/&&&&/Style&&&/Styles&&&Worksheet&ss:Name=&&Sheet1&&&&&&&Table&& &&&&strXlsFoot&=&&&/Table&&/Worksheet&&/Workbook&& &&&&'默认值 &&&&Me.XlsEncoding&=&&GB2312& &&&& End&Sub
调用方法1,支持进度提示,工作中途停止导出。 建立一个包含3个控件的窗体
Option&Compare&Database '新建一个窗体,窗体,窗体上至少有3个控件:2个按钮和1个标签。 '1个开始按钮,1个结束按钮(用于长时间处理时可以在处理到一半停止),1个标签(用于显示处理信息) '以下代码调用类的事件来完成与用户的交互。 Dim&WithEvents&rts&As&clsRecordsetToXls '开始执行按钮 Private&Sub&Command5_Click() &&&& &&&&Set&rts&=&New&clsRecordsetToXls &&&& &&&& '&&&&'1&直接从内存中获取参数表的方法 '&&&&Dim&rs&As&New&ADODB.Recordset '&&&&'字段描述字符串格式如下:中文,英文,true,122,String,ReportName '&&&&'用户可以直接用:rts.CreateDataRsFieldDescString(rsData,&False)&来创建字段表述。 '&&&&''rts.CreateParametersRs&&字段1,字段1,true,200,String,x,&&字段2,字段2,true,200,String,x,&&字段2,字段2,true,200,String,x&&&&,&rs '&&&&rts.CreateParametersRs&&编号,编号,True,3,Number,Default,&&&&&_ '&&&&&&&&&字段1,字段1,True,202,String,Default,&&&&&_ '&&&&&&&&&字段2,字段2,True,202,String,Default,&&&&&_ '&&&&&&&&&字段3,字段3,True,202,String,Default,&&&&&_ '&&&&&&&&&日期字段,日期字段,True,7,DateTime,Default&,&rs '&&&&Set&rts.ParaRs&=&rs '&&&&Debug.Print&&是否从内存中获取参数:&,&rts.IsParaFromRs &&&& &&&&'2&直接从数据库中获取参数表的方法 &&&&rts.ReportName&=&&InOutCountReport& &&&&Set&rts.ActiveConnection&=&CurrentProject.Connection &&&&Debug.Print&&是否从内存中获取参数:&,&rts.IsParaFromRs &&&&rts.XlsEncoding&=&&GB2312& &&&&rts.XlsFullPath&=&CurrentProject.Path&&&&\a.xml& &&&& &&&&'判断导出的文件名是否已经存在,如果已经存在则先删除。 &&&&If&Dir(CurrentProject.Path&&&&\a.xml&)&&&&&&&Then &&&&&&&&Kill&CurrentProject.Path&&&&\a.xml& &&&&End&If &&&& &&&&'将数据表赋给导出类的DataRs属性 &&&&Dim&rsData&As&New&ADODB.Recordset &&&&rsData.Open&&select&*&from&sheet1&,&CurrentProject.Connection,&1,&1 &&&&Set&rts.DataRs&=&rsData &&&&'执行导出 &&&&rts.DoExport &&&&rsData.Close &&&& End&Sub '停止按钮 Private&Sub&Command8_Click() &&&&rts.ProcesStop&=&True End&Sub '正在进行的时候触发的事件 Private&Sub&rts_Exporting(ByVal&currentRow&As&Long,&_ &&&&ByVal&recordCount&As&Long,&_ &&&&ByVal&currentTimer&As&Double,&_ &&&&rs&As&ADODB.Recordset,&_ &&&&field&As&ADODB.field,&cancel&As&Boolean) &&&& &&&&Me.lblMsg.Caption&=&&处理进度:&&&&currentRow&&&&/&&&&recordCount&&&&。& &&&&Me.Repaint End&Sub '全部结束后触发的事件 Private&Sub&rts_ProcessEnd(ByVal&currentRow&As&Long,&_ &&&&ByVal&currentTimer&As&Double,&_ &&&&ByVal&successed&As&Boolean,&_ &&&&ByVal&msg&As&String) &&&& &&&&If&successed&=&True&Then &&&&&&&&Me.lblMsg.Caption&=&&完成。&&&&msg&&&&耗时:&&&&currentTimer&&&&秒。& &&&&Else &&&&&&&&Me.lblMsg.Caption&=&&完成,但出现错误:&&&&msg&&&&目前处理到:&&&&currentRow&&&&行。耗时:&&&&currentTimer&&&&秒。& &&&&End&If &&&&Me.Repaint End&Sub Private&Sub&rts_ProcessStop(ByVal&currentRow&As&Long,&ByVal&recordCount&As&Long,&ByVal&currentTimer&As&Double,&msg&As&String) &&&&Me.lblMsg.Caption&=&&用户手动停止了操作。目前操作到第&&&&currentRow&&&&行,总共&&&&recorcount&&&&行。耗时:&&&&currentTimer&&&&。&&&&msg &&&&Me.Repaint End&Sub
调用方法2,不支持进度提示: 建立一个模块
'在模块中直接调用clsRecordsetToXls类的示例。 '模块中调用不能订阅事件来获取进度。 Function&test2() &&&&Dim&rts&As&New&clsRecordsetToXls &&&& &&&&'1&直接从内存中获取参数表的方法 &&&&Dim&rs&As&New&ADODB.Recordset &&&&'字段描述字符串格式如下:中文,英文,true,122,String,ReportName &&&&'用户可以直接用:rts.CreateDataRsFieldDescString(rsData,&False)&来创建字段表述。 &&&&'rts.CreateParametersRs&&字段1,字段1,true,200,String,x,&&字段2,字段2,true,200,String,x,&&字段2,字段2,true,200,String,x&&&&,&rs &&&&rts.CreateParametersRs&&编号,编号,True,3,Number,Default,&&&&&_ &&&&&&&&&字段1,字段1,True,202,String,Default,&&&&&_ &&&&&&&&&字段2,字段2,True,202,String,Default,&&&&&_ &&&&&&&&&字段3,字段3,True,202,String,Default,&&&&&_ &&&&&&&&&日期字段,日期字段,True,7,DateTime,Default&,&rs &&&&Set&rts.ParaRs&=&rs &&&&Debug.Print&&是否从内存中获取参数:&,&rts.IsParaFromRs &&&& '&&&&'2&直接从数据库中获取参数表的方法 '&&&&rts.ReportName&=&&???& '&&&&Set&rts.ActiveConnection&=&CurrentProject.Connection '&&&&Debug.Print&&是否从内存中获取参数:&,&rts.IsParaFromRs &&&&rts.XlsEncoding&=&&GB2312& &&&&rts.XlsFullPath&=&CurrentProject.Path&&&&\a.xml& &&&& &&&& &&&& &&&&'将数据表赋给导出类的DataRs属性 &&&&Dim&rsData&As&New&ADODB.Recordset &&&&rsData.Open&&select&*&from&ado&,&CurrentProject.Connection,&1,&1 &&&&Set&rts.DataRs&=&rsData &&&&'执行导出 &&&&rts.DoExport &&&&rsData.Close &&&& &&&& End&Function '创建一个参数表,该参数表用来存放字段名(列名)等描述信息。 Function&test3() &&&&Dim&rts&As&New&clsRecordsetToXls &&&&Set&rts.ActiveConnection&=&CurrentProject.Connection &&&&rts.CreateExportParaTable End&Function
示例下载:
(101KB) & 本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。
access911.net 原创文章,作者本人对文章保留一切权利。如需转载必须征得作者同意并注明本站链接 &
建站日期:&&|&&设计施工:陈格 ( access911 & cg1 )
&Copyright & 2000 - 2003 COMET, 陈格 保留所有权利
[您的浏览器不支持框架信息]

我要回帖

更多关于 应付账款excel表格 的文章

 

随机推荐