Try this problem using the OpenXML SDK :
For the interface:
private static Worksheet GetWorksheet(SpreadsheetDocument document, string worksheetName = "Sheet1") { var sheets = document.WorkbookPart.Workbook .Descendants<Sheet>().Where(s => s.Name == worksheetName); var worksheetPart = (WorksheetPart)document.WorkbookPart .GetPartById(sheets.First().Id); return worksheetPart.Worksheet; } private static string GetColumnName(int columnIndex) { var dividend = columnIndex; var columnName = String.Empty; while (dividend > 0) { var modifier = (dividend - 1) % 26; columnName = Convert.ToChar(65 + modifier).AsString() + columnName; dividend = (dividend - modifier) / 26; } return columnName; } private static Cell CreateTextCell(int columnIndex, int rowIndex, object cellValue) { var cell = new Cell(); var inlineString = new InlineString(); var txt = new Text(); cell.DataType = CellValues.InlineString; cell.CellReference = GetColumnName(columnIndex) + rowIndex; txt.Text = cellValue.AsString(); inlineString.AppendChild(txt); cell.AppendChild(inlineString); return cell; } private static Row CreateContentRow(int rowIndex, object[] cellValues) { var row = new Row { RowIndex = (UInt32)rowIndex }; for (var i = 0; i < cellValues.Length; i++) { var dataCell = CreateTextCell(i + 1, rowIndex, cellValues[i]); row.AppendChild(dataCell); } return row; }
The data specified in the table:
var sourcePath = "Report_Template.xlsx"; var data = File.ReadAllBytes(sourcePath); var memoryStream = new MemoryStream(); memoryStream.Write(data, 0, data.Length); var processSettings = new MarkupCompatibilityProcessSettings ( MarkupCompatibilityProcessMode.ProcessAllParts, FileFormatVersions.Office2007 ); var openSettings = new OpenSettings() { MarkupCompatibilityProcessSettings = processSettings, AutoSave = true }; using (var spreadSheet = SpreadsheetDocument.Open(memoryStream, true, openSettings)) { var worksheet = GetWorksheet(spreadSheet); var worksheetPart = worksheet.WorksheetPart; const int lastRowIndex = 1; var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); var lastRow = sheetData.Elements<Row>().LastOrDefault(l => l.RowIndex == lastRowIndex); var reportItems=null;
After and before, reference line and cell methods for inserting and adding data ...
Elyor source share