我需要将日期,标题和说明导出到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(), @"<[^>]+>| ", "").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导出
答案 0 :(得分:0)
你可以用字符串替换它
str.replace(/&/g, "&").replace(/</g, "<").replace(/>/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, @"<[^>]+>| ", "").Trim();
string noHTMLNormalised = Regex.Replace(noHTML, @"\s{2,}", " ");
ws.Cell("C" + rowIndex).Value = noHTMLNormalised;