Microsoft office interop word linux

Как получить доступ к объектам взаимодействия Office

В C# предусмотрены функции, которые упрощают доступ к объектам API Office. К новым функциям относятся именованные и необязательные аргументы, новый тип dynamic , а также возможность передавать аргументы ссылочным параметрам в методах COM, как если бы они были параметрами значений.

В этой статье вы используете новые функции для написания кода, который создает и отображает лист Microsoft Office Excel. Вы пишете код для добавления документа Office Word, содержащего значок, связанный с листом Excel.

Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel 2007 и Microsoft Office Word 2007 или более поздние версии продуктов.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

VSTO использует платформа .NET Framework. Надстройки COM также могут быть написаны с помощью платформа .NET Framework. Надстройки Office нельзя создавать с помощью .NET Core и .NET 5+, последних версий .NET. Это связано с тем, что .NET Core/.NET 5+ не может работать вместе с платформа .NET Framework в одном процессе и может привести к сбоям загрузки надстройки. Вы можете продолжать использовать платформа .NET Framework для написания надстроек VSTO и COM для Office. Корпорация Майкрософт не будет обновлять VSTO или платформу надстроек COM для использования .NET Core или .NET 5+. Вы можете воспользоваться преимуществами .NET Core и .NET 5+, включая ASP.NET Core, для создания серверных надстроек Office Web.

Создание нового проекта консольного приложения

  1. Запустите Visual Studio.
  2. В меню Файл последовательно выберите команды Создатьи Проект. Откроется диалоговое окно Новый проект .
  3. В области Установленные шаблоны разверните C#, а затем выберите Windows.
  4. В верхней части диалогового окна Новый проект выберите платформа .NET Framework 4 (или более поздней версии) в качестве целевой платформы.
  5. Выберите панель Консольное приложение в области Шаблоны.
  6. Введите имя проекта в поле Имя.
  7. Щелкните ОК.

В обозревателе решений появится новый проект.

Добавление ссылок

  1. В Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите Добавить ссылку. Откроется диалоговое окно Добавление ссылки.
  2. На странице Сборки выберите Microsoft.Office.Interop.Word в списке Имя компонента, а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Excel. Если сборки не отображаются, их может потребоваться установить. См. практическое руководство по установке основных сборок взаимодействия Microsoft Office.
  3. Щелкните ОК.

Добавление необходимых директив using

В Обозреватель решений щелкните правой кнопкой мыши файл Program.cs и выберите Просмотреть код. В начало файла кода добавьте следующие директивы using :

using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; 

Создание списка банковских счетов

Вставьте следующее определение класса в файл Program.cs в класс Program .

public class Account < public int ID < get; set; >public double Balance < get; set; >> 

Чтобы создать список bankAccounts , содержащий два счета, добавьте в метод Main следующий код.

// Create a list of accounts. var bankAccounts = new List < new Account < Balance = 541.27 >, new Account < Balance = -127.44 >>; 

Объявление метода, экспортирующего сведения о счетах в Excel

  1. Чтобы настроить лист Excel, добавьте в класс Program следующий метод. У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение параметра по умолчанию. Так как аргумент не был задан, Add используется шаблон по умолчанию и создается новая книга. В эквивалентном операторе в более ранних версиях C# необходимо было использовать аргумент-местозаполнитель ExcelApp.Workbooks.Add(Type.Missing) .
static void DisplayInExcel(IEnumerable accounts) < var excelApp = new Excel.Application(); // Make the object visible. excelApp.Visible = true; // Create a new, empty workbook and add it to the collection returned // by property Workbooks. The new workbook becomes the active workbook. // Add has an optional parameter for specifying a particular template. // Because no argument is sent in this example, Add creates a new workbook. excelApp.Workbooks.Add(); // This example uses a single workSheet. The explicit type casting is // removed in a later procedure. Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet; >

Добавьте в конец метода DisplayInExcel следующий код. Этот код вставляет значения в первые два столбца первой строки листа.

// Establish column headings in cells A1 and B1. workSheet.Cells[1, "A"] = "ID Number"; workSheet.Cells[1, "B"] = "Current Balance"; 

Добавьте в конец метода DisplayInExcel следующий код. Цикл foreach помещает сведения из списка счетов в первые два столбца последовательных строк листа.

 var row = 1; foreach (var acct in accounts)

Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.

workSheet.Columns[1].AutoFit(); workSheet.Columns[2].AutoFit(); 

В более ранних версиях C# требовалось явное приведение типов для этих операций, поскольку ExcelApp.Columns[1] возвращает тип Object , а метод AutoFit является методом Excel Range. Приведение показано в следующих строках.

((Excel.Range)workSheet.Columns[1]).AutoFit(); ((Excel.Range)workSheet.Columns[2]).AutoFit(); 

