看了很多例子,还是弄不出来,希望哪位能给段代码。

解决方案 »

  1.   

    dataset有输出XML文本的GetXML方法,可以直接生成XML格式的string到文本文件。或者也可以用WriteXML方法直接写到指定文件中去。
      

  2.   

    那样是xml格式的,,我想直接要里面的数据,不包括xml的框架,和格式。
      

  3.   

    webform很好实现,winform一般调用office进行开发,不装office似乎不能运行,尚无好办法。如果数据不是很复杂的话,可以考虑逗号文件.csv,excell可直接读取
      

  4.   

    webform我是直接写入datagrid里,输出时利用html流写execl进行execl文件输出.
      

  5.   

    不好意思,我没说清楚,是 winformto:UniqueWei() 
    用office进行开发,不装office似乎不能运行
    =================
    已经安装了,能个段代码吗,我对excel 开发没经验。。可以考虑逗号文件.csv,excell可直接读取
    ============================
    这样估计我把数据从dataset中保存到.csv里还是很麻烦
      

  6.   

    你参考一下下面的:
    http://topic.csdn.net/t/20051110/15/4384811.html此外,用Google应该很容易找到office连接的内容
      

  7.   

    或者看看这个:

    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