1: using DocumentFormat.OpenXml.Packaging;
2: using DocumentFormat.OpenXml.Spreadsheet;
3: using DocumentFormat.OpenXml;
4:
5: //Копируем шаблонный файл template.xlsx
6: File.Copy("template.xlsx", "generated.xlsx", true);
7: //Открываем скопированный шаблон
8: using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open("generated.xlsx", true))
9: {
10: //Получаем доступ к Workbook part, которая содержит все ссылки
11: WorkbookPart workbookPart = myWorkbook.WorkbookPart;
12: //Получаем первый лист worksheet.
13: WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
14: // Объект SheetData будет содержать все нужные данные
15: SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
16: }
17:
18: //Коннектимся к базе данных с помощью LinqToSql
19: AdventureWorksDataContext db = new AdventureWorksDataContext();
20:
21: //Наши данные начинаются со второй строки.
22: int index = 2;
23: // Выбираем все строки из таблицы SalesTerritory.
24: var territoryQuery = from t in db.SalesTerritories select t;
25: // Каждую строку из базы данных добавляем на лист экселя spreadsheet
26: foreach (var item in territoryQuery)
27: {
28: string territoryName = item.Name;
29: decimal salesLastYear = Math.Round(item.SalesLastYear, 2);
30: decimal salesThisYear = Math.Round(item.SalesYTD, 2);
31: //Добавляем новую строку
32: Row contentRow = CreateContentRow(index, territoryName, salesLastYear, salesThisYear);
33: index++;
34: //Добавляем новую строку на лист данных экселя
35: sheetData.AppendChild(contentRow);
36: }
37:
38: ///////////////////////////
39: // Вспомогательные функции
40: ///////////////////////////
41:
42: string[] headerColumns = new string[] { "A", "B", "C" };
43: Row CreateContentRow(int index, string territory, decimal salesLastYear, decimal salesThisYear)
44: {
45: //Создаем новую строку
46: Row r = new Row();
47: r.RowIndex = (UInt32)index;
48: //Первая ячейка текстовая. Создаем и добавляем ее.
49: Cell firstCell = CreateTextCell(headerColumns[0], territory, index);
50: r.AppendChild(firstCell);
51: //Создаем ячейки таблицы, которые содержат данные
52: for (int i=1; i<headerColumns.Length; i++)
53: {
54: Cell c = new Cell();
55: c.CellReference = headerColumns[i] + index;
56: CellValue v = new CellValue();
57: if (i == 1)
58: v.Text = salesLastYear.ToString();
59: else
60: v.Text = salesThisYear.ToString();
61: c.AppendChild(v);
62: r.AppendChild(c);
63: }
64: return r;
65: }
66:
67: Cell CreateTextCell(string header, string text, int index)
68: {
69: //Создаем новую ячейку типа InlineString
70: Cell c = new Cell();
71: c.DataType = CellValues.InlineString;
72: c.CellReference = header + index;
73: //Добавляем текст в ячейку
74: InlineString inlineString = new InlineString();
75: Text t = new Text();
76: t.Text = text;
77: inlineString.AppendChild(t);
78: c.AppendChild(inlineString);
79: return c;
80: }
официальная статья на msdn:
Creating Documents by Using the Open XML Format SDK 2.0 (Part 2 of 3)