最近做"试卷生成系统"在快要完工阶段,遇到这样一个问题。  
 
经过组卷后,需得用asp.net要生成一张(word文档)试卷(试卷上的内容为动态读取数据库试题,且试尺寸跟现实生活中尺寸一样,因为要支持在线打印吗)。  
 
试卷上的排版为不规则排版,还有试卷左边那个文字横着写的。请问怎样用asp.net在线导出word文档呀我在网上查了好多资料,写得都很模糊请高手帮我解决一下。。谢谢了。  
 
另有个问题是我随机生成的题有可能文字不一样多。这样的话。试卷上的排版应该有个算法吧。。请高手指点。。

解决方案 »

  1.   

    <%@ Page language="c#" Src="datagrid2.aspx.cs" AutoEventWireup="false" Inherits="DataGrid_import_WordExcel.WebForm1" %> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
    <HTML> 
     <HEAD> 
      <title>OutPutExcel</title> 
     </HEAD> 
    <link rel="stylesheet" href="Style.css" type="text/css">
     <body> 
      <form width="120%" id="Form1" method="post" runat="server"> 
      <table width="120%"><tr><td>
       <asp:datagrid 
       id="DataGrid1" 
       bgcolor="#efefef" 
       HeaderStyle-BackColor="#718BD6"
       HeaderStyle-ForeColor="#FFFF66"
       AlternatingItemStyle-BackColor="#FFFFFF"
       itemstyle-backcolor="#FFFFFF"
       runat="server">
       <ItemStyle HorizontalAlign="center" Height="20"></ItemStyle>
        <Columns>     </Columns> 
       </asp:datagrid> 
       </td></tr></table>
       <P>  
        <asp:button id="BtnImportWord" runat="server" Text="轉到WORD"></asp:button></P> 
      </form> 
     </body> 
    </HTML>
    -------------------
    using System; 
    using System.Collections; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Web; 
    using System.Web.SessionState; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.HtmlControls; 
    using System.IO; 
    using System.Data.SqlClient ; 
    using System.Text; 
    using System.Configuration;namespace DataGrid_import_WordExcel 
    { public class WebForm1 : System.Web.UI.Page 

    protected System.Web.UI.WebControls.Button BtnImportWord; 
    protected System.Web.UI.WebControls.Button Btn_Import_Excel; 
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    public DataRow dr;
    private DataSet myDS =new DataSet();private void Page_Load(object sender, System.EventArgs e) 

    Data_Load();

    #region Web 敦极扢數?汜傖腔測鎢 
    override protected void OnInit(EventArgs e) 

    InitializeComponent(); 
    base.OnInit(e); 
    } private void InitializeComponent() 

    this.Btn_Import_Excel.Click += new System.EventHandler(this.Btn_Import_Excel_Click); 
    this.Load += new System.EventHandler(this.Page_Load); 

    #endregion 
    private void ExportDataGrid(string FileType, string FileName) //植DataGrid絳堤 

    Response.Charset = "GB2312"; 
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(FileName,Encoding.UTF8).ToString()); 
    Response.ContentType = FileType; 
    this.EnableViewState =false; 
    StringWriter tw = new StringWriter(); 
    HtmlTextWriter hw =new HtmlTextWriter(tw); 
    DataGrid1.RenderControl(hw); 
    Response.Write(tw.ToString()); 
    Response.End(); 

    private void Data_Load() 
      {    SqlConnection myConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["data"]); 
       SqlCommand cmd=new SqlCommand("page2",myConnection);
       cmd.CommandType=CommandType.StoredProcedure;
    .
    .
    .
       myConnection.Open();    DataSet ds=new DataSet();
       SqlDataAdapter da=new SqlDataAdapter();
       da.SelectCommand=cmd;
       da.Fill(ds);
       DataGrid1.DataSource=ds; 
       DataGrid1.DataBind(); 
      }
    DataView CreateDataSource()   
    {   
    string nowDSN=ConfigurationSettings.AppSettings["data"];
        SqlConnection myConnection=new SqlConnection(nowDSN); SqlCommand cmd=new SqlCommand("page2",myConnection);
                cmd.CommandType=CommandType.StoredProcedure;
    .
    .
    .
        DataSet ds=new DataSet();
    SqlDataAdapter da=new SqlDataAdapter();
    da.SelectCommand=cmd;
    da.Fill(ds);
    DataGrid1.DataSource=ds;
    DataGrid1.DataBind();
    return ds.Tables["pur"].DefaultView;    
                myConnection.Close();            
                Page.DataBind();


    void DataBind()   
    {   
    DataView source=CreateDataSource();   
    if(!IsPostBack)   
    {   
    }   
    DataGrid1.DataSource = source;    
    DataGrid1.DataBind();    

    private void BtnImportWord_Click(object sender, System.EventArgs e) 

    ExportDataGrid("application/ms-word", "Word.doc");


    }