C# преобразует возвращенный Object в автоматически, если на сборку dynamic ссылается параметр компилятора EmbedInteropTypes или, эквивалентно, если свойство Excel Embed Interop Types имеет значение true. True является значением по умолчанию для этого свойства.

Читайте также:  Создать конфигурационный файл линукс

Запуск проекта

Добавьте в конец метода Main следующую строку.

// Display the list in an Excel spreadsheet. DisplayInExcel(bankAccounts); 

Нажмите клавиши CTRL+F5. Появится книга Excel, содержащая данные о двух счетах.

Добавление документа Word

Следующий код открывает приложение Word и создает значок, который ссылается на лист Excel. Вставьте метод CreateIconInWordDoc , указанный далее в этом шаге, в класс Program . CreateIconInWordDoc использует именованные и необязательные аргументы, чтобы упростить вызовы методов Add и PasteSpecial. Эти вызовы включают две другие функции, которые упрощают вызовы com-методов, имеющих ссылочные параметры. Во-первых, аргументы можно передать в ссылочные параметры, как если бы они были параметрами значений. Это значит, что значения можно передавать напрямую без создания переменной для каждого ссылочного параметра. Компилятор создает временные переменные для хранения значений аргументов и уничтожает эти переменные после завершения вызываемого метода. Во-вторых, ключевое слово ref в списке аргументов можно опустить.

У метода Add имеется четыре ссылочных параметра, все из которых являются необязательными. Вы можете опустить аргументы для любого или всех параметров, если вы хотите использовать их значения по умолчанию.

Метод PasteSpecial вставляет содержимое буфера обмена. У метода имеется семь ссылочных параметров, все из которых являются необязательными. Следующий код задает аргументы для двух из них: Link для создания ссылки на исходное содержимое буфера и DisplayAsIcon для отображения ссылки в виде значка. Для этих двух аргументов можно использовать именованные аргументы и опустить остальные. Хотя эти аргументы являются ссылочными параметрами, вам не нужно использовать ref ключевое слово или создавать переменные для отправки в качестве аргументов. Значения можно передать напрямую.

static void CreateIconInWordDoc() < var wordApp = new Word.Application(); wordApp.Visible = true; // The Add method has four reference parameters, all of which are // optional. Visual C# allows you to omit arguments for them if // the default values are what you want. wordApp.Documents.Add(); // PasteSpecial has seven reference parameters, all of which are // optional. This example uses named arguments to specify values // for two of the parameters. Although these are reference // parameters, you do not need to use the ref keyword, or to create // variables to send in as arguments. You can send the values directly. wordApp.Selection.PasteSpecial( Link: true, DisplayAsIcon: true); >

Добавьте в конец метода Main следующую инструкцию.

// Create a Word document that contains an icon that links to // the spreadsheet. CreateIconInWordDoc(); 

Добавьте в конец метода DisplayInExcel следующую инструкцию. Метод Copy добавляет лист в буфер обмена.

// Put the spreadsheet contents on the clipboard. The Copy method has one // optional parameter for specifying a destination. Because no argument // is sent, the destination is the Clipboard. workSheet.Range["A1:B3"].Copy(); 

Нажмите клавиши CTRL+F5. Появится документ Word, содержащий значок. Дважды щелкните значок, чтобы отобразить лист на переднем плане.

Читайте также:  Линукс пинг по порту

Задание свойства «Внедрить типы взаимодействия»

Дополнительные улучшения возможны при вызове com-типа, который не требует первичной сборки взаимодействия (PIA) во время выполнения. Избавление от зависимостей от PIA приводит к независимости версий и делает развертывание более простым. Дополнительные сведения о преимуществах программирования без основных сборок взаимодействия см. в руководстве по внедрению типов из управляемых сборок.

Кроме того, программирование проще, так как dynamic тип представляет обязательные и возвращаемые типы, объявленные в com-методах. Переменные с типом dynamic вычисляются только во время выполнения, что устраняет необходимость явного приведения. Дополнительные сведения см. в разделе Использование типа dynamic.

Внедрение сведений о типе вместо использования PIA является поведением по умолчанию. Из-за этого по умолчанию несколько предыдущих примеров упрощены. Явное приведение не требуется. Например, объявление worksheet в методе DisplayInExcel записывается как Excel._Worksheet workSheet = excelApp.ActiveSheet , а не как Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet . Вызовы AutoFit в том же методе также потребуют явного приведения без значения по умолчанию, так как ExcelApp.Columns[1] возвращает Object метод , и AutoFit является методом Excel. Приведение показано в следующем примере.

((Excel.Range)workSheet.Columns[1]).AutoFit(); ((Excel.Range)workSheet.Columns[2]).AutoFit(); 

Чтобы изменить значение по умолчанию и использовать PIA вместо внедрения сведений о типе, разверните узел Ссылки в Обозреватель решений, а затем выберите Microsoft.Office.Interop.Excel или Microsoft.Office.Interop.Word. Если окно Свойства не отображается, нажмите клавишу F4. В списке свойств найдите свойство Внедрить типы взаимодействия и измените его значение на False. Также можно выполнить компиляцию с помощью командной строки с использованием параметра компилятора References вместо EmbedInteropTypes.

Дополнительное форматирование таблицы

Замените два вызова AutoFit в методе DisplayInExcel следующей инструкцией.

// Call to AutoFormat in Visual C# 2010. workSheet.Range["A1", "B3"].AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); 

У метода AutoFormat имеется семь параметров значений, и все они являются необязательными. Именованные и необязательные аргументы позволяют задать аргументы для всех параметров, их части или ни для одного параметра. В предыдущей инструкции вы указали аргумент только для одного из параметров, Format . Так как Format является первым параметром в списке параметров, вам не нужно предоставлять имя параметра. Однако инструкцию может быть проще понять, если включить имя параметра, как показано в следующем коде.

// Call to AutoFormat in Visual C# 2010. workSheet.Range["A1", "B3"].AutoFormat(Format: Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); 

Нажмите сочетание клавиш CTRL + F5, чтобы увидеть результат. Другие форматы можно найти в перечислении XlRangeAutoFormat .

Читайте также:  Создать конфигурационный файл линукс

Пример

Ниже приведен полный пример кода.

using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; namespace OfficeProgrammingWalkthruComplete < class Walkthrough < static void Main(string[] args) < // Create a list of accounts. var bankAccounts = new List< new Account < Balance = 541.27 >, new Account < Balance = -127.44 >>; // Display the list in an Excel spreadsheet. DisplayInExcel(bankAccounts); // Create a Word document that contains an icon that links to // the spreadsheet. CreateIconInWordDoc(); > static void DisplayInExcel(IEnumerable accounts) < var excelApp = new Excel.Application(); // Make the object visible. excelApp.Visible = true; // Create a new, empty workbook and add it to the collection returned // by property Workbooks. The new workbook becomes the active workbook. // Add has an optional parameter for specifying a particular template. // Because no argument is sent in this example, Add creates a new workbook. excelApp.Workbooks.Add(); // This example uses a single workSheet. Excel._Worksheet workSheet = excelApp.ActiveSheet; // Earlier versions of C# require explicit casting. //Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet; // Establish column headings in cells A1 and B1. workSheet.Cells[1, "A"] = "ID Number"; workSheet.Cells[1, "B"] = "Current Balance"; var row = 1; foreach (var acct in accounts) < row++; workSheet.Cells[row, "A"] = acct.ID; workSheet.Cells[row, "B"] = acct.Balance; >workSheet.Columns[1].AutoFit(); workSheet.Columns[2].AutoFit(); // Call to AutoFormat in Visual C#. This statement replaces the // two calls to AutoFit. workSheet.Range["A1", "B3"].AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); // Put the spreadsheet contents on the clipboard. The Copy method has one // optional parameter for specifying a destination. Because no argument // is sent, the destination is the Clipboard. workSheet.Range["A1:B3"].Copy(); > static void CreateIconInWordDoc() < var wordApp = new Word.Application(); wordApp.Visible = true; // The Add method has four reference parameters, all of which are // optional. Visual C# allows you to omit arguments for them if // the default values are what you want. wordApp.Documents.Add(); // PasteSpecial has seven reference parameters, all of which are // optional. This example uses named arguments to specify values // for two of the parameters. Although these are reference // parameters, you do not need to use the ref keyword, or to create // variables to send in as arguments. You can send the values directly. wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); >> public class Account < public int ID < get; set; >public double Balance < get; set; >> > 

См. также

Источник

How to: Programmatically open existing documents

Applies to: yesVisual Studio noVisual Studio for Mac noVisual Studio Code

The Open method opens the existing Microsoft Office Word document specified by a fully qualified path and file name. This method returns a Document that represents the opened document.

Applies to: The information in this topic applies to document-level projects and VSTO Add-in projects for Word. For more information, see Features available by Office application and project type.

To open a document

this.Application.Documents.Open(@"C:\Test\NewDocument.docx"); 
Me.Application.Documents.Open("C:\Test\NewDocument.docx") 

To open a document as read-only

  • Call the Open method, supply a path to the document, and set the ReadOnly argument to True in the method call.
this.Application.Documents.Open(@"C:\Test\NewDocument.docx", ReadOnly:true); 
Me.Application.Documents.Open(FileName:="C:\Test\NewDocument.docx", ReadOnly:=True) 

Compile the code

This code example requires the following:

See also

Обратная связь

Отправить и просмотреть отзыв по

Источник

Оцените статью
Adblock
detector