Экспорт в Excel Экспорт преобразует специальные символы в HTML-коды.

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

один специальные символы, такие как '," другие персонажи превращаются в ‘& так далее....

Все эти проблемы связаны с колонкой "Описание", в которой хранится текст в формате HTML. Ниже приведен пример текста в различных форматах

Актуальный текст"Открытие гольф-сезона" стало официальным открытием сезона в гольф-клубе, который начнется 10 марта 2018 года.

Текст хранится в базе данных MS SQL SERVER

"Открытие гольф-сезона" ознаменовало официальное открытие в Golf Club& Season, которое начнется 10 марта и 2018 года.

Текст экспортирован в Excel "Открытие гольф-сезона" ознаменовало официальное открытие в Golf Club& Season, которое начнется 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 ответа

Вы можете заменить его в строке

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

Решены обе проблемы с помощью следующего кода

Сначала с помощью HTML HttpUtility.HtmlDecodestring 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;
Другие вопросы по тегам