ASP.NET教程之从数据库导出数据到word、excel、.txt
感觉很多控件都必须自己去写代码;用了WebMatrix感觉也不是很好,毕竟没有很强的WYSIWYG效果。现在就不知道如何是好了。excel|word|导出数据|数据库转自http://martinyang2010.bokee.com/2598999.htmlusingSystem;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Data.SqlClient;
usingExcel;
usingWord;
usingSystem.IO;
namespaceCommon
{
///<summary>
///把数据导进到.doc、.txt、.xls文件中
///</summary>
publicclassExport
{
privateconststringDATAWORDPATH=@"C:folderdocdatadoc";
privateconststringIMAGEWORDPATH=@"C:folderdocimagedoc";
privateconststringIMAGEPATH=@"C:folderimage";
privateconststringEXCELPATH=@"C:folderexcel";
privateconststringTXTPATH=@"C:folder xt";
privateconststringIMAGEPOSTFIX=".bmp";
privateconststringWORDPOSTFIX=".doc";
privateconststringEXCELPOSTFIX=".xls";
privateconststringTXTPOSTFIX=".txt";
privateconstintDATADISTANCE=5;
privateconstintTABDISTANCE=8;
publicExport()
{
//
//TODO:在此处增加机关函数逻辑
//
}
///<summary>
///取得数据集Dataset--------------------------------用于调试
///</summary>
///<returns>Dataset</returns>
publicDataSetGetData()
{
try
{
stringsConnectionString;
sConnectionString="workstationid=GUOFU;packetsize=4096;userid=sa;datasource=GUOFU;persistsecurityinfo=True;initialcatalog=YC;password=sc";
SqlConnectionobjConn=newSqlConnection(sConnectionString);
objConn.Open();
SqlDataAdapterdaPoint=newSqlDataAdapter("Select*FromPoint",objConn);
DataSetdsYC=newDataSet("YC");
daPoint.FillSchema(dsYC,SchemaType.Mapped,"Point");
daPoint.Fill(dsYC,"Point");
daPoint=newSqlDataAdapter("Select*FromEmployee",objConn);
daPoint.FillSchema(dsYC,SchemaType.Mapped,"Employee");
daPoint.Fill(dsYC,"Employee");
returndsYC;
}
catch(Exceptionex)
{
thrownewException(ex.Message);
}
}
///<summary>
///把数据文件导进到.xls文件
///</summary>
///<paramname="ds"></param>
publicvoidExportToExcel(DataSetds)
{
if(ds.Tables.Count!=0)
{
//天生.xls文件完全路径名
stringtempFileName=GetTempFileName();
objectfilename=EXCELPATH+tempFileName+EXCELPOSTFIX;
objectNothing=System.Reflection.Missing.Value;
//创立excel文件,文件名用体系工夫天生准确到毫秒
Excel.ApplicationmyExcel=newExcel.ApplicationClass();
myExcel.Application.Workbooks.Add(Nothing);
try
{
//把Dataset中的数据拔出excel文件中
inttotalCount=0;
for(intk=0;k<ds.Tables.Count;k++)
{
introw=ds.Tables.Rows.Count;
intcolumn=ds.Tables.Columns.Count;
for(inti=0;i<column;i++)
{
myExcel.Cells=ds.Tables.Columns.ColumnName;
}
for(inti=0;i<row;i++)
{
for(intj=0;j<column;j++)
{
myExcel.Cells=""+ds.Tables.Rows.ToString();
}
}
totalCount=totalCount+row+4;
}
try
{
//保留excel文件到指定的目次下,文件名用体系工夫天生准确到毫秒
myExcel.ActiveWorkbook._SaveAs(filename,Nothing,Nothing,Nothing,Nothing,Nothing,XlSaveAsAccessMode.xlExclusive,Nothing,Nothing,Nothing,Nothing);
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+EXCELPATH+tempFileName+EXCELPOSTFIX);
return;
}
//让天生的excel文件可见
myExcel.Visible=true;
}
catch(Exceptione)
{
System.Windows.Forms.MessageBox.Show("向excel文件中写进数据堕落:"+e.Message);
}
}
else
{
System.Windows.Forms.MessageBox.Show("NoData");
}
}
///<summary>
///把数据导进到.doc文件
///</summary>
///<paramname="ds"></param>
publicvoidExportToWord(DataSetds)
{
if(ds.Tables.Count!=0)
{
stringtempFileName=null;
objectfilename=null;
objecttableBehavior=Word.WdDefaultTableBehavior.wdWord9TableBehavior;
objectautoFitBehavior=Word.WdAutoFitBehavior.wdAutoFitFixed;
objectunit=Word.WdUnits.wdStory;
objectextend=System.Reflection.Missing.Value;
objectbreakType=(int)Word.WdBreakType.wdSectionBreakNextPage;
objectcount=1;
objectcharacter=Word.WdUnits.wdCharacter;
objectNothing=System.Reflection.Missing.Value;
try
{
tempFileName=GetTempFileName();
//天生.doc文件完全路径名
filename=DATAWORDPATH+tempFileName+WORDPOSTFIX;
//创立一个word文件,文件名用体系工夫天生准确到毫秒
Word.ApplicationmyWord=newWord.ApplicationClass();
Word._DocumentmyDoc=newWord.DocumentClass();
myDoc=myWord.Documents.Add(refNothing,refNothing,refNothing,refNothing);
myDoc.Activate();
//向把dataset中的表拔出到word的文件中
for(inttotalTable=0;totalTable<ds.Tables.Count;totalTable++)
{
myWord.Application.Selection.TypeText(ds.Tables.TableName+"表的数据以下");
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.TypeParagraph();
Word.Rangepara=myWord.Application.Selection.Range;
myDoc.Tables.Add(para,ds.Tables.Rows.Count+1,ds.Tables.Columns.Count,reftableBehavior,refautoFitBehavior);
for(intcolumn=0;column<ds.Tables.Columns.Count;column++)
{
myDoc.Tables.Item(totalTable+1).Cell(1,column+1).Range.InsertBefore(ds.Tables.Columns.ColumnName.Trim());
}
for(introw=0;row<ds.Tables.Rows.Count;row++)
{
for(intcolumn=0;column<ds.Tables.Columns.Count;column++)
{
myDoc.Tables.Item(totalTable+1).Cell(row+2,column+1).Range.InsertBefore(ds.Tables.Rows.ToString().Trim());
}
}
myWord.Application.Selection.EndKey(refunit,refextend);
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.InsertBreak(refbreakType);
}
myWord.Application.Selection.TypeBackspace();
myWord.Application.Selection.Delete(refcharacter,refcount);
myWord.Application.Selection.HomeKey(refunit,refextend);
//保留word文件到指定的目次下
try
{
myDoc.SaveAs(reffilename,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing);
myWord.Visible=true;
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+DATAWORDPATH+tempFileName+WORDPOSTFIX);
return;
}
//让天生的excel文件可见
myWord.Visible=true;
}
catch(Exceptionex)
{
System.Windows.Forms.MessageBox.Show("向word文件中写进数据堕落:"+ex.Message);
}
}
else
{
System.Windows.Forms.MessageBox.Show("NoData");
}
}
///<summary>
///把图片文件导进到.doc文件
///</summary>
///<paramname="bp"></param>
publicvoidExportToWord(Bitmapbp)
{
stringtempFileName=null;
stringbmpPath=null;
objectfilename=null;
objectNothing=null;
tempFileName=GetTempFileName();
//天生.bmp文件完全路径名
bmpPath=IMAGEPATH+tempFileName+IMAGEPOSTFIX;
//天生.doc文件完全路径名
filename=IMAGEWORDPATH+tempFileName+WORDPOSTFIX;
Nothing=System.Reflection.Missing.Value;
//创立一个word文件,文件名用体系工夫天生准确到毫秒
Word.ApplicationmyWord=newWord.ApplicationClass();
Word._DocumentmyDoc=newWord.DocumentClass();
myDoc=myWord.Documents.Add(refNothing,refNothing,refNothing,refNothing);
try
{
//把bitmap工具保留到体系所天生文件完全路径中
bp.Save(bmpPath);
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+bmpPath);
return;
}
try
{
//往word文件中拔出图片
myDoc.InlineShapes.AddPicture(bmpPath,refNothing,refNothing,refNothing);
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+bmpPath);
return;
}
try
{
//保留word文件到指定的目次下
myDoc.SaveAs(reffilename,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing);
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+IMAGEWORDPATH+tempFileName+WORDPOSTFIX);
return;
}
//让天生的word文件可见
myWord.Visible=true;
}
///<summary>
///把数据文件导进到.txt文件
///</summary>
///<paramname="ds"></param>
publicvoidExportToTxt(DataSetds)
{
if(ds.Tables.Count!=0)
{
stringtempFileName=null;
tempFileName=GetTempFileName();
//创立一个.txt文件,文件名用体系工夫天生准确到毫秒
FileInfofile=newFileInfo(TXTPATH+tempFileName+TXTPOSTFIX);
StreamWritertextFile=null;
try
{
textFile=file.CreateText();
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+TXTPATH+tempFileName+TXTPOSTFIX);
return;
}
//把Dataset中的数据写进.txt文件中
for(inttotaltable=0;totaltable<ds.Tables.Count;totaltable++)
{
//统计dataset中以后表的行数
introw=ds.Tables.Rows.Count;
//统计dataset中以后表的列数
intcolumn=ds.Tables.Columns.Count;
//用于统计以后表中每列纪录中字符数最长的字符串的长度之和
inttotalLength=0;
//用于统计题目的长度(dataset中的表名的length+"表的数据以下"的length)
inttitleLength=0;
//统计每列纪录中字符数最长的字符串的长度
int[]columnLength=newint;
for(inti=0;i<column;i++)
{
columnLength=ds.Tables.Columns.ColumnName.ToString().Length;
}
for(inti=0;i<row;i++)
{
for(intj=0;j<column;j++)
{
if(ds.Tables.Rows.ToString().Length>columnLength)
{
columnLength=ds.Tables.Rows.ToString().Length;
}
}
}
//统计以后表中每列纪录中字符数最长的字符串的长度之和
for(inti=0;i<column;i++)
{
totalLength=totalLength+columnLength+DATADISTANCE;
}
totalLength=totalLength+2*TABDISTANCE-DATADISTANCE;
//统计题目的长度(dataset中确当前表名的length+"表的数据以下"的length)
titleLength=ds.Tables.TableName.ToString().Length+"表的数据以下".Length*2;
//把题目写进.txt文件中
for(inti=0;i<(int)((totalLength-titleLength)/2);i++)
{
textFile.Write();
}
textFile.Write(ds.Tables.TableName+"表的数据以下");
textFile.WriteLine();
for(inti=0;i<totalLength;i++)
{
textFile.Write(*);
}
textFile.WriteLine();
textFile.Write(" ");
//把dataset中以后表的字段名写进.txt文件中
for(inti=0;i<column;i++)
{
textFile.Write(ds.Tables.Columns.ColumnName.ToString());
for(intk=0;k<columnLength-ds.Tables.Columns.ColumnName.ToString().Length+DATADISTANCE;k++)
{
textFile.Write();
}
}
textFile.WriteLine();
for(inti=0;i<totalLength;i++)
{
textFile.Write(-);
}
textFile.WriteLine();
textFile.Write(" ");
//把dataset中以后表的数据写进.txt文件中
for(inti=0;i<row;i++)
{
for(intj=0;j<column;j++)
{
textFile.Write(ds.Tables.Rows.ToString());
for(intk=0;k<columnLength-ds.Tables.Rows.ToString().Length+DATADISTANCE;k++)
{
textFile.Write();
}
}
textFile.WriteLine();
textFile.Write(" ");
}
textFile.WriteLine();
for(inti=0;i<totalLength;i++)
{
textFile.Write(-);
}
textFile.WriteLine();
textFile.WriteLine();
textFile.WriteLine();
}
//封闭以后的StreamWriter流
textFile.Close();
System.Windows.Forms.MessageBox.Show("数据文件已保留到"+""+file.FullName);
}
else
{
System.Windows.Forms.MessageBox.Show("NoData");
}
}
publicstringGetTempFileName()
{
returnDateTime.Now.ToString("yyyyMMddhhmmssfff");
}
}
}
增补:利用以上办法必需对dcom举行设置,给用户利用office的权限。
详细设置办法以下:
1:在服务器上安装office的Excel软件.
2:在"入手下手"->"运转"中输出dcomcnfg.exe启动"组件服务"
3:顺次双击"组件服务"->"盘算机"->"我的电脑"->"DCOM设置"
4:在"DCOM设置"中找到"MicrosoftExcel使用程序",在它下面点击右键,然后点击"属性",弹出"MicrosoftExcel使用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"平安"标签,在"启动和激活权限"上点击"自界说",然后点击对应的"编纂"按钮,在弹出的"平安性"对话框中填加一个"NETWORKSERVICE"用户(注重要选择本盘算机名),并给它付与"当地启动"和"当地激活"权限.
7:仍然是"平安"标签,在"会见权限"上点击"自界说",然后点击"编纂",在弹出的"平安性"对话框中也填加一个"NETWORKSERVICE"用户,然后付与"当地会见"权限.
如许,我们便设置好了响应的Excel的DCOM权限.
注重:我是在WIN2003上设置的,在2000上,是设置ASPNET用户
若不举行设置会呈现毛病
检索COM类工场中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失利,缘故原由是呈现以下毛病:80070005。
缘故原由是用户没有利用Excel的权限。
导出到word一样要设置利用word的权限。
持续增补:导出到txt我用了下面的办法有成绩,
try
{
textFile=file.CreateText();
}
catch
{
System.Windows.Forms.MessageBox.Show("体系找不到指定目次下的文件:"+TXTPATH+tempFileName+TXTPOSTFIX);
return;
}
老是在这里跳到catch内里。导出到word,excel都能用,持续研讨txt的利用办法。
可怜的程序员,还是逃不出移植的命运! 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦! 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
页:
[1]