public HttpResponseMessage ExportFormData([FromBody] FormViewExportRequest request) { var entries = this.dataProvider.GetEntries(request.FormId, request.StartDate, request.EndDate); string formName = "sample"; string fileName = string.Format("Export_{0}_{1}.csv", formName, DateTime.Now.ToString("yyyyMMdd_HHmmss")); Stream stream = null; if (request.ExportOption.Equals("excel", StringComparison.OrdinalIgnoreCase)) { stream = this.exportService.CreateExcel(request, entries.ToList()); stream.Seek(0, SeekOrigin.Begin); } else { stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(CreateReport(request, entries.ToList())); writer.Flush(); stream.Position = 0; } HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileName }; return(result); }
/// <summary> /// Exports to CSV. /// </summary> /// <param name="request">The request.</param> /// <param name="entries">The entries.</param> /// <returns></returns> public string ExportToCsv(FormViewExportRequest request, List <FormEntry> entries) { StringBuilder sb = new StringBuilder(); string headerRow = string.Empty; headerRow = string.Join(",", request.Fields.ToArray()); sb.AppendLine(headerRow); for (int k = 0; k < entries.Count; k++) { // Row Tag StringBuilder row = new StringBuilder(); for (int j = 0; j < request.Fields.Count; j++) { // Cell Tags var field = entries.ToList()[k].Fields.FirstOrDefault(t => t.FieldName == request.Fields[j]); string value = string.Empty; if (field == null) { if (request.Fields[j].Equals("Created")) { value = entries.ToList()[k].Created.ToString(); } else { value = "-"; } } else if (field.ValueType.Equals("System.Collections.Generic.List`1[Sitecore.ExperienceForms.Data.Entities.StoredFileInfo]", StringComparison.OrdinalIgnoreCase)) { if (field.Value.Contains(',')) { foreach (var file in field.Value.Split(',').Where(t => !string.IsNullOrEmpty(t))) { value += Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, file)); } } else { value = Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, field.Value)); } } else { value = field.Value; } row.Append(value); row.Append(","); } sb.AppendLine(row.ToString()); } return(sb.ToString()); }
/// <summary> /// Exports to XML. /// </summary> /// <param name="request">The request.</param> /// <param name="entries">The entries.</param> /// <returns>XML in string</returns> public string ExportToXml(FormViewExportRequest request, List <List <string> > entries) { var xDocument = new XDocument(); var root = new XElement("root"); foreach (var row in entries) { var entry = new XElement("entry"); for (int i = 0; i < request.Fields.Count; i++) { entry.Add(new XElement(request.Fields[i].Trim().Replace(" ", "").ToLower(), row[i])); } root.Add(entry); } xDocument.Add(root); return(xDocument.ToString()); }
/// <summary> /// Creates the excel. /// </summary> /// <param name="request">The request.</param> /// <param name="entries">The entries.</param> /// <returns></returns> public Stream CreateExcel(FormViewExportRequest request, List <FormEntry> entries) { int rowNumber = 1; MemoryStream excelStream = new MemoryStream(); using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(excelStream, SpreadsheetDocumentType.Workbook)) { var worksheetPart = this.CreateWorkSheet(spreadsheetDocument, "FormExport"); SheetData sheetData = new SheetData(); this.AddRow(sheetData, rowNumber++, request.Fields.ToArray(), new Dictionary <int, int>()); List <object> columnValues = new List <object>(); for (int k = 0; k < entries.Count; k++) { columnValues.Clear(); for (int j = 0; j < request.Fields.Count; j++) { // Cell Tags var field = entries.ToList()[k].Fields.FirstOrDefault(t => t.FieldName == request.Fields[j]); string value = string.Empty; if (field == null) { if (request.Fields[j].Equals("Created")) { value = entries.ToList()[k].Created.ToString(); } else { value = "-"; } } else if (field.ValueType.Equals("System.Collections.Generic.List`1[Sitecore.ExperienceForms.Data.Entities.StoredFileInfo]", StringComparison.OrdinalIgnoreCase)) { if (field.Value.Contains(',')) { foreach (var file in field.Value.Split(',').Where(t => !string.IsNullOrEmpty(t))) { value += Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, file)); } } else { value = Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, field.Value)); } } else { value = field.Value; } columnValues.Add(value); } this.AddRow(sheetData, rowNumber++, columnValues.ToArray(), new Dictionary <int, int>()); } worksheetPart.Worksheet.Append(sheetData); return(excelStream); } }
private string CreateReport(FormViewExportRequest request, List <FormEntry> entries) { string result = string.Empty; var response = new FormsViewerResponse(); response.Entries = new List <List <string> >(); foreach (var entry in entries) { List <string> rowData = new List <string>(); foreach (var header in request.Fields) { var field = entry.Fields.FirstOrDefault(t => t.FieldName == header); string value = string.Empty; if (field == null) { if (header.Equals("Created")) { value = entry.Created.ToString(); } else { value = "-"; } } else if (field.ValueType.Equals("System.Collections.Generic.List`1[Sitecore.ExperienceForms.Data.Entities.StoredFileInfo]", StringComparison.OrdinalIgnoreCase)) { if (field.Value.Contains(',')) { foreach (var file in field.Value.Split(',').Where(t => !string.IsNullOrEmpty(t))) { value += string.Format("<a target=\"_blank\" href=\"{0}\">Download</a><br>", Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, file))); } } else { value = string.Format("<a target=\"_blank\" href=\"{0}\">Download</a>", Sitecore.Web.WebUtil.GetFullUrl(string.Format(FileDownloadPattern, field.Value))); } } else { value = field.Value; } rowData.Add(value); } response.Entries.Add(rowData); } if (request.ExportOption.Equals("xml", StringComparison.OrdinalIgnoreCase)) { return(exportService.ExportToXml(request, response.Entries.ToList())); } else if (request.ExportOption.Equals("csv", StringComparison.OrdinalIgnoreCase)) { return(exportService.ExportToCsv(request, entries.ToList())); } return(result); }