Member 10192073 Ответов: 1

Невозможно удалить гиперссылку из динамического сгенерированного HTML-кода во время экспорта в excel


Я хочу удалить гиперссылку из динамического сгенерированного HTML-кода во время экспорта в excel. Я много пробовал гуглить, но все равно не мог найти решения. мой код таков

string CompanyName = string.Empty;
CompanyName = Session["CompanyName"].ToString();
CompanyName = CompanyName.Replace(" ", "_");
string FileName = CompanyName.Trim() + "-Weekly_CashFlow_Statement_" + 
    DateTime.Now.ToString("ddMMyyyyhhmmss") + ".xls";


HttpContext.Current.Response.AppendHeader(
    "Content-Disposition", 
    "attachment; filename=" + FileName);
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentType = "application/ms-excel";

this.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
tblCashFlow.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();


Что я уже пробовал:

Я перепробовал так много вещей через гугл, но до сих пор не мог этого сделать

protected void btnExportToExcel_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string CompanyName = string.Empty;
                CompanyName = Session["CompanyName"].ToString();
                CompanyName = CompanyName.Replace(" ", "_");
                string FileName = CompanyName.Trim() + "-Weekly_CashFlow_Statement_" + DateTime.Now.ToString("ddMMyyyyhhmmss") + ".xls";

                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/ms-excel";

                this.Page.EnableViewState = false;
                System.IO.StringWriter tw = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
                RemoveLink(tblCashFlow);
                tblCashFlow.RenderControl(hw);
                HttpContext.Current.Response.Write(tw.ToString());
                HttpContext.Current.Response.End();
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
        }


public void RemoveLink(System.Web.UI.HtmlControls.HtmlTable html)
       {
           try
           {
               foreach (System.Web.UI.HtmlControls.HtmlTableRow cell in html.Rows)
               {
                   //cell.CssClass = "";
                   for (int i = cell.Controls.Count - 1; i >= 0; i--)
                   {
                       Control control = cell.Controls[i];
                       if (control.GetType() == typeof(System.Web.UI.HtmlControls.HtmlTableCell))
                       {
                           string str = ((System.Web.UI.HtmlControls.HtmlTableCell)(control)).ID;
                           int startind = str.IndexOf('>');
                           if (startind > 0)
                           {
                               int endindex = str.LastIndexOf("</a>");
                               int length = endindex < 0 ? 1 : endindex - startind;
                               str = str.Substring(startind + 1, length - 1);
                               cell.Controls.Remove(control);
                               System.Web.UI.LiteralControl ctrl = new System.Web.UI.LiteralControl();
                               ctrl.Text = str;
                               cell.Controls.Add(ctrl);
                           }
                           else
                           {
                               cell.Controls.Remove(control);
                               System.Web.UI.LiteralControl ctrl = new System.Web.UI.LiteralControl();
                               ctrl.Text = str;
                               cell.Controls.Add(ctrl);
                           }
                       }
                   }
               }
           }
           catch (Exception ex)
           {

           }
       }

Kornfeld Eliyahu Peter

Может быть, Excel повторно создает гиперссылку при открытии файла?
Попробуйте экспортировать в CSV и посмотреть, как Excel справляется с этим...

1 Ответов

Рейтинг:
5

Member 10192073

Привет,
Я только что сменил свой код с

HttpContext.Current.Response.Write(tw.ToString());
к
HttpContext.Current.Response.Write(Regex.Replace(tw.ToString(), "</?(a|A).*?>", ""));
и это прекрасно работает для меня