private static Table ExtractModelData(this ISpreadsheetModel model, IProgressMonitor monitor) { var usedArea = model.GetCellRange(); var cellList = new List <CellXml>((usedArea.RowsCount + 1) * (usedArea.ColumnsCount + 1)); var formatsList = new List <CellFormatXml>(); var formatsUsed = new HashSet <int>(); monitor.AddStepsCount(usedArea.EndRow - usedArea.StartRow); //Console.Out.WriteLine("Rows: {0}, Columns: {1}", usedArea.RowsCount, usedArea.ColumnsCount); var cellFormatsProvider = model.GetFormatsProvider(); for (var row = usedArea.StartRow; row <= usedArea.EndRow; row++) { for (var column = usedArea.StartColumn; column <= usedArea.EndColumn; column++) { var cell = model.GetCell(row, column); if (cell.ContentType != CellContentType.Empty) { var formatId = cell.FormatId; if (!formatsUsed.Contains(formatId)) { var format = cellFormatsProvider.GetFormat(cell.FormatId); formatsUsed.Add(formatId); var formatInfo = new CellFormatXml { id = format.FormatId, type = (int)format.FormatTypeFlags, formatString = format.FormatString, }; formatsList.Add(formatInfo); } var resultCell = new CellXml { row = row, col = column, rawValue = cell.Value, Value = cell.Text, formatId = cell.FormatId, contentType = cell.ContentType.ToXmlCellType(), xMin = 0, xMax = 0, yMin = 0, yMax = 0, }; cellList.Add(resultCell); } } monitor.StepFinished(); } return(new TableXml { startRow = usedArea.StartRow, endRow = usedArea.EndRow, startCol = usedArea.StartColumn, endCol = usedArea.EndColumn, NumberFormats = new NumberFormatsXml { CellFormat = formatsList.ToArray(), defaultDecimals = cellFormatsProvider.StandardMaxDecimals, nullDate = cellFormatsProvider.NullDate, }, Cell = cellList.ToArray(), }); }