Создание и заполнение документа excel используя openXML SDK.
SDK берем тут, скачиваем тот что поменьше. И подключаем библиотеки в наш проект.

До конца с форматом openxml и возможностями SDK я разобраться не успел, но создать простой лист и заполнить его данными получилось.
На выходе будем иметь вот это:

public void Save(String file)
{

    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(
    file, SpreadsheetDocumentType.Workbook))
    {
        // создаем книгу
        spreadSheet.AddWorkbookPart();
        spreadSheet.WorkbookPart.Workbook = new Workbook();
        // создаем лист
        spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
        spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet();

    // создаем SheetData
    spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.AppendChild(new SheetData());

    // создаем первую строку
    Row row1 = new Row() { RowIndex = 1 };

    // ячейка А1
    Cell cell1 = new Cell()
    {
        CellReference = "A1",
        DataType = CellValues.Number, // числовой тип
        CellValue = new CellValue { Text = Convert.ToString(1) }
     };

     // ячейка B1
     Cell cell2 = new Cell()
     {
        CellReference = "B1",
        DataType = CellValues.Number, // 
        CellValue = new CellValue { Text = Convert.ToString(2) }
     };

     // ячейка С1
     Cell cell3 = new Cell()
     {
        CellReference = "C1",
        DataType = CellValues.Number, // 
        CellValue = new CellValue { Text = Convert.ToString(3) }
     };
     // добавляем ячейки на строку
     row1.Append(cell1);
     row1.Append(cell2);
     row1.Append(cell3);

     // создаем первую строку
     Row row2 = new Row() { RowIndex = 2 };

     // ячейка А1
     Cell cell4 = new Cell()
     {
        CellReference = "A2",
        DataType = CellValues.Number, // числовой тип
        CellValue = new CellValue { Text = Convert.ToString(4) }
     };

     // ячейка B1
     Cell cell5 = new Cell()
     {
        CellReference = "B2",
        DataType = CellValues.Number, // 
        CellValue = new CellValue { Text = Convert.ToString(5) }
     };

     // ячейка С1
     Cell cell6 = new Cell()
     {
        CellReference = "C2",
        DataType = CellValues.Number, // 
        CellValue = new CellValue { Text = Convert.ToString(6) }
     };
     // добавляем ячейки на строку
     row2.Append(cell4);
     row2.Append(cell5);
     row2.Append(cell6);


     // добавляем строки на лист
     spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(row1);
     spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(row2);



     // сохраняем лист
     spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.Save();


     spreadSheet.WorkbookPart.Workbook.AppendChild(new Sheets());
     spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet()
     {
        Id = spreadSheet.WorkbookPart.GetIdOfPart(spreadSheet.WorkbookPart.WorksheetParts.First()),
        SheetId = 1,
        Name = "newSheet"
      });
      // сохраняем книгу
      spreadSheet.WorkbookPart.Workbook.Save();
      }

}