Microsoft office interop excel как подключить
Введение. Решение и выбор способа связывания
Введение алиаса позволяет не только сократить количество кода при обращении к объектам, но и дает возможность использовать весь код, который мы напишем ниже, для любого способа
Рис.1. Проект решения AppWordExcel
Создадим обработчик нажатия для кнопки 1 и замкнем на него обработчики нажатия всех кнопок. Запишем следующий, общий для всех примеров, приводимых ниже, код:
В case 1 будем размещать код, в котором выполняется какое-либо действие по старту Excel и выводу информации, в case 2 - дополнительные действия и действия при закрытии приложения, в default - поместим код выхода из приложения.
Немного обособленно от этой иерархической структуры объектов находится свойство Windows объекта Excel.Application, предназначенное для управления окнами сервера Excel. Свойство Windows содержит набор объектов Window, которые имеют, в свою очередь, набор свойств и методов для управления размерами, видом, масштабом и упорядочиванием открытых окон, отображением заголовков, цветами и т.д. Эти же возможности доступны и для свойств и методов объекта Excel.Application - ActiveWindow (ссылка на активное окно). (Подробно об управлении окнами см. в параграфе "Некоторые возможности по управлению параметрами Excel").
Все эти объекты принято определять глобально для того, чтобы обеспечить доступ к ним из любой функции проекта. Определим глобально основной объект Excel.Application и, сразу, хотя он и понадобится нам значительно позже - объект Excel.Window:
Следующий код позволяет выполнять запуск Excel и его закрытие при нажатии соответственно кнопок 1 и 2.
Параграф 2. Создание рабочих книг
Вторым в иерархии объектов Excel.Application является объект Workbook. Информация об объектах Workbook хранится в виде ссылок на открытые рабочие книги в свойстве Workbooks. Книга в приложение может быть добавлена только через добавление ссылки в совокупность Workbooks, а ссылка на открытую книгу может быть получена различным образом (по имени, номеру, как ссылка на активную книгу).
Рассмотрим создание двух рабочих книг из 3х и 5ти листов.
Свойство SheetsInNewWorkbook возвращает или устанавливает количество листов, автоматически помещаемых Excel в новые рабочие книги.
Из других свойств отметим свойство TemplatesPath. С его помощью, зная имя файла шаблона, можно напрямую задавать имя шаблона (правда, в этом нет необходимости, если мы не хотим использовать, например, свой собственный шаблон). Свойство StartupPath возвращает путь к папке, которая содержит надстройки, выполняемые при запуске Excel и, хотя свойство для отображения информации нам ничего не дает, все же порой бывает необходимо найти имя файла настроек и удалить его для того, чтобы приложение работало только с собственными настройками.
Книги могут быть не только добавлены, но и закрыты. Следующие вызовы закрывают все или конкретную рабочую книгу:
Остановимся более подробно на втором методе. Его параметры:
Параграф 3. Сохранение документов
3.1. Подготовка к сохранению документов
Документы Excel можно сохранить программно и обычным для Excel способом. В любом случае перед выходом из Excel необходимо вызвать метод Quit. Если свойство Excel.Application DisplayAlerts имеет значение true, Excel предложит сохранить несохраненные данные, если после старта в документ были внесены какие либо изменения. Excel автоматически не возвращает это свойство в значение по умолчанию, поэтому его рекомендуется возвращать в исходное состояние.
Добавим в область глобального определения переменных еще две строчки, определив массив ссылок на созданные книги и на объект - конкретную книгу.
Теперь, если выйти на конкретную книгу, как показано в примере, приведенном ниже, и присвоить свойству Saved объекта Workbook значение true, Excel согласно документации не должен предлагать сохранение независимо от того, были или нет изменения в данной книге (к сожалению, это не всегда работает).
На некоторых вариациях версий Windows и Office запрос на сохранение может все равно присутствовать, хотя мы, и отключаем его в свойстве Saved.
Из примера видно, что кроме Item, у набора Workbooks, как и у всех наборов в Microsoft Office, есть свойство Count, которое возвращает число элементов в наборе (в данном случае - объектов Workbook).
Следующий вопрос, - в каком формате сохранять документ. Для получения формата открываемого документа и задания формата сохраняемого служит свойство Excel.Application DefaultSaveFormat. Свойство имеет много значений типа XlFileFormat (какие могут быть легко посмотреть в диалоговом окне "Сохранение документа" в поле "Тип файла", открыв Excel и выбрав пункт меню "Файл" | "Сохранить как").
Например, в case 1 допишем строчку:
и в окне диалога сохранения файла будет установлен тип файла "Web страница".
3.2. Сохранение документа
Для сохранения документов можно использовать методы Excel.Workbook Save и SaveAs. Метод Save сохраняет рабочую книгу в папке "Мои документы" с именами, присваиваемыми документу по умолчанию ("Книга1.xls", "Книга2.xls" . ) или в директорию и с именем под которым документ уже был сохранен.
Изменим код в case 2, на следующий и продемонстрируем пример сохранения по умолчанию:
При значении свойства DisplayAlerts=true Excel будет спрашивать - записать ли сохраняемый документ поверх существующего, при значении false - нет.
Метод SaveAs позволяет сохранить документ с указанием имени, формата файла, пароля, режим доступа и т. д. Данный метод, как и метод Save, присваивает свойству Saved значение true. Метод SaveAs имеет следующий синтаксис:
Для доступа к книге используются значение AccessMode xlShared - общая рабочая книга, xlExclusive - монопольный доступ или xlNoChange - запрет изменения режима доступа.
Параметр ConflictResolution - способ разрешения конфликтов при одновременном внесении несколькими пользователями изменений в один документ - может иметь значения: xlUserResolution - отображение диалогового окна разрешения конфликтов (параметр по умолчанию), xlLocalSessionChanges - принятие изменений, внесенных пользователем или xlOtherSessionChanges - принятие изменений, внесенных другими пользователями.
Следующий пример сохраняет открытые выше документы в формате .html и .xls, причем большинство параметров для первого документа передаются как не имеющие значения Type.Missing, для второго документа использовано паролирование и запрет изменения режима доступа (Excel.XlSaveAsAccessMode.xlNoChange):
Рис.2. Вызов документа с установленным паролем на доступ и запись
Для сохранения документа может быть использован метод SaveCopyAs, который сохраняет копию рабочей книги в файле. Следующий пример, использующий метод SaveCopyAs полностью аналогичен примеру, использующему метод SaveAs при задании всех параметров как Type.Missing.
Метод SaveAs не производит преобразование документа и, поэтому, приведенный код вместо Web страницы a.html сохранит копию xls документа (изменит только расширение).
Параграф 4. Открытие существующего документа
Для открытия существующего документа основным методом является метод Open набора Excel.Workbooks. Для открытия текстовых файлов как рабочих книг, баз данных, файлов в формате .XML, используются методы OpenText, OpenDatabase или OpenXml. Об использовании методов OpenDatabase и OpenXml речь будет вестись в других темах. В данном параграфе рассмотрим метод Open.
После выполнения предыдущего примера у нас осталось два рабочих файла a.html и a.xls, которые мы и откроем как две рабочие книги в Excel, изменив код в case 1:
Метод Open имеет много параметров. Но, большинство из них, как видно из примера, необязательны. Рассмотрим параметры метода Open:
UpdateLinks - позволяет задать способ обновления ссылок в файле. Если данный параметр не задан, то выдается запрос на указание метода обновления. Значения: 0 - не обновлять ссылки; 1 - обновлять внешние ссылки; 2 - обновлять только удаленные ссылки; 3 - обновлять все ссылки.
Format - при работе с текстовыми файлами определяет символ разделителя для полей, заносимых в различные ячейки документа. Значения параметра: 1 - символ табуляции; 2 - запятая; 3 - пробел; 4 - точка с запятой; 5 - нет разделителя; 6 - другой символ, определенный в параметре Delimiter.
Приведем еще один пример - пример открытия текстового файла с использованием метода OpenText. Метод загружает в 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.Interop.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.
Привожу фрагменты кода, которые искал когда-то сам для работы с 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 и списать получившийся код. Затем использовать его в своей программе.
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?
В компании, где я работаю, пользователи работают с данными с помощью MS Excel. Основным хранилищем информации является БД Oracle. Отсюда требуется:
- Представление отчетов из базы данных в формате Excel
- Забирать информацию в виде Excel файлов и заливать её в Oracle
Проблематика:
Работа с Excel, довольно сильно отличается от работы с обычным текстовым файлом. В его ячейках помимо значений могут храниться сложные формулы и данные, загруженные по ссылкам. Так же в колонке с одним типом данных могут встречаться значения других типов. В случае какой-либо ошибки в ячейке информация на листе продолжает оставаться доступной и только у этой ячейки будет статус Error. Есть и другие вещи, которые делают Excel очень гибким и уникальным продуктом для пользователя и не простым для разработчика.
Как-то был случай, когда начальник мышкой выделял часть таблицы в Excel и копировал его на другую страницу, задавая мне вопрос – “Неужели так сложно сделать это же, только с копированием в базу? Ты же Профессионал!”. После того разговора я, какое-то время, чувствовал себя хомячком, которому дали каплю никотина, убившую лошадь. Но время шло, и с помощью MSDN и интернета я стал ближе с MS Excel, а ежедневные танцы с бубном вокруг него дали свой результат.
Существует множество способов чтения (записи) данных из (в) Excel, каждый вправе выбирать тот, который ему наиболее удобен, я же в этой статье решил рассказать вам о своём пути работы с ним:
Начинал я с Microsoft Excel ODBC Driver, использовал Microsoft Integration Services, писал макросы на VB. Так же использовал шаблоны с уже готовыми макросами и заставлял пользователя работать только с ними. Так же принимались попытки не использовать MS Excel при работе с базой, но они не нашли понимания.
Попытки уйти от использования MS Excel
- Во-первых – никто не требует замены MS Excel на что-то другое.
- Во-вторых — такие попытки воспринимаются окружающими с недоумением. В лучшем случае таких “революционеров” гладят по головке и отпускают домой пораньше, в худшем провожают сочувствующим взглядом и покачивают головой.
К чему я пришёл:
- Microsoft Reporting Services (только для выгрузки) Ссылка
- Microsoft Office Interop Excel Ссылка
- Microsoft Open XML SDK Ссылка
- EPPlus Ссылка
Microsoft Reporting Services
Средство удобное, позволяет строить отчёты, используя множество различных источников данных и выгружать их в файлы различных форматов. Поддерживается выгрузка в Excel, интегрировано в MS Sharepoint, обладает неплохим редактором отчетов – MS Report Builder.
Microsoft Office Interop Excel
Позволяет работать с файлами *.xls и *.xlsx. В компании, где я работаю, используется для загрузки данных из файлов MS Excel 2003 в базу. Так же данное средство может извлекать данные из файлов с расширением *.xlsx (формат Microsoft Office Open XML).
Microsoft Open XML SDK
Применяется для выгрузки в Excel в формате *.xlsx (Microsoft Office Open XML). Для обеспечения быстродействия и поддержки возможности выгружать большие объёмы данных работа с Microsoft Office Open XML ведётся с помощью Simple API for XML (SAX) Ссылка.
EPPlus
EPPlus позволяет загружать и выгружать данные в формат *.xlsx. Его преимущество перед Open XML SDK – более дружественное API и меньшая трудоемкость. Он гораздо более удобен в работе нежели Open XML SDK. На данный момент он используется в компании в тех случаях, где не обязательно использовать Simple API for XML (SAX).
Заключение
Пошаговое руководство, с помощью которого вы сможете добавить сборку 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 Окончательное решение проблемы
Читайте также: