Microsoft office interop excel как подключить
В этом разделе с использованием новых функций будет написан код, который создает и отображает лист Microsoft Office Excel. После этого будет написан код для добавления документа Office Word, который содержит значок, ссылающийся на лист Excel.
Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel 2007 и Microsoft Office Word 2007 или более поздние версии продуктов.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание нового проекта консольного приложения
Запустите Visual Studio.
В меню Файл выберите пункт Создать, а затем команду Проект. Откроется диалоговое окно Новый проект .
В области Шаблоны щелкните Консольное приложение.
Введите имя проекта в поле Имя.
В обозревателе решений появится новый проект.
Добавление ссылок
В обозревателе решений щелкните имя проекта правой кнопкой мыши и выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.
На странице "Сборки" выберите Microsoft.Office. Interop.Word в списке имен компонентов, а затем удерживайте клавишу CTRL и выберите Microsoft.Office. Взаимодействия. Excel. Если сборки отсутствуют, может потребоваться проверить, что они установлены и отображаются. См. практическое руководство по установке основных сборок взаимодействия Microsoft Office.
Добавление необходимых директив using
В обозревателе решений щелкните правой кнопкой мыши файл Program.cs и выберите пункт Просмотреть код.
Создание списка банковских счетов
Вставьте следующее определение класса в файл Program.cs в класс Program .
Чтобы создать список bankAccounts , содержащий два счета, добавьте в метод Main следующий код.
Объявление метода, экспортирующего сведения о счетах в Excel
Чтобы настроить лист Excel, добавьте в класс Program следующий метод.
Добавьте в конец метода DisplayInExcel следующий код. Этот код вставляет значения в первые два столбца первой строки листа.
Добавьте в конец метода DisplayInExcel следующий код. Цикл foreach помещает сведения из списка счетов в первые два столбца последовательных строк листа.
Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.
Запуск проекта
Добавьте в конец метода Main следующую строку.
Нажмите клавиши CTRL+F5.
Появится книга Excel, содержащая данные о двух счетах.
Добавление документа Word
Добавьте в конец метода Main следующую инструкцию.
Добавьте в конец метода DisplayInExcel следующую инструкцию. Метод Copy добавляет лист в буфер обмена.
Нажмите клавиши CTRL+F5.
Появится документ Word, содержащий значок. Дважды щелкните значок, чтобы отобразить лист на переднем плане.
Задание свойства "Внедрить типы взаимодействия"
При вызове типа COM, который не требует во время выполнения основной сборки взаимодействия (PIA), можно использовать дополнительные усовершенствования. Избавление от зависимостей от PIA приводит к независимости версий и делает развертывание более простым. Дополнительные сведения о преимуществах программирования без основных сборок взаимодействия см. в руководстве по внедрению типов из управляемых сборок.
Кроме того, писать программы стало проще, поскольку типы, принимаемые и возвращаемые методами COM, можно представить с помощью типа dynamic вместо типа Object . Переменные типа dynamic не вычисляются до времени выполнения, что позволяет обходиться без явного приведения. Дополнительные сведения см. в разделе Использование типа dynamic.
Чтобы изменить поведение по умолчанию и использовать сборки PIA вместо внедрения сведений о типе, разверните узел Ссылки в обозревателе решений и выберите Microsoft.Office.Interop.Excel или Microsoft.Office.Interop.Word.
Если окно Свойства не отображается, нажмите клавишу F4.
В списке свойств найдите свойство Внедрить типы взаимодействия и измените его значение на False. Также можно выполнить компиляцию с помощью командной строки с использованием параметра компилятора References вместо EmbedInteropTypes.
Дополнительное форматирование таблицы
Замените два вызова AutoFit в методе DisplayInExcel следующей инструкцией.
У метода AutoFormat имеется семь параметров значений, и все они являются необязательными. Именованные и необязательные аргументы позволяют задать аргументы для всех параметров, их части или ни для одного параметра. В приведенной выше инструкции аргумент задается только для одного из параметров, Format . Поскольку Format является первым параметром в списке, имя параметра указывать не требуется. Однако инструкция может быть проще для понимания, если указать имя параметра, как показано в следующем фрагменте кода.
Нажмите сочетание клавиш CTRL + F5, чтобы увидеть результат. Другие форматы представлены в перечислении XlRangeAutoFormat.
Оба языка поддерживают внедрение сведений о типах, что позволяет развертывать сборки, взаимодействующие с компонентами COM, без предварительного развертывания на компьютере основных сборок взаимодействия (PIA). Дополнительные сведения см. в разделе Пошаговое руководство: внедрению типов из управляемых сборок.
В данном пошаговом руководстве эти возможности показаны в контексте программирования для Microsoft Office, но многие из них могут оказаться полезными и в других ситуациях. В этом пошаговом руководстве вы создадите книгу Excel с помощью надстройки Excel, а затем документ Word со ссылкой на эту книгу. Наконец, вы узнаете, как включать и отключать зависимость PIA.
Предварительные требования
Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel и Microsoft Office Word.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Настройка надстройки Excel
Запустите Visual Studio.
В меню Файл выберите пункт Создать, а затем команду Проект.
в области шаблоны выберите Excel надстройка версии .
Если нужно, в поле Имя введите имя проекта.
В обозревателе решений появится новый проект.
Добавление ссылок
В обозревателе решений щелкните имя проекта правой кнопкой мыши и выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.
На вкладке сборки выберите Microsoft. Office. Com. Excel, версия (для получения ключа по номерам версий продуктов Office, см. статью версии Microsoft), в списке имя компонента , а затем нажмите и удерживайте клавишу CTRL и выберите Microsoft. Office. Interop. Word, . Если сборки отсутствуют, может потребоваться проверить, что они установлены и отображаются (см. раздел Практическое руководство. Установка основных сборок взаимодействия Microsoft Office).
Добавление необходимых операторов Imports или директив using
В обозревателе решений щелкните правой кнопкой мыши файл ThisAddIn.vb или ThisAddIn.cs и выберите в контекстном меню команду Просмотреть код.
В верхнюю часть файла с кодом добавьте следующие операторы Imports (Visual Basic) или директивы using , если это еще не сделано.
Создание списка банковских счетов
Замените определение класса Account следующим кодом. В определениях классов используются автоматически реализуемые свойства. Дополнительные сведения см. в разделе Автоматически реализуемые свойства.
Чтобы создать bankAccounts список, содержащий две учетные записи, добавьте следующий код ThisAddIn_Startup в метод в bankAccounts или ThisAddIn_Startup . В объявлениях списков используются инициализаторы коллекций. Дополнительные сведения см. в разделе Инициализаторы коллекций.
Экспорт данных в Excel
В том же самом файле добавьте в класс ThisAddIn следующий метод. Этот метод служит для настройки книги Excel и экспорта данных в нее.
В более ранних версиях этого языка приходилось использовать особый синтаксис.
Разработчики не могут создавать собственные индексированные свойства. Эта возможность поддерживает только использование имеющихся индексированных свойств.
Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.
например, excelApp.Columns[1] возвращает Object , а AutoFit — метод Excel excelApp.Columns[1] . Без типа dynamic необходимо выполнять приведение объекта, возвращаемого excelApp.Columns[1] , к экземпляру Range перед вызовом метода AutoFit .
Дополнительные сведения о внедрении типов взаимодействия см. в подразделах "Поиск ссылки PIA" и "Восстановление зависимости PIA" далее в этом разделе. Дополнительные сведения о dynamic см. в разделе dynamic или Динамическое использование типа Dynamic.
Вызов метода DisplayInExcel
Добавьте следующий код в конец метода ThisAddIn_StartUp . Вызов метода DisplayInExcel содержит два аргумента. Первый аргумент представляет собой имя списка счетов, которые требуется обработать. Второй аргумент — это состоящее из нескольких строк лямбда-выражение, которое определяет, каким образом следует обрабатывать данные. Значения ID и balance для каждого из счетов отображаются в соседних ячейках, а если баланс имеет отрицательное значение, строка отображается красным. Дополнительные сведения см. в разделе Лямбда-выражения.
Чтобы запустить программу, нажмите клавишу F5. Появится книга Excel, содержащая данные о счетах.
Добавление документа Word
Добавьте в конец метода ThisAddIn_StartUp следующий код, чтобы создать документ Word, содержащий ссылку на книгу Excel.
Запуск приложения
- Нажмите клавишу F5 для запуска приложения. Будет запущено приложение Excel, в котором будет открыта таблица, содержащая сведения о двух счетах из списка bankAccounts . Затем будет открыт документ Word, содержащий ссылку на таблицу Excel.
Очистка готового проекта
- В Visual Studio в меню Построение выберите пункт Очистить решение. В противном случае надстройка будет запускаться при каждом открытии Excel на компьютере разработчика.
Поиск ссылки PIA
Запустите приложение снова, но не выбирайте пункт Очистить решение.
Выберите кнопку Пуск. перейдите на Microsoft Visual Studio версию > и откройте командную строку разработчика.
В окне командной строки разработчика для Visual Studio введите команду ildasm , а затем нажмите клавишу ВВОД. Появится окно программы IL DASM.
В меню файл в окне IL DASM выберите файл Открыть. дважды щелкните Visual Studio версия >, а затем дважды щелкните >. Откройте папку проекта и найдите в папке bin/Debug файл имя_проекта.dll. Дважды щелкните файл имя_проекта.dll. В новом окне будут показаны атрибуты проекта, а также ссылки на другие модули и сборки. Обратите внимание, что в сборку включены пространства имен Microsoft.Office.Interop.Excel и Microsoft.Office.Interop.Word . По умолчанию в Visual Studio компилятор импортирует в сборку необходимые типы из сборки PIA, на которую указывает ссылка.
Дважды щелкните значок МАНИФЕСТ. Откроется окно со списком сборок, содержащих элементы, на которые имеются ссылки в проекте. Сборки Microsoft.Office.Interop.Excel и Microsoft.Office.Interop.Word не будут указаны в этом списке. Поскольку необходимые для проекта типы были импортированы в сборку проекта, ссылки на сборки PIA не требуется. Это упрощает развертывание. Сборки PIA не обязательно должны присутствовать на компьютере пользователя, а поскольку приложение не требует развертывания конкретной версии сборки PIA, можно разрабатывать приложения, которые работают с различными версиями Office, если в этих версиях имеются все необходимые интерфейсы API.
Поскольку развертывать сборки PIA больше не требуется, можно создавать приложения для применения в сложных сценариях, чтобы эти приложения работали с несколькими версиями Office, включая и более ранние версии. Тем не менее это возможно только в том случае, если в коде не используются интерфейсы API, которые недоступны в используемой версии Office. Разработчик не всегда знает, был ли доступен тот или иной интерфейс API в более ранней версии, поэтому работать с более ранними версиями Office не рекомендуется.
До Office 2003 сборки PIA не публиковались. Поэтому единственными способом создания сборки взаимодействия в Office 2002 или более ранних версиях является импорт ссылки COM.
Закройте окно манифеста и окно сборки.
Восстановление зависимости PIA
В обозревателе решений нажмите кнопку Показать все файлы. Разверните папку Ссылки и выберите Microsoft.Office.Interop.Excel. Нажмите клавишу F4, чтобы открыть окно Свойства.
В окне Свойства измените значение свойства Внедрить типы взаимодействия с True на False.
Повторите шаги 1 и 2 этой процедуры для сборки Microsoft.Office.Interop.Word .
Нажмите клавишу F5, чтобы проверить, что проект по-прежнему выполняется правильно.
Повторите шаги 1–3 из предыдущей процедуры, чтобы открыть окно сборки. Обратите внимание, что сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel больше не входят в список внедренных сборок.
Дважды щелкните значок МАНИФЕСТ и просмотрите список сборок, на которые имеются ссылки. В списке будут указаны сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel . Поскольку приложение содержит ссылки на сборки PIA Excel и Word, а свойство Внедрить типы взаимодействия имеет значение False, на компьютере пользователя должны храниться обе сборки.
В Visual Studio в меню Построение выберите пункт Очистить решение, чтобы очистить завершенный проект.
Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.
Наработки очень пригодились в работе для формирования отчетности.
Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.
Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.
Далее создаем псевдоним для работы с Excel:
using Excel = Microsoft.Office.Interop.Excel;
Расстановка рамок.
Расставляем рамки со всех сторон:
Цвет рамки можно установить так:
Выравнивания в диапазоне задаются так:
Формулы
Определим задачу: получить сумму диапазона ячеек A4:A10.
Для начала снова получим диапазон ячеек:
Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);
Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:
string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.
Выделение ячейки или диапазона ячеек
Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:
Авто ширина и авто высота
Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:
Получаем значения из ячеек
Чтобы получить значение из ячейки, используем такой код:
Добавляем лист в рабочую книгу
Чтобы добавить лист и дать ему заголовок, используем следующее:
Добавление разрыва страницы
Сохраняем документ
Как открыть существующий документ Excel
Комментарии
Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.
Далее заходим в редактор Visual Basic и смотрим код, который туда записался:
Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:
Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.
Чтобы выбрать лист, выполните sheetData.Select(Type.Missing); где sheetData это нужный лист.
Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.
Наработки очень пригодились в работе для формирования отчетности.
Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.
Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.
Далее создаем псевдоним для работы с Excel:
using Excel = Microsoft.Office.Interop.Excel;
Расстановка рамок.
Расставляем рамки со всех сторон:
Цвет рамки можно установить так:
Выравнивания в диапазоне задаются так:
Формулы
Определим задачу: получить сумму диапазона ячеек A4:A10.
Для начала снова получим диапазон ячеек:
Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);
Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:
string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.
Выделение ячейки или диапазона ячеек
Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:
Авто ширина и авто высота
Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:
Получаем значения из ячеек
Чтобы получить значение из ячейки, используем такой код:
Добавляем лист в рабочую книгу
Чтобы добавить лист и дать ему заголовок, используем следующее:
Добавление разрыва страницы
Сохраняем документ
Как открыть существующий документ Excel
Комментарии
Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.
Далее заходим в редактор Visual Basic и смотрим код, который туда записался:
Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:
Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.
Чтобы выбрать лист, выполните sheetData.Select(Type.Missing); где sheetData это нужный лист.
Как прочитать данные из ячейки excel,и записать эти данные в sql server?
Добрый день.
Отправил на почту.
Добрый день.
А мне можно тоже самое?)
Вы можете записать макрос на изменение цвета в Visual Basic и списать получившийся код. Затем использовать его в своей программе.
Здравствуйте.
Можете подсказать, как «заставить» приложение работать с разными версиями MS Office? На машине разработчика стоит Office 2010, при запуске на машине с 2003-м — увы — ошибка.
Microsoft.Office.Interop.Excel это довольно старый способ работать с Excel документами.
Что касается версии Office 2003, то он использует совсем другой драйвер.
Соответственно версия Microsoft.Office.Interop.Excel.dll нужна старая, плюс драйвер microsoft jet 4.0, который на новых системах (Win 8, 10) работает неправильно.
Единственное, что могу посоветовать, так это скачать Microsoft Office Compatibility Pack для Office 2003, чтобы научить его открывать xslx документы.
А в своей программе использовать не Interop.Excel, а библиотеку EPPlus. Она работает с excel документами, используя технологию OpenXml и не надо париться по поводу драйверов.
Код будет очень похож на Interop.Excel-ный.
Очень полезная штука, спасибо за удобное представление информации на Вашем сайте!
Скажите пожалуйста, как прочитать данные из ячейки Excel и записать их в SQL Server?
Пошаговое руководство, с помощью которого вы сможете добавить сборку Microsoft.Office.Interop.Excel.dll, предназначенную для работы с Excel файлами, в свой проект.
1. Перейдите в окно Solution Explorer.
2. Найдите пункт References и нажмите на нём правую кнопку мыши.
3. В появившемся контекстном меню выберите пункт Add Reference.
4. В окне Reference Manager выберите пункт Assemblies -> Extensions.
5. Найдите сборку Microsoft.Office.Interop.Excel, после чего выберите ее, установив рядом с ней галочку.
6. Нажмите на кнопку с надписью «OK», чтобы добавить сборку в проект.
Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.
Наработки очень пригодились в работе для формирования отчетности.
Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.
Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.
Далее создаем псевдоним для работы с Excel:
using Excel = Microsoft.Office.Interop.Excel;
Расстановка рамок.
Расставляем рамки со всех сторон:
Цвет рамки можно установить так:
Выравнивания в диапазоне задаются так:
Формулы
Определим задачу: получить сумму диапазона ячеек A4:A10.
Для начала снова получим диапазон ячеек:
Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);
Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:
string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.
Выделение ячейки или диапазона ячеек
Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:
Авто ширина и авто высота
Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:
Получаем значения из ячеек
Чтобы получить значение из ячейки, используем такой код:
Добавляем лист в рабочую книгу
Чтобы добавить лист и дать ему заголовок, используем следующее:
Добавление разрыва страницы
Сохраняем документ
Как открыть существующий документ Excel
Комментарии
Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.
Далее заходим в редактор Visual Basic и смотрим код, который туда записался:
Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:
Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.
Чтобы выбрать лист, выполните sheetData.Select(Type.Missing); где sheetData это нужный лист.
Как прочитать данные из ячейки excel,и записать эти данные в sql server?
Добрый день.
Отправил на почту.
Добрый день.
А мне можно тоже самое?)
Вы можете записать макрос на изменение цвета в Visual Basic и списать получившийся код. Затем использовать его в своей программе.
Здравствуйте.
Можете подсказать, как «заставить» приложение работать с разными версиями MS Office? На машине разработчика стоит Office 2010, при запуске на машине с 2003-м — увы — ошибка.
Microsoft.Office.Interop.Excel это довольно старый способ работать с Excel документами.
Что касается версии Office 2003, то он использует совсем другой драйвер.
Соответственно версия Microsoft.Office.Interop.Excel.dll нужна старая, плюс драйвер microsoft jet 4.0, который на новых системах (Win 8, 10) работает неправильно.
Единственное, что могу посоветовать, так это скачать Microsoft Office Compatibility Pack для Office 2003, чтобы научить его открывать xslx документы.
А в своей программе использовать не Interop.Excel, а библиотеку EPPlus. Она работает с excel документами, используя технологию OpenXml и не надо париться по поводу драйверов.
Код будет очень похож на Interop.Excel-ный.
Очень полезная штука, спасибо за удобное представление информации на Вашем сайте!
Скажите пожалуйста, как прочитать данные из ячейки Excel и записать их в SQL Server?
Visual Studio 2015 не видит Microsoft.Office.Interop при работе с Microsoft Office 2016. Сборка Microsoft Office 16.0 Object Library подключена. С пространством имён Microsoft.Office.Core всё нормально, но Microsoft.Office.Interop не видит вообще.
В чём может быть причина?
1 ответ 1
Частичное решение проблемы
Пока проблему удалось разрешить, но, к сожалению, пока частично.
Вследствие пока невыясненных причин, в процессе установки необходимые сборки не попали в глобальный кэш (GAC). Поэтому, для Excel необходимую сборку нашёл в папке пакета и подключил оттуда. Расположение папки:
Там же можно найти сборку и для Access.
Сборку для Outlook нашёл здесь:
Как отличить нужные сборки от всех остальных?
(Информация скорее для тех, кто в будущем, возможно, будет читать этот ответ)
То есть, для Excel сборка будет называться:
UPDATE 08.01.2016 Окончательное решение проблемы
В конечном итоге проблема полностью разрешилась сама собой путём установки “чистого” Microsoft Office 2016 “с нуля”. Ранее было просто выполнено обновление с версии 2010 (видимо прошло некорректно).
Читайте также: