导出到Excel导出会将特殊字符转换为HTML代码

时间:2018-02-04 15:25:48

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

我需要将日期,标题和说明导出到excel文件,此时我正面临着导出excel文件的两个问题。

一个特殊字符,例如',"和其他字符变成‘ &等等。

所有这些问题都与Description列有关,后者以HTML格式存储文本。以下是各种格式的文本示例

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

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

'高尔夫季开幕'标志着高尔夫俱乐部正式开幕。将于3月10日开始的季节& 2018。

导出到Excel的文字 “高尔夫季开幕”标志着高尔夫俱乐部正式开幕。将于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导出

2 个答案:

答案 0 :(得分:0)

你可以用字符串替换它

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

答案 1 :(得分:0)

解决了以下代码的问题

首先使用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;