|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
感觉很多控件都必须自己去写代码;用了WebMatrix感觉也不是很好,毕竟没有很强的WYSIWYG效果。现在就不知道如何是好了。excel|word|导出数据|数据库转自http://martinyang2010.bokee.com/2598999.html
usingSystem;
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[k].Rows.Count;
intcolumn=ds.Tables[k].Columns.Count;
for(inti=0;i<column;i++)
{
myExcel.Cells[totalCount+2,1+i]=ds.Tables[k].Columns[i].ColumnName;
}
for(inti=0;i<row;i++)
{
for(intj=0;j<column;j++)
{
myExcel.Cells[totalCount+3+i,1+j]=""+ds.Tables[k].Rows[i][j].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[totalTable].TableName+"表的数据以下");
myWord.Application.Selection.TypeParagraph();
myWord.Application.Selection.TypeParagraph();
Word.Rangepara=myWord.Application.Selection.Range;
myDoc.Tables.Add(para,ds.Tables[totalTable].Rows.Count+1,ds.Tables[totalTable].Columns.Count,reftableBehavior,refautoFitBehavior);
for(intcolumn=0;column<ds.Tables[totalTable].Columns.Count;column++)
{
myDoc.Tables.Item(totalTable+1).Cell(1,column+1).Range.InsertBefore(ds.Tables[0].Columns[column].ColumnName.Trim());
}
for(introw=0;row<ds.Tables[totalTable].Rows.Count;row++)
{
for(intcolumn=0;column<ds.Tables[totalTable].Columns.Count;column++)
{
myDoc.Tables.Item(totalTable+1).Cell(row+2,column+1).Range.InsertBefore(ds.Tables[totalTable].Rows[row][column].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[totaltable].Rows.Count;
//统计dataset中以后表的列数
intcolumn=ds.Tables[totaltable].Columns.Count;
//用于统计以后表中每列纪录中字符数最长的字符串的长度之和
inttotalLength=0;
//用于统计题目的长度(dataset中的表名的length+"表的数据以下"的length)
inttitleLength=0;
//统计每列纪录中字符数最长的字符串的长度
int[]columnLength=newint[column];
for(inti=0;i<column;i++)
{
columnLength[i]=ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length;
}
for(inti=0;i<row;i++)
{
for(intj=0;j<column;j++)
{
if(ds.Tables[totaltable].Rows[i][j].ToString().Length>columnLength[j])
{
columnLength[j]=ds.Tables[totaltable].Rows[i][j].ToString().Length;
}
}
}
//统计以后表中每列纪录中字符数最长的字符串的长度之和
for(inti=0;i<column;i++)
{
totalLength=totalLength+columnLength[i]+DATADISTANCE;
}
totalLength=totalLength+2*TABDISTANCE-DATADISTANCE;
//统计题目的长度(dataset中确当前表名的length+"表的数据以下"的length)
titleLength=ds.Tables[totaltable].TableName.ToString().Length+"表的数据以下".Length*2;
//把题目写进.txt文件中
for(inti=0;i<(int)((totalLength-titleLength)/2);i++)
{
textFile.Write();
}
textFile.Write(ds.Tables[totaltable].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[totaltable].Columns[i].ColumnName.ToString());
for(intk=0;k<columnLength[i]-ds.Tables[totaltable].Columns[i].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[totaltable].Rows[i][j].ToString());
for(intk=0;k<columnLength[j]-ds.Tables[totaltable].Rows[i][j].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的利用办法。
可怜的程序员,还是逃不出移植的命运! |
|