Экспорт в 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(), @"<[^>]+>| ", "").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(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
Решены обе проблемы с помощью следующего кода
Сначала с помощью 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, @"<[^>]+>| ", "").Trim();
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
ws.Cell("C" + rowIndex).Value = noHTMLNormalised;