string GenerateCsv() { var r = new StringBuilder(); // Header row: if (!ExcludeHeader) { r.AppendLine(Columns.Select(c => EscapeCsvValue(c.HeaderText)).ToString(",")); } // Data rows: foreach (var row in DataRows) { var fields = new List <string>(); for (var i = 0; i < row.Length; i++) { var cell = row[i]; var column = Columns[i]; var value = cell?.ToString().OrEmpty(); foreach (var filter in DataFilters) { value = filter.Apply(column, value); } if (column.DataType == "Link") { if (value.IsEmpty()) { fields.Add(value); } else { var parts = value.Split(LinkSeperator.ToCharArray().Single()); if (parts.Length != 2) { throw new Exception("Invalid Link value for ExporttoExcel: " + value); } fields.Add(parts[0] + ": " + parts[1]); } } else { fields.Add(value); } } r.AppendLine(fields.Select(f => EscapeCsvValue(f)).ToString(",")); } return(r.ToString()); }
string GenerateDataRows() { var r = new StringBuilder(); foreach (var row in DataRows) { r.AppendLine(@"<Row>"); for (int i = 0; i < row.Length; i++) { var cell = row[i]; var column = Columns[i]; var cellInfo = cell as ExcelCell; var value = cell?.ToString().OrEmpty(); if (column.DataType == "Link") { if (value.IsEmpty()) { r.AppendLine("<Cell><Data ss:Type=\"String\"></Data></Cell>"); } else { var parts = value.Split(LinkSeperator.ToCharArray().Single()); if (parts.Length != 2) { throw new Exception("Invalid Link value for ExporttoExcel: " + value); } r.AddFormattedLine("<Cell ss:StyleID=\"linkStyle\" ss:HRef=\"{0}\"><Data ss:Type=\"String\">{1}</Data></Cell>", parts[1].XmlEncode(), parts[0].XmlEncode()); } } else { if (value.HasValue()) { value = value.Remove("\r").XmlEncode().Replace("\n", " "); } r.Append("<Cell"); var style = cellInfo?.Style ?? column.RowStyle; r.AppendFormat(" ss:StyleID=\"{0}\"", style.GetStyleId()); if (column.Formula.HasValue()) { r.AppendFormat(" ss:Formula=\"{0}\"", column.Formula); } r.Append(">"); if (value.HasValue()) { r.AddFormattedLine("<Data ss:Type=\"{0}\">{1}</Data>", column.DataType, value); } r.AppendLine("</Cell>"); } } r.AppendLine("</Row>"); } return(r.ToString()); }