Поделиться через


Создание документа электронной таблицы с указанием имени файла

Дата последнего изменения: 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

См. также

Ссылка

Class Library Reference