Hi, I'm using the Spread Stream Processing to generate an excel file with 93 columns. All the columns are formatted as strings with an average size of approximately 10-20 characters. I implemented this feature because I need to create excel files of approximately 60k - 80k rows. Currently, I receive an exception when exporting data with 695 rows or more.
This is the exception I receive:
Data: System.Collections.ListDictionaryInternalMessage: The Writer is closed or in error state.Source: System.Xml Stack Trace: at System.Xml.XmlWellFormedWriter.AdvanceState(Token token) at System.Xml.XmlWellFormedWriter.WriteEndElement() at Telerik.Documents.SpreadsheetStreaming.ImportExport.Core.ConsecutiveElementBase.EndWriteElement() at Telerik.Documents.SpreadsheetStreaming.ImportExport.Core.ConsecutiveElementBase.EnsureWritingEnded() at Telerik.Documents.SpreadsheetStreaming.ImportExport.Core.ConsecutiveElementBase.EnsureWritingEnded() at Telerik.Documents.SpreadsheetStreaming.ImportExport.Core.ConsecutivePartWriterBase`1.EndWrite() at Telerik.Documents.SpreadsheetStreaming.ImportExport.Core.ConsecutivePartWriterBase`1.CompleteWriteOverride() at Telerik.Documents.SpreadsheetStreaming.Core.EntityBase.Dispose(Boolean disposing) at Telerik.Documents.SpreadsheetStreaming.XlsxWorksheetExporter.DisposeOverride() at Telerik.Documents.SpreadsheetStreaming.Core.EntityBase.Dispose(Boolean disposing) at Telerik.Documents.SpreadsheetStreaming.Core.EntityBase.Dispose() at ERMgtProgram.Controllers.DigitalMerchandising.ViewAllExportController.<GenerateDocument>d__4.MoveNext() in C:\Users\erit12u\source\repos\ERMgtProgram\ERMgtProgram\Controllers\DigitalMerchandising\Import\ViewAllExportController.cs:line 107Target Site: Void AdvanceState(Token)
This is the code that generates the exception:
01.// When this code is called for the 695th time it throws an exception at line 202.using (IRowExporter rowExporter = worksheetExporter.CreateRowExporter())03.{04. rowExporter.SetHeightInPoints(rowHeight);05. 06. foreach(var column in template)07. {08. using (ICellExporter cellExporter = rowExporter.CreateCellExporter())09. {10. var val = entities[rowIndex].Properties.Keys.Contains(column.FinalColumnName) ? entities[rowIndex].Properties[column.FinalColumnName].StringValue : string.Empty;11. cellExporter.SetValue(val);12. cellExporter.SetFormat(normalFormat);13. }14. }15.}
This is all of my relevant source code:
001.[HttpPost]002.public async Task<ActionResult> GenerateDocument()003.{004. byte[] renderedBytes = null;005. var mimeType = "application / vnd.openxmlformats - officedocument.spreadsheetml.sheet"; ;006. var fileExtension = "xlsx";007. try008. {009. // retrieve database data010. var tableName = _dmP3AzTableName;011. // retrieve all entities in azure table012. CloudStorageAccount storageAccount = _storageConn.GetStorageConnection();013. CloudTable table = storageAccount.CreateCloudTableClient().GetTableReference(tableName);014. table.CreateIfNotExists();015. var entities = await AzureOperation.RetrieveEntitiesAsync(table, null, 1000);016. if (entities == null)017. {018. TempData["ErrorMessage"] = "Unable to retrieve records. Please try again later.";019. return RedirectToAction("Index", "ImportPhaseThree");020. }021. var template = new List<TemplateSupport>();022. using (var db = new DataMgtEntities())023. {024. template = db.TemplateSupports.OrderBy(p => p.PageOrder).ToList();025. }026. var headerRowHeight = 15;027. var columnHeaders = template.Select(p => p.ImportColumnName).ToArray();028. var columnWidthsList = new List<double>();029. foreach (var header in columnHeaders)030. {031. columnWidthsList.Add(25.0);032. }033. var columnWidths = columnWidthsList.ToArray();034. var rowHeight = 15;035. MemoryStream documentStream = new MemoryStream();036. //documentStream.SetLength(int.MaxValue/10);037. var selectedDocumentFormat = SpreadDocumentFormat.Xlsx;038. 039. using (IWorkbookExporter workbookExporter = SpreadExporter.CreateWorkbookExporter(selectedDocumentFormat, documentStream))040. {041. using (IWorksheetExporter worksheetExporter = workbookExporter.CreateWorksheetExporter("Phase 3 All Records"))042. {043. for (int i = 0; i < columnWidths.Length; i++)044. {045. using (IColumnExporter columnExporter = worksheetExporter.CreateColumnExporter())046. {047. columnExporter.SetWidthInCharacters(columnWidths[i]);048. }049. }050. 051. ExportHeaderRows(worksheetExporter, headerRowHeight, columnHeaders);052. SpreadCellFormat normalFormat = new SpreadCellFormat053. {054. FontSize = 11,055. VerticalAlignment = SpreadVerticalAlignment.Bottom,056. HorizontalAlignment = SpreadHorizontalAlignment.Left057. };058. 059. for (var rowIndex = 0; rowIndex < entities.Count(); rowIndex++)060. {061. using (IRowExporter rowExporter = worksheetExporter.CreateRowExporter())062. {063. rowExporter.SetHeightInPoints(rowHeight);064. 065. foreach(var column in template)066. {067. using (ICellExporter cellExporter = rowExporter.CreateCellExporter())068. {069. var val = entities[rowIndex].Properties.Keys.Contains(column.FinalColumnName) ?070. entities[rowIndex].Properties[column.FinalColumnName].StringValue : string.Empty;071. cellExporter.SetValue(val);072. cellExporter.SetFormat(normalFormat);073. }074. }075. }076. }077. }078. }079. renderedBytes = documentStream.ToArray();080. }081. catch (Exception ex)082. {083. TempData["ErrorMessage"] = "An exception occurred. Please see error log for details, and try again later.";084. ErrLog.LogError(ex, "ViewAllExport.GenerateDocument");085. return RedirectToAction("ViewAll", "ImportPhaseThreeExports");086. }087. return File(renderedBytes, mimeType, "Phase3AllData." + fileExtension);088.}089. 090.private void ExportHeaderRows(IWorksheetExporter worksheetExporter, int HeaderRowHeight, string[] ColumnHeaders)091.{092. try093. {094. using (IRowExporter rowExporter = worksheetExporter.CreateRowExporter())095. {096. rowExporter.SetHeightInPoints(HeaderRowHeight);097. 098. SpreadCellFormat format = new SpreadCellFormat099. {100. FontSize = 11,101. Fill = SpreadPatternFill.CreateSolidFill(new SpreadColor(122, 122, 122)),102. ForeColor = new SpreadThemableColor(new SpreadColor(255, 255, 255)),103. HorizontalAlignment = SpreadHorizontalAlignment.Left,104. VerticalAlignment = SpreadVerticalAlignment.Bottom105. };106. 107. for (int i = 0; i < ColumnHeaders.Length; i++)108. {109. using (ICellExporter cellExporter = rowExporter.CreateCellExporter())110. {111. cellExporter.SetFormat(format);112. cellExporter.SetValue(ColumnHeaders[i]);113. }114. }115. }116. }117. catch(Exception ex)118. {119. ErrLog.LogError(ex, "ViewAllExport.ExportHeaderRows");120. }121.}
Any and all help is appreciated. This is a time sensitive concern as I have to find a solution for this issue ASAP. Thank you for your time.
Best,
Ruben
