public void TestThatExcelFileDataConstructorSetCorrectValuesOfExcelDataModel()
        {
            var exceldata = new ExcelData
            {
                Headers = new List <string>
                {
                    "Header1"
                },
                DataRows = new List <List <string> >
                {
                    new List <string> {
                        "Data1"
                    },
                    new List <string> {
                        "Data2"
                    }
                },
                SheetName = "Sheet"
            };

            var excelFileData = new ExcelFileData(exceldata);

            Assert.AreEqual(1, excelFileData.Headers.Count);
            Assert.AreEqual(2, excelFileData.DataRows.Count);
            Assert.AreEqual(1, excelFileData.DataRows[0].Count);
            Assert.AreEqual(1, excelFileData.DataRows[1].Count);
            Assert.AreEqual("Header1", excelFileData.Headers.First());
            Assert.AreEqual("Data1", excelFileData.DataRows[0].First());
            Assert.AreEqual("Data2", excelFileData.DataRows[1].First());
            Assert.AreEqual("Sheet", excelFileData.SheetName);
        }
        private void PopulateData(ExcelFileData data, WorksheetPart worksheetPart)
        {
            // Add header
            uint rowIdex = 0;
            var  row     = new Row {
                RowIndex = ++rowIdex
            };
            var sheetData = worksheetPart.Worksheet.GetFirstChild <SheetData>();

            sheetData.AppendChild(row);
            var cellIdex = 0;

            foreach (var header in data.Headers)
            {
                row.AppendChild(CreateTextCell(ColumnLetter(cellIdex++), rowIdex, header ?? string.Empty));
            }

            if (data.Headers.Count > 0)
            {
                // Add the column configuration if available
                if (data.ColumnConfigurations != null)
                {
                    var columns = (Columns)data.ColumnConfigurations.Clone();
                    worksheetPart.Worksheet.InsertAfter(columns, worksheetPart.Worksheet.SheetFormatProperties);
                }
            }

            // Add sheet data
            foreach (var rowData in data.DataRows)
            {
                cellIdex = 0;
                row      = new Row {
                    RowIndex = ++rowIdex
                };
                sheetData.AppendChild(row);
                foreach (var cellData in rowData)
                {
                    var cell = CreateTextCell(ColumnLetter(cellIdex++),
                                              rowIdex,
                                              cellData ?? string.Empty);
                    row.AppendChild(cell);
                }
            }
        }
        public void SaveToExcel(ExcelFileData data)
        {
            if (string.IsNullOrEmpty(data.FilePath))
            {
                throw new ArgumentNullException("filePath");
            }

            WorksheetPart workSheetPart;

            data.SheetName = data.SheetName ?? ExcelData.DefaultSheetName;
            if (data.UpdateExistingFile)
            {
                try
                {
                    using (SpreadsheetDocument document = SpreadsheetDocument.Open(data.FilePath, true))
                    {
                        workSheetPart = AddWorkSheet(data.SheetName, document.WorkbookPart, data.UpdateExistingFile);

                        PopulateData(data, workSheetPart);

                        document.WorkbookPart.Workbook.Save();
                    }
                }
                catch (OpenXmlPackageException)
                {
                    throw new FileNotFoundException("File is not found", data.FilePath);
                }
            }
            else
            {
                using (SpreadsheetDocument document = SpreadsheetDocument.Create(data.FilePath, SpreadsheetDocumentType.Workbook))
                {
                    var workBookPart = document.AddWorkbookPart();
                    workBookPart.Workbook = new Workbook();
                    workSheetPart         = AddWorkSheet(data.SheetName, document.WorkbookPart, data.UpdateExistingFile);

                    PopulateData(data, workSheetPart);
                    workBookPart.Workbook.Save();
                }
            }
        }
Example #4
0
        public void SaveToCsv(ExcelFileData data)
        {
            try
            {
                if (string.IsNullOrEmpty(data.FilePath))
                {
                    throw new DataException("Excel file path is not provided");
                }

                if (!data.UpdateExistingFile)
                {
                    throw new NotSupportedException();
                }

                if (data.Headers != null)
                {
                    // add headers to a file
                    var headers = new StringBuilder();
                    foreach (var header in data.Headers)
                    {
                        headers.Append(string.Format(CellFormat, header));
                    }

                    using (var w = new StreamWriter(data.FilePath, false))
                    {
                        w.WriteLine(headers);
                        w.Flush();
                    }
                }

                if (data.DataRows != null)
                {
                    // add rows by portions in PortionNumber rows to a file
                    var dataContent = new StringBuilder();
                    for (int i = 0; i < data.DataRows.Count; i++)
                    {
                        var isLastRowInPortion = (i + 1) % PortionNumber == 0 || i == data.DataRows.Count - 1;
                        for (int j = 0; j < data.DataRows[i].Count; j++)
                        {
                            var cellData = data.DataRows[i][j];
                            if (cellData.IndexOf(',') > 0)
                            {
                                cellData = string.Format("\"{0}\"", cellData);
                            }

                            if (!isLastRowInPortion && j == data.DataRows[i].Count - 1)
                            {
                                dataContent.AppendLine(string.Format(CellFormat, cellData));
                            }
                            else
                            {
                                dataContent.Append(string.Format(CellFormat, cellData));
                            }
                        }

                        if (isLastRowInPortion)
                        {
                            using (var w = new StreamWriter(data.FilePath, true))
                            {
                                w.WriteLine(dataContent);
                                w.Flush();
                                dataContent = dataContent.Clear();
                            }
                        }
                    }
                }
            }
            catch (IOException ex)
            {
                throw new IOException("An exception occurs during Excel data writing", ex);
            }
        }