如何把Web页面上的某一个DataGrid对应的DataSet中的数据导出到一个Word文件中?
哪位做过指点指点,20分奉上。

解决方案 »

  1.   

    哈哈!我做过winform,不过原理都是一样的!你要用到office2003的com.
    word的对象模型你可以早word2003上查到!
      

  2.   

    你能不能把winform的代码贴出来让我研究研究?
      

  3.   

    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;316383
    vb.net的例子
      

  4.   

    最近刚好作了个这方面的:这是在硬盘上生成WORD文档
    private static void WriteDataGridToWord(string fileName, string tTitle, DataGrid dg, string[] invisibleColumns)
    {
    if (invisibleColumns != null)
    {
    //隐藏 invisibleColumns[] 这些列
    for (int i = 0; i < invisibleColumns.Length; i++)
    {
    dg.Columns[Convert.ToInt32(invisibleColumns[i])].Visible = false;
    }
    } //要显示的列数
    int dgColVisibleCount = 0;
    for (int i = dg.Columns.Count - 1; i >= 0 ; i--)
    {
    if (dg.Columns[i].Visible == true)
    {
    dgColVisibleCount++;
    }
    } Word.Application wordApp = new Word.ApplicationClass();
    Word.Document myDoc;
    Word.Table wordTable; object missing = System.Reflection.Missing.Value; int rowIndex, colIndex;
    rowIndex = 1;
    colIndex = 0; myDoc = wordApp.Documents.Add(ref missing, ref missing,ref missing, ref missing);
    myDoc.Activate(); //标题
    wordApp.Selection.TypeText(tTitle);
    wordApp.Selection.TypeParagraph(); //记录数
    wordApp.Selection.TypeText("记录总数:" + dg.Items.Count);
    wordApp.Selection.TypeParagraph(); //数据表格
    Object start = wordApp.Selection.Start;
    Object end = wordApp.Selection.End; wordTable = myDoc.Tables.Add(myDoc.Range(ref start, ref end), 
    dg.Items.Count + 1, 
    dgColVisibleCount, 
    ref missing,
    ref missing); //列标题
    foreach (DataGridColumn col in dg.Columns)
    {
    if (col.Visible == true)
    {
    colIndex++;
    wordTable.Cell(1, colIndex).Range.InsertAfter(col.HeaderText);
    }
    }
    foreach (DataGridItem item in dg.Items)
    {
    rowIndex++;
    colIndex = 0; for (int j = 0; j < dg.Columns.Count; j++)
    {
    if (dg.Columns[j].Visible == true)
    {
    colIndex++;
    wordTable.Cell(rowIndex, colIndex).Range.InsertAfter(item.Cells[j].Text);
    }
    }
    } wordTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
    wordTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
    wordApp.Visible = true; object wordFileName = fileName; myDoc.SaveAs(ref wordFileName, ref missing,ref missing,ref missing,ref missing,
    ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,
    ref missing,ref missing,ref missing,ref missing,ref missing); //关闭myWordDoc文档对象 
    myDoc.Close(ref missing, ref missing, ref missing); 
    //关闭wordApp组件对象 
    wordApp.Application.Quit(ref missing, ref missing, ref missing);  if (invisibleColumns != null)
    {
    //恢复 invisibleColumns[] 这些列的显示
    for (int i = 0; i < invisibleColumns.Length; i++)
    {
    dg.Columns[Convert.ToInt32(invisibleColumns[i])].Visible = true;
    }
    }
    }
      

  5.   

    这是直接将DataGrid 以WORD文档的形式 输出到客户端,不用生成WORD的实际物理文件 private static void WriteDataGridToHttpStreamWord(System.Web.UI.Page page, string title, DataGrid dg, string fileName, string[] invisibleColumns, System.Text.Encoding encoding)
    {
    if (invisibleColumns != null)
    {
    //隐藏 invisibleColumns[] 这些列
    for (int i = 0; i < invisibleColumns.Length; i++)
    {
    dg.Columns[Convert.ToInt32(invisibleColumns[i])].Visible = false;
    }
    } HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
    page.Response.ContentType = "application/vnd.ms-word"  ;//指定生成文件的类型
    HttpContext.Current.Response.Charset = "";
    if (encoding != null)
    HttpContext.Current.Response.ContentEncoding = encoding;
    else
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; dg.Page.EnableViewState = false; System.IO.StringWriter tw=new  System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter hw=new System.Web.UI.HtmlTextWriter(tw); //标题 
    title += "<p></p><p></p>"; //总记录数requestEncoding
    string totalCount = "<p>总记录数:" + dg.Items.Count + "</p>";// + HttpContext.Current.Response.ContentEncoding.EncodingName dg.RenderControl(hw);
    HttpContext.Current.Response.Write(title + totalCount + tw.ToString());//写入word文件
    HttpContext.Current.Response.End(); if (invisibleColumns != null)
    {
    //恢复 invisibleColumns[] 这些列
    for (int i = 0; i < invisibleColumns.Length; i++)
    {
    dg.Columns[Convert.ToInt32(invisibleColumns[i])].Visible = true;
    }
    } }
      

  6.   

    一、定义文档类型、字符编码      Response.Clear();    Response.Buffer= true;    Response.Charset="utf-8";      //下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开    //filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm      Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls");    Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");      //Response.ContentType指定文件类型 可以为application/ms-excel    application/ms-word    application/ms-txt    application/ms-html    或其他浏览器可直接支持文档     Response.ContentType = "application/ms-excel";    this.EnableViewState = false;     二、定义一个输入流      System.IO.StringWriter oStringWriter = new System.IO.StringWriter();    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);     三、将目标数据绑定到输入流输出      this.RenderControl(oHtmlTextWriter);       //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件      Response.Write(oStringWriter.ToString());    Response.End();     总结:本例程在Microsoft Visual Studio .NET 2003平台下测试通过,适用于C#和VB,当采用VB的时候将 this 关键字改成 me 。