Создание документа электронной таблицы с указанием имени файла
Дата последнего изменения: 14 октября 2010 г.
Применимо к: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
В этой статье
Получение объекта SpreadsheetDocument
Базовая структура документа SpreadsheetML
Создание разметки SpreadsheetML
Пример кода
В этом разделе показано, как использовать классы в пакете SDK Open XML версии 2.0 для Microsoft Office для создания документа с электронными таблицами программными средствами.
Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet
Получение объекта SpreadsheetDocument
Класс SpreadsheetDocument в пакете Open XML SDK представляет пакет документа Excel. Чтобы создать документ Excel, нужно создать экземпляр класса SpreadsheetDocument и заполнить его соответствующими частями. Документ должен содержать как минимум часть книги, которая служит контейнером для документа, и хотя бы одну часть листа. Текст представляется в этом пакете в виде XML-кода с использованием разметки SpreadsheetML.
Чтобы создать экземпляр класса, вызовите метод Create(Package, SpreadsheetDocumentType). Доступно несколько методов Create, каждый со своей сигнатурой. В примере кода в этом разделе используется метод Create с сигнатурой, требующей два параметра. В первый параметр, package, передается строка с полным путем, которая представляет создаваемый документ. Второй параметр, type, является элементом перечисления SpreadsheetDocumentType. Этот параметр представляет тип документа. Так, имеются разные элементы перечисления SpreadsheetDocumentType для надстроек, шаблонов, книг и шаблонов и книг с поддержкой макросов.
Примечание
Выберите нужный тип SpreadsheetDocumentType и убедитесь, что сохраненный файл правильный, сопоставив расширение файла. Если SpreadsheetDocumentType не совпадает с расширением файла, при открытии файла в Excel возникает ошибка.
В следующем примере кода вызывается метод Create.
SpreadsheetDocument spreadsheetDocument =
SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
Dim spreadsheetDocument As SpreadsheetDocument = _
SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook)
После создания пакета документа Excel в него можно добавить части. Для добавления части книги вызовите метод AddWorkbookPart() класса SpreadsheetDocument. В части книги должен быть хотя бы один лист. Чтобы добавить лист, создайте объект Sheet. После создания Sheet свяжите Sheet с книгой Workbook, передав параметры Id, SheetId и Name. С помощью метода GetIdOfPart(OpenXmlPart) получите параметр Id листа Sheet. Затем добавьте новый лист в коллекцию Sheet, вызвав метод Append([]) класса Sheets. В следующем примере кода создается лист, для него создается связь, после чего он добавляется в книгу.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
Dim sheet As New Sheet() With {.Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), .SheetId = 1, .Name = "mySheet"}
sheets.Append(sheet)
Базовая структура документа SpreadsheetML
В следующем примере кода представлена разметка SpreadsheetML для книги, создаваемой в примере.
<x:workbook xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheets>
<x:sheet name="mySheet" sheetId="1" r:id="R47fd958b504b4526" />
</x:sheets>
</x:workbook>
Базовая структура документа SpreadsheetML состоит из элементов Sheets и Sheet, которые ссылаются на листы в книге. Для каждого листа создается отдельный XML-файл. XML-файлы листов содержат один или несколько элементов уровня блока, таких как SheetData. sheetData представляет таблицу ячеек и содержит один или несколько элементов Row. row содержит один или несколько элементов Cell. Каждая ячейка содержит элемент CellValue, представляющий значение ячейки. В следующем примере кода представлена разметка SpreadsheetML для создаваемого в примере листа.
<x:worksheet xmlns:x="https://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheetData />
</x:worksheet>
Пакет SDK Open XML версии 2.0 позволяет создать структуру и содержимое документа с помощью строго типизированных классов, соответствующих элементам SpreadsheetML. Эти классы находятся в пространстве имен DocumentFormat.OpenXml.Spreadsheet. В следующей таблице представлены имена классов, соответствующие элементам workbook, sheets, sheet, worksheet и sheetData.
Элемент SpreadsheetML |
Класс пакета SDK Open XML версии 2.0 |
Описание |
---|---|---|
workbook |
DocumentFormat.OpenXml.Spreadsheet.Workbook |
Корневой элемент основной части документа. |
листы |
DocumentFormat.OpenXml.Spreadsheet.Sheets |
Контейнер для структур уровня блока, таких как sheet, fileVersion и других, указанных в стандарте ISO/IEC 29500 (Возможно, на английском языке). |
sheet |
DocumentFormat.OpenXml.Spreadsheet.Sheet |
Лист, указывающий на файл определения листа. |
лист |
DocumentFormat.OpenXml.Spreadsheet.Worksheet |
Файл определения листа, который содержит данные листа. |
sheetData |
DocumentFormat.OpenXml.Spreadsheet.SheetData |
Таблица ячеек, сгруппированная по строкам. |
Создание разметки SpreadsheetML
Для создания базовой структуры документа с помощью пакета Open XML SDK создайте экземпляр класса Workbook, назначьте его свойству WorkbookPart основной части документа и затем добавьте экземпляры классов WorksheetPart, Worksheet и Sheet. Это показано в примере кода, где создается необходимая разметка SpreadsheetML.
Пример кода
Метод CreateSpreadsheetWorkbook, показанный в примере, можно использовать для создания базового документа Excel, книги с одним листом "mySheet". Для его вызова в программе можно использовать указанный ниже пример кода, в котором создается файл "Sheet2.xlsx" в папке "Общие документы".
CreateSpreadsheetWorkbook(@”c:\Users\Public\Documents\Sheet2.xlsx”)
CreateSpreadsheetWorkbook(”c:\Users\Public\Documents\Sheet2.xlsx”)
Обратите внимание на то, что расширение файла XLSX совпадает с типом файла, указанным в параметре SpreadsheetDocumentType.Workbook при вызове метода Create.
Ниже приведен полный пример кода на языках C# и Visual Basic.
public static void CreateSpreadsheetWorkbook(string filepath)
{
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.
Create(filepath, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
sheets.Append(sheet);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
}
Public Sub CreateSpreadsheetWorkbook(ByVal filepath As String)
' Create a spreadsheet document by supplying the filepath.
' By default, AutoSave = true, Editable = true, and Type = xlsx.
Dim spreadsheetDocument As SpreadsheetDocument = _
spreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook)
' Add a WorkbookPart to the document.
Dim workbookpart As WorkbookPart = spreadsheetDocument.AddWorkbookPart
workbookpart.Workbook = New Workbook
' Add a WorksheetPart to the WorkbookPart.
Dim worksheetPart As WorksheetPart = workbookpart.AddNewPart(Of WorksheetPart)()
worksheetPart.Worksheet = New Worksheet(New SheetData())
' Add Sheets to the Workbook.
Dim sheets As Sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(Of Sheets)(New Sheets())
' Append a new worksheet and associate it with the workbook.
Dim sheet As Sheet = New Sheet
sheet.Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart)
sheet.SheetId = 1
sheet.Name = "mySheet"
sheets.Append(sheet)
workbookpart.Workbook.Save()
' Close the document.
spreadsheetDocument.Close()
End Sub