2010-03-04 50 views
2

如何使導出的.xls文件編輯如何使導出的.xls文件編輯

THID代碼使.xls文件只讀

:(

using System; 
using System.Data; 
using System.Configuration; 
using System.IO; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 


public class GridViewExportUtil 
{ 
    /// <param name="fileName"></param> 
    /// <param name="gv"></param> 
    public static void Export(string fileName, GridView gv) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format("content-disposition", "attachment; filename={0}", fileName)); 
     HttpContext.Current.Response.ContentType = "application/ms-excel"; 
     HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     HttpContext.Current.Response.Charset = System.Text.Encoding.Unicode.EncodingName; 
     HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode; 
     HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); 


     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 
       // Create a form to contain the grid 
       Table table = new Table(); 

       // add the header row to the table 
       if (gv.HeaderRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
        table.Rows.Add(gv.HeaderRow); 
       } 

       // add each of the data rows to the table 
       foreach (GridViewRow row in gv.Rows) 
       { 
        GridViewExportUtil.PrepareControlForExport(row); 
        table.Rows.Add(row); 
       } 

       // add the footer row to the table 
       if (gv.FooterRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.FooterRow); 
        table.Rows.Add(gv.FooterRow); 
       } 

       // render the table into the htmlwriter 
       table.RenderControl(htw); 

       // render the htmlwriter into the response 
       HttpContext.Current.Response.Write(sw.ToString()); 
       HttpContext.Current.Response.End(); 
      } 
     } 
    } 

    /// <summary> 
    /// Replace any of the contained controls with literals 
    /// </summary> 
    /// <param name="control"></param> 
    private static void PrepareControlForExport(Control control) 
    { 
     for (int i = 0; i < control.Controls.Count; i++) 
     { 
      Control current = control.Controls[i]; 
      if (current is LinkButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); 
      } 
      else if (current is ImageButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); 
      } 
      else if (current is HyperLink) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); 
      } 
      else if (current is DropDownList) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); 
      } 
      else if (current is CheckBox) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); 
      } 

      if (current.HasControls()) 
      { 
       GridViewExportUtil.PrepareControlForExport(current); 
      } 
     } 
    } 
} 

回答

2

你確定它是隻讀或者只是沒有顯示網格線(所以看上去只是一種只讀)?

真的是Excel是做這項工作的人,所以如果它是隻讀的,那麼我的方法來解決它會是至 (反向工程吧):

  1. 複製只讀版本的內容
  2. 創建一個新的Excel workbok和粘貼內容
  3. 確保新的工作簿正是你想要你的最後一個是
  4. 方式
  5. 保存新的Excel工作簿作爲HTML
  6. 比較的是HTML創先爭優剛剛創建的HTML應用程序正在生成

通常比較Excel創建的內容與您正在生成的內容將顯示問題。

相關問題