如何将dataset数据保存到文本文件,和excel文件中? 看了很多例子,还是弄不出来,希望哪位能给段代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dataset有输出XML文本的GetXML方法,可以直接生成XML格式的string到文本文件。或者也可以用WriteXML方法直接写到指定文件中去。 那样是xml格式的,,我想直接要里面的数据,不包括xml的框架,和格式。 webform很好实现,winform一般调用office进行开发,不装office似乎不能运行,尚无好办法。如果数据不是很复杂的话,可以考虑逗号文件.csv,excell可直接读取 webform我是直接写入datagrid里,输出时利用html流写execl进行execl文件输出. 不好意思,我没说清楚,是 winformto:UniqueWei() 用office进行开发,不装office似乎不能运行=================已经安装了,能个段代码吗,我对excel 开发没经验。。可以考虑逗号文件.csv,excell可直接读取============================这样估计我把数据从dataset中保存到.csv里还是很麻烦 你参考一下下面的:http://topic.csdn.net/t/20051110/15/4384811.html此外,用Google应该很容易找到office连接的内容 或者看看这个:将DataView中的数据按照一定格式存到Excel文件当中。正文:一、首先要引用一个Excel的组件,我一开始是在Office XP下尝试的,不成功,后来把XP给干掉,装2k,就成功了,所以这里分享的是Office 2k下引用相关组件来实现功能的,在工程中引用COM标签中的MicrosoftExcel 9.0 Object Library,添加成功后,引用中会多出三个引用项:Excel、Office、VBIDE。二、具体代码。using System;using System.Data;using Excel;using System.IO;namespace Test.ExcelCom{/// <summary>/// 将DataView中的数据导入Excel文件中/// 作者:Rexsp/// 创建:2004-4-4/// </summary>public class OutputExcel{#region 私有成员/// <summary>/// 数据的DataView/// </summary>private DataView dv=null;/// <summary>/// 表格标题/// </summary>private string title=null;/// <summary>/// 输出文件路径/// </summary>private string outFilePath=null;/// <summary>/// 输入文件名/// </summary>private string inputFilePath=null;#endregion#region 公共属性/// <summary>/// 数据的DataView/// </summary>public DataView DV{set{dv=value;}}/// <summary>/// 表格标题/// </summary>public string Title{set{title=value;}get{return title;}}/// <summary>/// 输出文件路径/// </summary>public string OutFilePath{set{outFilePath=value;}get{return outFilePath;}}/// <summary>/// 输入文件路径/// </summary>public string InputFilePath{set{inputFilePath=value;}get{return inputFilePath;}}#endregion#region 构造函数public OutputExcel(){}public OutputExcel(DataView dv,string title){//// TODO: 在此处添加构造函数逻辑//}#endregion#region 公共方法public void CreateExcel(){int rowIndex=4;//行起始坐标int colIndex=1;//列起始坐标ApplicationClass myApp=null;Workbook myBook=null;Worksheet mySheet=null;//如果文件不存在,则将模板文件拷贝一份作为输出文件//这里如果通过File.Create来创建文件是不行的,因为xls//的空文件也有固定的格式,跟文本不一样的,也许有其它//通过程序直接生成excel的方法,大家可以尝试尝试的if(!File.Exists(outFilePath)){File.Copy(inputFilePath,outFilePath,true);}myApp= new ApplicationClass();myApp.Visible=false;object oMissiong=System.Reflection.Missing.Value;myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong);myBook=myApp.Workbooks[1];mySheet=(Worksheet)myBook.ActiveSheet;////取得标题//foreach(DataColumn col in dv.Table.Columns){colIndex++;mySheet.Cells[4,colIndex] = col.ColumnName;mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐}////取得表格中的数据//foreach(DataRowView row in dv){rowIndex ++;colIndex = 1;foreach(DataColumn col in dv.Table.Columns){colIndex ++;if(col.DataType == System.Type.GetType("System.DateTime")){mySheet.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐}elseif(col.DataType == System.Type.GetType("System.String")){mySheet.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐}else{mySheet.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();}}}////加载一个合计行//int rowSum = rowIndex + 1;int colSum = 2;mySheet.Cells[rowSum,2] = "合计";mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;////设置选中的部分的颜色//mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种////取得整个报表的标题//mySheet.Cells[2,2] = title;////设置整个报表的标题格式//mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold = true;mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size = 22;////设置报表表格为最适应宽度//mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();////设置整个报表的标题为跨列居中//mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;////绘制边框//mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle = 1;mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗myBook.Save();;myBook.Close( true,outFilePath,true);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);GC.Collect();}#endregion}}一点说明:操作Excel的时候,可能会发生Excel进程被锁定,无法退出,解决方法是在保存完并关闭myBook(工作簿)后,别关闭Excel进程(//myApp.Quit();)。这样的结果是服务器上始终有一个Excel的进程。可能会出现asp_net用户操作Excel的权限不够,配置Dcom。运行Dcomcnfg.exe,找到Excel应用程序,配置其属性,身份验证级别选"无",身份标识选"交互式用户",安全性页面,启动和访问均给everyone。注意:查看当前进程中是否有Winword进程存在,如果有且不能被结束,那么重启动计算机。再次运行你的代码即OK。这样以后就不会出现权限不够的情况了。三、调用#region 测试ExcelQuickItemCollection qic =new QuickItemCollection();qic.GetAllInfo();DataView dv= new DataView();DataTable dt = new DataTable("Excel");dt.Columns.Add("ID",System.Type.GetType("System.String"));dt.Columns.Add("ItemName",System.Type.GetType("System.String"));int qicCount=qic.Count;for(int i=0;i<qicCount;i++){DataRow dr= dt.NewRow();dr[0] = qic[i].ID;dr[1] = qic[i].ItemName;dt.Rows.Add(dr);}OutputExcel ope = new OutputExcel();ope.DV=dt.DefaultView;ope.Title="测试生成Excel";ope.InputFilePath=Server.MapPath("Sample.xls");ope.OutFilePath=Server.MapPath("Test.xls");ope.CreateExcel();#endregion 求大神!webservice的客户端程序如何打包 谁能翻译一下下面的文字 如何让窗口一直在最高层? socket长连接 1秒50帧数据 xml格式传输 丢帧 如何在委托事件的方法中找到委托事件源? 有谁做过语音对比的东西,最好有什么组件可以快速开发的? 如何在右击事件的时候同时产生左击事件 2个winform 程序 有可能传控件吗 急!关于短信开发,请大家帮忙!100分! 奇怪:我的DataSet怎么对DataRelation不感冒? TextBox边框颜色问题,高手指点 Remoting是可以像SOCKET一样,任何一方的断开都会发送信息通知对方?
用office进行开发,不装office似乎不能运行
=================
已经安装了,能个段代码吗,我对excel 开发没经验。。可以考虑逗号文件.csv,excell可直接读取
============================
这样估计我把数据从dataset中保存到.csv里还是很麻烦
http://topic.csdn.net/t/20051110/15/4384811.html此外,用Google应该很容易找到office连接的内容
将
DataView中的数据按照一定格式存到Excel文件当中。
正文:
一、首先要引用一个Excel的组件,我一开始是在Office XP下尝试的,不
成功,后来把XP给干掉,装2k,就成功了,所以这里分享的是Office 2k下
引用相关组件来实现功能的,在工程中引用COM标签中的Microsoft
Excel 9.0 Object Library,添加成功后,引用中会多出三个引用项:
Excel、Office、VBIDE。二、具体代码。
using System;
using System.Data;
using Excel;
using System.IO;
namespace Test.ExcelCom
{
/// <summary>
/// 将DataView中的数据导入Excel文件中
/// 作者:Rexsp
/// 创建:2004-4-4
/// </summary>
public class OutputExcel
{
#region 私有成员
/// <summary>
/// 数据的DataView
/// </summary>
private DataView dv=null;
/// <summary>
/// 表格标题
/// </summary>
private string title=null;
/// <summary>
/// 输出文件路径
/// </summary>
private string outFilePath=null;
/// <summary>
/// 输入文件名
/// </summary>
private string inputFilePath=null;
#endregion
#region 公共属性
/// <summary>
/// 数据的DataView
/// </summary>
public DataView DV
{
set{dv=value;}
}
/// <summary>
/// 表格标题
/// </summary>
public string Title
{
set{title=value;}
get{return title;}
}
/// <summary>
/// 输出文件路径
/// </summary>
public string OutFilePath
{
set{outFilePath=value;}
get{return outFilePath;}
}
/// <summary>
/// 输入文件路径
/// </summary>
public string InputFilePath
{
set{inputFilePath=value;}
get{return inputFilePath;}
}
#endregion#region 构造函数
public OutputExcel()
{
}
public OutputExcel(DataView dv,string title)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#endregion
#region 公共方法
public void CreateExcel()
{
int rowIndex=4;//行起始坐标
int colIndex=1;//列起始坐标
ApplicationClass myApp=null;
Workbook myBook=null;
Worksheet mySheet=null;
//如果文件不存在,则将模板文件拷贝一份作为输出文件
//这里如果通过File.Create来创建文件是不行的,因为xls
//的空文件也有固定的格式,跟文本不一样的,也许有其它
//通过程序直接生成excel的方法,大家可以尝试尝试的
if(!File.Exists(outFilePath))
{
File.Copy(inputFilePath,outFilePath,true);
}
myApp= new ApplicationClass();
myApp.Visible=false;
object oMissiong=System.Reflection.Missing.Value;
myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong,
oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong);
myBook=myApp.Workbooks[1];
mySheet=(Worksheet)myBook.ActiveSheet;//
//取得标题
//
foreach(DataColumn col in dv.Table.Columns)
{
colIndex++;
mySheet.Cells[4,colIndex] = col.ColumnName;
mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;
//设置标题格式为居中对齐
}
//
//取得表格中的数据
//
foreach(DataRowView row in dv)
{
rowIndex ++;
colIndex = 1;
foreach(DataColumn col in dv.Table.Columns)
{
colIndex ++;
if(col.DataType == System.Type.GetType("System.DateTime"))
{
mySheet.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
}
else
if(col.DataType == System.Type.GetType("System.String"))
{
mySheet.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
}
else
{
mySheet.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
}
}
}
//
//加载一个合计行
//
int rowSum = rowIndex + 1;
int colSum = 2;
mySheet.Cells[rowSum,2] = "合计";
mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
//
//设置选中的部分的颜色
//
mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();
mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
//
//取得整个报表的标题
//
mySheet.Cells[2,2] = title;
//
//设置整个报表的标题格式
//
mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold = true;
mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size = 22;
//
//设置报表表格为最适应宽度
//
mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();
mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();
//
//设置整个报表的标题为跨列居中
//
mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();
mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;
//
//绘制边框
//
mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗
mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗
mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗
mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗
myBook.Save();;
myBook.Close( true,outFilePath,true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);
GC.Collect();}
#endregion
}}
一点说明:操作Excel的时候,可能会发生Excel进程被锁定,无法退
出,解决方法是在保存完并关闭myBook(工作簿)后,别关闭Excel进
程(//myApp.Quit();)。这样的结果是服务器上始终有一个Excel的
进程。可能会出现asp_net用户操作Excel的权限不够,配置Dcom。运
行Dcomcnfg.exe,找到Excel应用程序,配置其属性,身份验证级别
选"无",身份标识选"交互式用户",安全性页面,启动和访问均给
everyone。注意:查看当前进程中是否有Winword进程存在,如果有且
不能被结束,那么重启动计算机。再次运行你的代码即OK。这样以后
就不会出现权限不够的情况了。
三、调用
#region 测试Excel
QuickItemCollection qic =new QuickItemCollection();
qic.GetAllInfo();
DataView dv= new DataView();
DataTable dt = new DataTable("Excel");
dt.Columns.Add("ID",System.Type.GetType("System.String"));
dt.Columns.Add("ItemName",System.Type.GetType("System.String"));
int qicCount=qic.Count;
for(int i=0;i<qicCount;i++)
{
DataRow dr= dt.NewRow();
dr[0] = qic[i].ID;
dr[1] = qic[i].ItemName;
dt.Rows.Add(dr);
}
OutputExcel ope = new OutputExcel();
ope.DV=dt.DefaultView;
ope.Title="测试生成Excel";
ope.InputFilePath=Server.MapPath("Sample.xls");
ope.OutFilePath=Server.MapPath("Test.xls");
ope.CreateExcel();
#endregion