【问题标题】:Exporting to excel export converts special characters to HTML codes导出到 excel 导出将特殊字符转换为 HTML 代码
【发布时间】:2019-02-06 04:15:17
【问题描述】:

我需要将日期、标题和描述导出到 excel 文件,现在我面临两个导出 excel 文件的问题。

一个特殊字符,例如'," 另一个字符变成‘ & 等等......

所有这些问题都与描述列有关,该列以 HTML 格式存储文本。下面是各种格式的文本示例

实际文字 “高尔夫赛季开幕”标志着 at Golf Club 的正式开幕,赛季将于 2018 年 3 月 10 日开始。

存储在数据库 MS SQL SERVER 中的文本

“高尔夫赛季开幕”标志着 at Golf Club & Season 于 2018 年 3 月 10 日和 2018 年 3 月 10 日和赛季正式开幕。

文本导出到 Excel “高尔夫赛季开幕”标志着高尔夫俱乐部和赛季的正式开幕,将于 2018 年 3 月 10 日和 2018 年开始。

我正在使用以下代码创建 excel 文件,但我面临上述问题。

如何在不解码文本的情况下存储文本是 excel 应该以文本格式存储并且所有特殊字符都可以正确显示而没有任何问题

 var wb = new XLWorkbook();
 var ws = wb.Worksheets.Add("Calendar");

 DataTable dt = ds.Tables[0];
            var rowIndex = 2; // 1 = header row
            foreach (DataRow row in dt.Rows)
            {
                ws.Cell("A" + rowIndex).Value = row["Year"];
                ws.Cell("B" + rowIndex).Value = row["Title"];

                string noHTML = Regex.Replace(row["Description"].ToString(), @"<[^>]+>|&nbsp;", "").Trim();
                string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
                ws.Cell("C" + rowIndex).Value = noHTMLNormalised;

                rowIndex++;
            }

            //// From worksheet
            var rngTable = ws.Range("A1:C" + rowIndex);

            var rngHeader = ws.Range("A1:C1");

            var rngYear = ws.Range("A2:A" + rowIndex);

            //var rngDate = ws.Range("B2:B" + rowIndex);

            var rngTitle = ws.Range("B2:D" + rowIndex);

            var rngDesc = ws.Range("C2:C" + rowIndex);

            rngHeader.Style.Fill.SetBackgroundColor(XLColor.CoolGrey);
            rngHeader.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            rngHeader.Style.Font.Bold = true;
            rngHeader.Style.Font.FontColor = XLColor.White;

           // rngYear.Style.Fill.SetBackgroundColor(XLColor.CoolGrey);
            rngYear.Style.Font.Bold = true;
            rngYear.Style.Font.FontColor = XLColor.Black;
            rngYear.Style.Alignment.Indent = 1;


            //rngDate.Style.DateFormat.Format = "MM/DD/YYYY";
            //rngDate.Style.Alignment.Indent = 10;

            rngDesc.Style.Alignment.SetWrapText();

            ws.RangeUsed().Style.Border.OutsideBorder = XLBorderStyleValues.Thick;

            var col3 = ws.Column("C");
            //col3.Style.Fill.BackgroundColor = XLColor.Red;
            col3.Width = 100;

            ws.Columns().AdjustToContents();

            string fileName;

            fileName = "Golf_Calendat.xlsx"; 

            wb.SaveAs(HttpContext.Current.Server.MapPath("../excel/" + fileName));

解决上述问题的任何帮助,以及我们是否可以将文本包装在描述列中以及行是否可以根据包装的文本采用自动高度。

顺便提一下,我正在使用using Excel = Microsoft.Office.Interop.Excel; 进行 excel 导出

【问题讨论】:

    标签: c# excel office-interop excel-interop


    【解决方案1】:

    你可以用字符串替换它

    str.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">");
    

    【讨论】:

      【解决方案2】:

      用下面的代码解决了这两个问题

      首先使用 HTML HttpUtility.HtmlDecode string htmlDec = HttpUtility.HtmlDecode(row["Description"].ToString());

      ws.Column(2).AdjustToContents(5, 7); 的文本换行问题

              string htmlEnc = HttpUtility.HtmlEncode(row["Description"].ToString());
              string htmlDec = HttpUtility.HtmlDecode(row["Description"].ToString());
      
      
              string noHTML = Regex.Replace(htmlDec, @"<[^>]+>|&nbsp;", "").Trim(); 
      
              string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
      
      
              ws.Cell("C" + rowIndex).Value = noHTMLNormalised;
      

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 2016-05-04
        相关资源
        最近更新 更多