手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

从数据库导出数据到word、excel、.txt

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

for(int totaltable = 0;totaltable<ds.Tables.Count;totaltable )
{
//统计dataset中当前表的行数
int row = ds.Tables[totaltable].Rows.Count;

//统计dataset中当前表的列数
int column = ds.Tables[totaltable].Columns.Count;

//用于统计当前表中每列记录中字符数最长的字符串的长度之和
int totalLength = 0;

//用于统计标题的长度(dataset中的表名的length "表的数据如下"的length)
int titleLength = 0;

//统计每列记录中字符数最长的字符串的长度
int[] columnLength = new int[column];
for(int i = 0;i<column;i )
{
columnLength[i] = ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length;
}
for(int i = 0;i<row;i )
{
for(int j = 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(int i = 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(int i = 0;i<(int)((totalLength-titleLength)/2);i )
{
textFile.Write(' ');
}
textFile.Write(ds.Tables[totaltable].TableName "表的数据如下");
textFile.WriteLine();
for(int i = 0;i<totalLength;i )
{
textFile.Write('*');
}
textFile.WriteLine();
textFile.Write("\t");

//把dataset中当前表的字段名写入.txt文件中
for(int i = 0;i<column;i )
{
textFile.Write(ds.Tables[totaltable].Columns[i].ColumnName.ToString());
for(int k = 0;k<columnLength[i]-ds.Tables[totaltable].Columns[i].ColumnName.ToString().Length DATADISTANCE;k )
{
textFile.Write(' ');
}
}
textFile.WriteLine();
for(int i = 0;i<totalLength;i )
{
textFile.Write('-');
}
textFile.WriteLine();
textFile.Write("\t");

//把dataset中当前表的数据写入.txt文件中
for(int i = 0;i<row;i )
{
for(int j = 0;j<column;j )
{
textFile.Write(ds.Tables[totaltable].Rows[i][j].ToString());
for(int k = 0;k<columnLength[j]-ds.Tables[totaltable].Rows[i][j].ToString().Length DATADISTANCE;k )
{
textFile.Write(' ');
}
}
textFile.WriteLine();
textFile.Write("\t");
}
textFile.WriteLine();
for(int i = 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("No Data");
}
}

public string GetTempFileName()
{
return DateTime.Now.ToString("yyyyMMddhhmmssfff");
}
}
}

补充:使用以上方法必须对dcom进行配置,给用户使用office的权限。
具体配置方法如下:
1:在服务器上安装office的Excel软件.
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.
这样,我们便配置好了相应的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的使用方法。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!