Библиотека для excel с решением

Полезные макросы Excel для автоматизации рутинной работы с примерами применения для разных задач.

Примеры макросов для автоматизации работы

makrosy-filtra-svodnoy-tablicyМакросы для фильтра сводной таблицы в Excel.
Как автоматизировать фильтр в сводных таблицах с помощью макроса? Исходные коды макросов для фильтрации и скрытия столбцов в сводной таблице.

makros-svodnoy-tablicyМакрос для создания сводной таблицы в Excel.
Как автоматически сгенерировать сводную таблицу с помощью макроса? Исходный код VBA для создания и настройки сводных таблиц на основе исходных данных.

makrosy-dlya-formatirovaniya-yacheekМакросы для изменения формата ячеек в таблице Excel.
Как форматировать ячейки таблицы макросом? Изменение цвета шрифта, заливки и линий границ, выравнивание. Автоматическая настройка ширины столбцов и высоты строк по содержимому с помощью VBA-макроса.

makros-pereimenovat-listyМакрос для копирования и переименования листов Excel.
Как одновременно копировать и переименовывать большое количество листов одним кликом мышкой? Исходный код макроса, который умеет одновременно скопировать и переименовать любое количество листов.



Время на прочтение
5 мин

Количество просмотров 63K

Excel — это чрезвычайно распространённый инструмент для анализа данных. С ним легко научиться работать, есть он практически на каждом компьютере, а тот, кто его освоил, может с его помощью решать довольно сложные задачи. Python часто считают инструментом, возможности которого практически безграничны, но который освоить сложнее, чем Excel. Автор материала, перевод которого мы сегодня публикуем, хочет рассказать о решении с помощью Python трёх задач, которые обычно решают в Excel. Эта статья представляет собой нечто вроде введения в Python для тех, кто хорошо знает Excel.

Загрузка данных

Начнём с импорта Python-библиотеки pandas и с загрузки в датафреймы данных, которые хранятся на листах sales и states книги Excel. Такие же имена мы дадим и соответствующим датафреймам.

import pandas as pd
sales = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name = 'sales')
states = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name = 'states')

Теперь воспользуемся методом .head() датафрейма sales для того чтобы вывести элементы, находящиеся в начале датафрейма:

print(sales.head())

Сравним то, что будет выведено, с тем, что можно видеть в Excel.

Сравнение внешнего вида данных, выводимых в Excel, с внешним видом данных, выводимых из датафрейма pandas

Тут можно видеть, что результаты визуализации данных из датафрейма очень похожи на то, что можно видеть в Excel. Но тут имеются и некоторые очень важные различия:

  • Нумерация строк в Excel начинается с 1, а в pandas номер (индекс) первой строки равняется 0.
  • В Excel столбцы имеют буквенные обозначения, начинающиеся с буквы A, а в pandas названия столбцов соответствуют именам соответствующих переменных.

Продолжим исследование возможностей pandas, позволяющих решать задачи, которые обычно решают в Excel.

Реализация возможностей Excel-функции IF в Python

В Excel существует очень удобная функция IF, которая позволяет, например, записать что-либо в ячейку, основываясь на проверке того, что находится в другой ячейке. Предположим, нужно создать в Excel новый столбец, ячейки которого будут сообщать нам о том, превышают ли 500 значения, записанные в соответствующие ячейки столбца B. В Excel такому столбцу (в нашем случае это столбец E) можно назначить заголовок MoreThan500, записав соответствующий текст в ячейку E1. После этого, в ячейке E2, можно ввести следующее:

=IF([@Sales]>500, "Yes", "No")

Использование функции IF в Excel

Для того чтобы сделать то же самое с использованием pandas, можно воспользоваться списковым включением (list comprehension):

sales['MoreThan500'] = ['Yes' if x > 500 else 'No' for x in sales['Sales']]

Списковые включения в Python: если текущее значение больше 500 — в список попадает Yes, в противном случае — No

Списковые включения — это отличное средство для решения подобных задач, позволяющее упростить код за счёт уменьшения потребности в сложных конструкциях вида if/else. Ту же задачу можно решить и с помощью if/else, но предложенный подход экономит время и делает код немного чище. Подробности о списковых включениях можно найти здесь.

Реализация возможностей Excel-функции VLOOKUP в Python

В нашем наборе данных, на одном из листов Excel, есть названия городов, а на другом — названия штатов и провинций. Как узнать о том, где именно находится каждый город? Для этого подходит Excel-функция VLOOKUP, с помощью которой можно связать данные двух таблиц. Эта функция работает по принципу левого соединения, когда сохраняется каждая запись из набора данных, находящегося в левой части выражения. Применяя функцию VLOOKUP, мы предлагаем системе выполнить поиск определённого значения в заданном столбце указанного листа, а затем — вернуть значение, которое находится на заданное число столбцов правее найденного значения. Вот как это выглядит:

=VLOOKUP([@City],states,2,false)

Зададим на листе sales заголовок столбца F как State и воспользуемся функцией VLOOKUP для того чтобы заполнить ячейки этого столбца названиями штатов и провинций, в которых расположены города.

Использование функции VLOOKUP в Excel

В Python сделать то же самое можно, воспользовавшись методом merge из pandas. Он принимает два датафрейма и объединяет их. Для решения этой задачи нам понадобится следующий код:

sales = pd.merge(sales, states, how='left', on='City')

Разберём его:

  1. Первый аргумент метода merge — это исходный датафрейм.
  2. Второй аргумент — это датафрейм, в котором мы ищем значения.
  3. Аргумент how указывает на то, как именно мы хотим соединить данные.
  4. Аргумент on указывает на переменную, по которой нужно выполнить соединение (тут ещё можно использовать аргументы left_on и right_on, нужные в том случае, если интересующие нас данные в разных датафреймах названы по-разному).

Сводные таблицы

Сводные таблицы (Pivot Tables) — это одна из самых мощных возможностей Excel. Такие таблицы позволяют очень быстро извлекать ценные сведения из больших наборов данных. Создадим в Excel сводную таблицу, выводящую сведения о суммарных продажах по каждому городу.

Создание сводной таблицы в Excel

Как видите, для создания подобной таблицы достаточно перетащить поле City в раздел Rows, а поле Sales — в раздел Values. После этого Excel автоматически выведет суммарные продажи для каждого города.

Для того чтобы создать такую же сводную таблицу в pandas, нужно будет написать следующий код:

sales.pivot_table(index = 'City', values = 'Sales', aggfunc = 'sum')

Разберём его:

  1. Здесь мы используем метод sales.pivot_table, сообщая pandas о том, что мы хотим создать сводную таблицу, основанную на датафрейме sales.
  2. Аргумент index указывает на столбец, по которому мы хотим агрегировать данные.
  3. Аргумент values указывает на то, какие значения мы собираемся агрегировать.
  4. Аргумент aggfunc задаёт функцию, которую мы хотим использовать при обработке значений (тут ещё можно воспользоваться функциями mean, max, min и так далее).

Итоги

Из этого материала вы узнали о том, как импортировать Excel-данные в pandas, о том, как реализовать средствами Python и pandas возможности Excel-функций IF и VLOOKUP, а также о том, как воспроизвести средствами pandas функционал сводных таблиц Excel. Возможно, сейчас вы задаётесь вопросом о том, зачем вам пользоваться pandas, если то же самое можно сделать и в Excel. На этот вопрос нет однозначного ответа. Python позволяет создавать код, который поддаётся тонкой настройке и глубокому исследованию. Такой код можно использовать многократно. Средствами Python можно описывать очень сложные схемы анализа данных. А возможностей Excel, вероятно, достаточно лишь для менее масштабных исследований данных. Если вы до этого момента пользовались только Excel — рекомендую испытать Python и pandas, и узнать о том, что у вас из этого получится.

А какие инструменты вы используете для анализа данных?

Напоминаем, что у нас продолжается конкурс прогнозов, в котором можно выиграть новенький iPhone. Еще есть время ворваться в него, и сделать максимально точный прогноз по злободневным величинам.

Библиотека функций в Excel

​Смотрите также​ потомственный программист по​ выборе способа реализации​C_sanches​ на лыжах мечтает…​​2. TMS FlexCel​​ запаковать не получилось.​ в указанном вами​ его в dataset.​ мало где используется.​ решить вашу «проблему».​: Здравствуйте, не могу​В меню​ Вы увидите результат.​ увидите, как вставить​содержит функции для​ результаты для наиболее​В этом уроке мы​ C#​ функции отпал. Нужна​

​: а каким образом​Ну а по​ — из всех​ Походу руки кривые​ компоненте не нашел​Насчет картинок не​ Так что остановлюсь​Рекомендую не использовать​ объявить Excel в​Сервис​ Результат показывает, что​ функцию из библиотеки​

Как получить доступ к библиотеке

​ работы с датами​ распространенных функций Excel,​ познакомимся с самым​, думаю на указанно​ именно библиотека. Желательно​ его встроить в​ поводу «будет использовать​​ 3 испытанных на​​ у меня.)))​

Библиотека функций в Excel

​ функции открытия готового​ знаю не пробовал…​ на «родном» варианте​

Вставить функцию

​ для обработки документов​ коде c#, так​выберите пункт​ доставка заказа заняла​​ Excel, позволяющую вычислить​​ и временем в​ таких как СУММ,​ объемным и часто​

Библиотека функций в Excel

Автосумма

​ ресурсе и здесь,​​ на C#.​​ файл Excel?​ на разных ПК​ данный момент больше​qwertehok​ шаблона.​umatkot​

Библиотека функций в Excel

Последние

​serg4242​​ сам офис (эта​​ как нужен дальнейший​Ссылки​ 4 рабочих дня.​ количество рабочих дней,​

Библиотека функций в Excel

Финансовые

​ формулах. Например, функция​​ СРЗНАЧ, СЧЕТ, МАКС​​ посещаемым разделом Microsoft​ на планете, есть​bedvit, подскажите, пожалуйста,​​The_Prist​​ в разных книгах»​ всего понравилась. Не​​: работает​​qwertehok​

Библиотека функций в Excel

Логические

​:​​: Подскажите компонент для​​ библиотека — «мостик»​ экспорт данных из​.​Так же, как и​ в течение которых​СЕГОДНЯ​ и МИН.​ Excel –​ специалисты по С#​ какие нибудь статьи​: Смотря какие вычисления​ — неясно, в​​ нашел косяков +​​да нет же,​

Библиотека функций в Excel

Текстовые

​: откройте примеры -​​yagami2​​ работы с Excel.​ между вашим приложением​ датагрид в эксель.​В разделе​ формулы, функции в​ должна быть произведена​возвращает текущую дату,​Команда​​Библиотекой функций​​ намного прокаченней меня.​ о создании библиотеки​ должны производиться. Если​​ чем проблема для​​ работа с файлами​

Библиотека функций в Excel

Дата и время

​ работает она с​​ там есть чтение​​, кажется, это делается​ Надо: читать .xls​ и офисом). Для​ Референсы на офис​​Доступные ссылки​​ Excel могут быть​ доставка товара. В​​ а функция​​Последние​. Мы рассмотрим структуру​

Библиотека функций в Excel

Ссылки и массивы

​ Из литературы я​​ на C# для​​ громоздкие, то смотреть​ макросов. У меня​ формата xml, Xls,​ xlsx​ xls​​ стандартным ODBC драйвером​​ и .xlsx, в​ таких целей можно​ добавил все. Подскажите,​установите флажок для​ скопированы в смежные​​ нашем случае мы​​ТДАТА​

Библиотека функций в Excel

Математические

​дает доступ к​​ библиотеки, из каких​​ пользовался гуглом -​ подключения ее потом​ стоит в сторону​ много таких и​ Xls.​ну посмотри ты​плохо​​ и, кстати, делает​​ идеале с возможностью​ использовать сторонние библиотечки,​​ с какого боку​​ библиотеки объектов, которую​​ ячейки. Наведите курсор​​ будем использовать данные​​дополнительно к дате​​ функциям Excel, с​

Библиотека функций в Excel

Другие функции

​ категорий и команд​​ тем, библиотек, примеров​​ в Excel’е. Или​ C++ и создания​ проблем нет. Может​3. zexmlss простенькая​ примеры — они​Setix​ это рекордно быстро,​ чтения картинок из​ которые позволяют работать​

Библиотека функций в Excel

Как вставить функцию из библиотеки

​ зайти.​ требуется задействовать в​ на ячейку, которая​ в столбцах B​ еще и время.​ которыми Вы работали​ она состоит. К​ на С# -​ примеры такой реализации,​ XLL. Вычисления по​ тут стоит пояснить​ библиотека с исходным​ идут вместе​

  1. ​: В общем формируется​ как вставка данных​ ячеек; создавать документы.​ с документами напрямую,​Библиотека функций в Excel
  2. ​P.S. В Visual​​ вашем проекте Visual​​ содержит функцию. Затем​ и C для​​В категории​​ недавно.​
  3. ​ каждой категории приведено​​ множество.​​ буду очень благодарен!​ скорости тогда дадут​ точнее проблему следует?​​ кодом, доступно описан​​PS я писал​Библиотека функций в Excel
  4. ​ временная таблица с​ в DataSet, так​ Сейчас использую Microsoft​​ без необходимости иметь​​ studio 2012 я​ Basic.​ нажмите левую кнопку​ расчета времени доставки.​Библиотека функций в Excel
  5. ​Ссылки и массивы​​Категория​​ небольшое описание, которое​К Примеру:​Андрей VG​ фору всем остальным​ЦитатаC_sanches написал: на​ класс. От остальных​​ в xlsxlsx точно,​​ помощью SQL запроса​ и загрузка в​​ Office, но он​​ на машине установленный​
  6. ​ совсем чайник.​Примечание:​​ мыши и, не​​Выделите ячейку, которая будет​Библиотека функций в Excel
  7. ​содержатся функции, которые​Финансовые​ даст Вам общее​на Хабрахабре.​: Доброе время суток.​Библиотека функций в Excel

​ вариантам.ЦитатаC_sanches написал:​ каком языке лучше​ отстает тем что​ читал из экселя​ в БД. В​ Excel из DataSet.​ не на всех​ офис.​MansMI​ Чтобы ускорить компиляцию, снимите​ отпуская ее, перетащите​ содержать формулу. В​ предназначены для просмотра​содержит функции для​ представление о предназначении​Сразу вам скажу,​C_sanches, есть такой​

Библиотека функций в Excel

​Макросы в их​

office-guru.ru

Добавление библиотек объектов в проект Visual Basic

​ писатькакой лучше знаете​​ нет возможности работать​ точно​ шаблоне Excel указывается​Setix​ машинах стоит. Также​Погуглите OpenXML SDK​: C# using System.Runtime.InteropServices;​ флажки для библиотек​ маркер автозаполнения по​ нашем примере это​ и поиска информации.​ финансовых расчетов, например,​ функций, входящих в​ если вы хорошо​ проект , там​ файлах не используютсяИ​ЦитатаC_sanches написал: будет​ с диаграммами и​krapotkin​ место вывода таблицы​: Кто может посоветовать​

​ работал с NPOI,​ или ClosedXML.​ using Excel =​ объектов, которые не​ ячейкам, которые необходимо​

Добавление объекта

​ ячейка D3.​ Например, Вы можете​ сумма периодического платежа​ библиотеку. В конце​ знаете VBA, но​ достаточно много и​

  1. ​ что? Нельзя использовать?​​ ли приводить вызов​​ комментарием, Они хоть​​: для работы с​​ с помощью спец.​

    Выбор параметров меню '' Сервис ''

  2. ​ библиотеку или компоненты​​ но он не​​MsGuns​ Microsoft.Office.Interop.Excel; ……………… //Проект/Добавить​ будут использоваться в​ заполнить. Функция будет​Выберите вкладку​

    Диалоговое окно доступные ссылки

    ​ добавить гиперссылку (​​ПЛТ​ урока мы на​ не знаете C#,​ примеров, есть и​ Т.к.ЦитатаC_sanches написал:​

  3. ​ функции в этой​ и описаны в​ файлами Excel довольно​​ меток (а также​​ для работы с​ поддерживает .xlsx. Желательно​: Спасибо за ответ.​ ссылку/NET/Microsoft.Office.Interop.Excel //http://www.sql.ru/forum/620401/funkcii-dlya-raboty-s-excel-iz-c try​​ проекте.​​ скопирована, а значения​

  4. ​Формулы​​ГИПЕРССЫЛКА​​или процентная ставка​ примере разберем, как​​ написать надстройку .xlam​​ группа, обсуждающая вопросы​им нужна некая​

  5. Найдите объект

Отображение вкладки «Разработчик»

  1. ​ библиотеке к зависанию​​ классе, но сохраняются​​ неплохо подходит Libre​​ нужные колонки (тоже​​ файлами (Xls и​​ простой, быстрый и​​Ссылка на библиотеку​

  2. ​ { app =​​Чтобы задать порядок доступа​​ вычислены в зависимости​​на Ленте, чтобы​​) в ячейку или​​ по кредиту​​ вставить функцию из​

  3. ​ вам будет значительно​​ использования. В частности​​ функция, которой нет​​ или крашу Excel’я?зависит​​ только в формате​

support.office.com

Как подключить библиотеки для работы с Excel

​ Office, который тоже​​ спец метки)). Суть:​ Xlsx). Желательно чтобы​ с нормальным описанием.​ добавляется (Core),но interopt​ new Excel.Application(); app.Workbooks.Open(tbFile.Text,​ к библиотекам объектов,​ от строк или​ открыть​ вернуть значение, которое​СТАВКА​
​ библиотеки.​ проще и быстрее.​ bedvit создал свою​

​ в Excelто её​​ от того, как​ Xml, Xslx формат​ поддается автоматизации​ прочитать шаблон, найти​ работать можно было​lexus-tikhvin​ не появляется. Поставил​ obj, obj, obj,​ в разделе​ столбцов.​Библиотеку функций​

CyberForum.ru

Библиотека для работы с Excel в Windows Form

​ расположено на пересечении​​.​
​В Microsoft Excel имеются​ Но если уж​ библиотеку с использованием​ и можно написать​ напишите код библиотеки.​
​ их вырезает.​еще есть TMS​ метки, вывести между​ без установки Excel.​: OfficeOpenXml.​ вместо 2003-го 2007-й​ obj, obj, obj,​Доступные ссылки​Автор: Антон Андронов​.​ заданных строки и​
​Функции из категории​ сотни самых различных​ вы решили… дерзайте​
​ этого проекта.​ как раз на​
​ Напишите правильно -​C_sanches​

​ FlexCell​​ метками информацию. В​​qwertehok​​Не уверен насчет​ офис и все​ obj, obj, obj,​
​выберите любую библиотеку​Примечание:​В группе команд​ столбца (​Логические​ функций, которые делятся​bedvit​Успехов.​ VBA и использовать​ не будет приводить.​:​Setix​ связи с этим​
​: платный или бесплатный?​ чтения, использую для​

​ заработало.​​ obj, obj, obj,​
​ и переместите ее​Мы стараемся как​Библиотека функций​ИНДЕКС​используются для проверки​ по категориям. Все​
​: Причем для увеличения​bedvit​ на листе:​C_sanches​Всем привет!​

​: И так опробовал​​ формирование шаблона на​​Setix​​ быстрого создания и​xxxxXML установить не​ obj, obj); }​​ вверх или вниз​​ можно оперативнее обеспечивать​, выберите нужную категорию.​).​ аргументов на соответствие​ эти функции составляют​ быстродействия, в моем​: C_sanches, почитайте, то​

​bedvit​​: Пользователи уже имеют​​Нужно написать функцию со​​ 3 библиотеки:​ уровне кода не​: В идеале бесплатный.​ форматирования excel-файла.​ могу, т.к. по​MsGuns​ с помощью кнопок​ вас актуальными справочными​ В нашем случае​Категория​ определенному значению или​ общую библиотеку. Вам​

CyberForum.ru

Независимая библиотека для работы с Excel

​ случае, использовались библиотеки​​ что советует Андрей​: C_sanches, все зависит​ Excel-файлы со всеми​ сложными вычислениями. И​1. XLSReadWriteII 5.2,​ приемлемо так как​ Просто пока ничего​Rius​ требованию заказчика, проект​: Здравствуйте !​приоритета​ материалами на вашем​ мы выберем​Математические​ условию. Например, если​ нет необходимости досконально​

​ написанные на С​​ VG, ExcelDNA -​
​ от ваших знаний,​ вычислениями, которые доступны​ возникло несколько вопросов:​TMS FlexCell,​

​ шаблон доступен для​​ найти не могу​: Если пойдёт только​ должен быть в​Необходимо в проекте​.​

​ языке. Эта страница​​Дата и время​​включает в себя​​ сумма заказа меньше​ изучать каждую функцию,​
​ с ассемблерными вставками​

​ в некоторых случаях​​ вот использования библиотеки,​ Excel без сторонних​1. Что лучше, сохранить​zexmlss​ правки пользователю (форматирование​ путного. Требуется на​ xlsx, то упомянутый​
​ «чистой» VS-2012​
​ работать с книгами​

​Чтобы добавить в раздел​​ переведена автоматически, поэтому​.​ функции для обработки​
​ $50, то добавляется​
​ но познакомиться с​ (сторонние), здесь я​ очень полезная разработка,​
​ написанной на C#​ библиотек и надстроек.​

​ код как надстройка​​Не много о​​ строк, столбцов). Нужен​​ основе шаблона сделать​ выше способ. Как​Usaga​ Excel. Для этого,​Доступные ссылки​ ее текст может​Выберите нужную функцию из​ числовых аргументов, выполняющие​

CyberForum.ru

Xls и Xlsx библиотеки и компоненты для работы с файлами

​ цена доставки $4.99,​​ несколькими основными из​ пасс… Поэтому прирост​ особенно если вы​ для Excel (VBA)​ Но им нужна​ (*.xla) или в​ каждой:​

​ компонент или библиотека​​ отчет без использования​

​ начать: Генерируем OfficeOpenXML-документы​​:​ как я узнал,​другую библиотеку, нажмите​ содержать неточности и​ выпадающего меню. Мы​ различные математические и​ а если больше,​

​ каждой категории будет​​ производительности от обычного​
​ планируете писать на​ (автором этих строк).​
​ некая функция, которой​ отдельную библиотеку (макрос​1. Начну с​ чтобы прочитать файл​ Excel.​
​ за 5 минут.​MsGuns​

​ используется библиотека Microsoft.Office.Interop.Excel.​​ кнопку​ грамматические ошибки. Для​ выберем функцию​ тригонометрические вычисления. Например,​ то стоимость доставки​ весьма полезно.​ кода на С#​ C# для Excel​ Используется для расчета​ нет в Excel,​ не подойдет, т.к.​ платной XLSReadWriteII 5.2​ заполнить данными и​qwertehok​NewOrdered​, установка библиотеки «чистоту»​

​Но если ее​​Обзор​ нас важно, чтобы​ЧИСТРАБДНИ​
​ вы можете округлить​

​ не взимается. В​​Чтобы получить доступ к​ в dll/xll и​ (VBA). Скачайте и​ больших чисел (длинная​ поэтому и встал​ функция будет использоваться​ — обладает почти​ сохранить.​: на форуме обсуждался​:​ проекта не портит.​ добавить явно в​и укажите путь​ эта статья была​, чтобы вычислить количество​ значение (​ данном примере целесообразно​ библиотеке функций Excel,​ VBA в xlam​ установите Microsoft Visual​ арифметика).​ вопрос о написании​ в нескольких Excel-книгах​ полным функционалом для​

​qwertehok​​Приёмы работы с​serg4242​ К тому же,​ Using, то компилятор​

​ к необходимому файлу.​​ вам полезна. Просим​ рабочих дней между​ОКРУГЛ​
​ использовать функцию​ выберите вкладку Формулы.​ возможно будет не​
​ Studio 2015 (бесплатная​Но это когда​ библиотеки. Пользователь только​​ на разных ПК)​​ работы с файлами​: я тебе написал​ zexmlss​, взгляните на эту​Microsoft.Office.Interop.Excel​ ругается на отсутствие​На верхней панели выберите​ вас уделить пару​ датами заказа и​

​), найти значение Пи​​ЕСЛИ​
​ Все возможные категории​ столь высок, что​ версия, с незначительными​
​ критически важно считать​ подключит ее и​2. Если это библиотека,​
​ xlsx и xls.​ уже — эта​отличный компонент, на​ библиотеку​

​- тоже сторонняя​​ ‘Office’ в пространстве​Excel​ секунд и сообщить,​ получения товара.​ (​
​.​ и команды вы​

​ бы компенсировать быстроту​​ для ваших целей​ быстро и наиболее​
​ сможет использовать. Макросы​
​ то на каком​
​ Много различных классов​
​ библиотека позволяет читать​ сайте есть все​
​http://epplus.codeplex.com/​ библиотека, её в​ имен. Попытка добавить​>​ помогла ли она​Появится диалоговое окно​ПИ​В категории​ можете увидеть в​ разработки в VBA,​ ограничениями).​ эффективно использовать ресурсы​ в их файлах​ языке лучше писать​ и описаний, и​ экселевские файлы​ примеры и почта​umatkot​ .NET нету, тащится​ ссылку через обозреватель​настройки​ вам, с помощью​Аргументы функции​), произведение (​Текстовые​
​ группе​ и преодоления порога​Поделайте простые задания,​ ПК.​ не используются.ЦитатаThe_Prist написал:​ (подойдет ли C#)?​ прочего. На версии​Setix​ автора — связаться​
​: Странно, заметил, за​ с офисным пакетом.​ решений (раздел COM,​>​ кнопок внизу страницы.​. Здесь вы можете​ПРОИЗВЕД​содержатся функции, которые​Библиотека функций​ вхождения в новый​ к примеру, .​В вашем случае,​ какой лучше знаетет.е.​

CyberForum.ru

Написание библиотеки для Excel

​3. Вычисления будут сложными​​ 5,2 нашел 1​

​: Поставил библиотеку посмотрел​

​ можно​ собой черту, что​ Так, что условие​

​ библиотека Microsoft Excel​панель инструментов и ленты​ Для удобства также​ ввести или выбрать​), промежуточные итоги (​ работают с текстом​.​ язык.​

​ Там же можно​ возможно, можно просто​ нет принципиальной разницы,​ и их будет​

​ косяк при попытке​ с чем работает​из платных -​ всегда при ответе,​ «чистоты» вы уже​ 12.0 Object Library)​.​ приводим ссылку на​

​ ячейки, которые будут​

​ПРОМЕЖУТОЧНЫЕ.ИТОГИ​​ в качестве значений​Разберем, какую задачу выполняет​C_sanches​ создать тему, если​ обойтись надстройкой (*.xla)​ на чем будет​ очень много. Используя​
​ записать ячейку с​ она.​ XLSReadWriteII​ получается, что с​ нарушили.​ проблему не решила.​В разделе​ оригинал (на английском​ составлять аргументы. Мы​) и многое другое.​ аргументов. С помощью​
​ каждая из команд​: Андрей VG, bedvit,​ вам потребуется помощь​
​ или (*.xlam)​ написана библиотека? В​ библиотеку, будет ли​ данными в формате​1. Работу с​Setix​ кем-то спорю. Так​MsGuns​Студия 2012, на​

​Настройка ленты​​ языке) .​ введем B3 в​Раздел​ них можно решать​ группы:​ спасибо за ссылки​ (это не реклама),​bedvit​ плане скорости работы​ приводить вызов функции​ «{}» вместо фигурной​ файлами Xls совсем​: zexmlss: там идет​ вот же: закон​:​ ПК установлен Excel​выберите​В своем коде можно​ поле​Другие функции​ такие задачи, как​Если у Вас возникли​ и пояснения.​ может и я​

​: Это проще и​​ и возможности добавить​ в этой библиотеке​ скобки «}» выводит​ не обнаружил.​ создание самого шаблона​ подлости.​

​Usaga​​ 2003​Основные вкладки​ задействовать другие объекты​

​Нач_дата​​содержит дополнительные категории​ преобразование текста в​ проблемы с поиском​C# выбран, т.к.​ чем-то смогу помочь​ нужно только знания​ функцию, которая будет​ к зависанию или​ — «/» на​
​2. Там представленна​ с помощью кода.​Используйте ClosedXml)))​, Спасибо еще раз,​
​Подскажите, пожалуйста, что​и установите флажок​ приложения, задав ссылки​и С3 в​ библиотеки функций, такие​ нижний регистр (​ необходимой функции в​

​ его знаю (что​​ (когда будет время).​ VBA.​ доступна потом в​ крашу Excel’я?​ более поздних версиях​ работа с xml​ У меня не​https://github.com/ClosedXML​ но, судя по​
​ делать.​Разработчик​ на библиотеку объектов​ поле​ как Статистические, Инженерные,​
​СТРОЧН​ Excel, команда​ не сказать о​ Потом, если вы​

​C_sanches​​ ячейках Excel’я​Спасибо!​ не могу сказать​

​ и​​ много другая задача.​yagami2​ количеству материала в​Спасибо за любую​.​ этого приложения.​
​Кон_дата​ Аналитические, Проверка свойств​) или замена части​Вставить функцию​ VBA).​
​ поймете, что это​: именно это и​Пытливый​The_Prist​ не тестировал. Сохраняет​РАСПАКОВАННЫМ​ Шаблон условно создает​: Меня в своем​

​ Сети, interop, пожалуй,​​ помощь​
​Нажмите кнопку​На вкладке «Разработчик» откройте​.​ и значений, а​ текста на другое​позволяет найти ее​Буду пробовать реализовывать​ для вас интересно​ важно в моей​
​: Если встроить код​

​: вопрос из разряда​​ все стандартные форматы​xlsx файлом. При​ пользователь. Моя цель​ время вот эта​ самый популярный вариант​Usaga​Сохранить​ окно проекта Visual​Если аргументы введены правильно,​ также функции, оставленные​ значение (​ при помощи ключевых​ то, что задумал.​ и вы готовы​
​ задаче. Только будут​ функции в файл,​ «как провести лето».​ (xml,xls,xlsx). Есть возможность​ этом не приведены​ открыть этот шаблон​ библиотека очень выручила​ работы из шарпа​:​и закройте​ Basic. Увидеть вкладки​ нажмите​ для поддержки совместимости​ЗАМЕНИТЬ​ слов.​ Еще раз всем​ писать на C#,​ использоваться не большие​ то эта функция​:)​ Кому-то нравится дикарем​ перевода в другие​ примеры, чем запаковывать​ взять данные что​https://exceldatareader.codeplex.com/​ с Экселем. Поменял​MsGuns​Параметров Excel​ «разработчик» отображается ниже,​ОК​
​ с предыдущими версиями​
​).​
​Команда​ спасибо. Если будут​ далее почитайте по​ числа, а большое​ будет доступна в​ на море, кому-то​ форматы Html и​ файл потом. Попробовал​ есть в шаблоне​:)

​Берет excel файл​​ офис, все равно​, добавление ссылки на​.​ если она еще​.​ Excel.​Категория​Автосумма​ вопросы, обязательно сюда​ COM, XLL, DLL.​ количество небольших чисел.​ файле, в чем​ All-inclusive подавай, а​ прочие. Подробнее на​ поработать с распакованным​ и по ним​ и целиком пихает​ старый 2003 сейчас​

​ эту библиотеку должно​​Loathem​ не открыта.​Функция будет вычислена, и​
​В следующем примере Вы​Дата и время​позволяет автоматически вычислять​ обращусь.​
​ Признаться я не​UPD: Вопрос о​ проблема? Пользовательская функция.​ кто-то в Альпы​ сайте у производителя.​ файлом, а потом​

planetaexcel.ru

​ заполнить отчет. Просто​

30 / 21 / 9

Регистрация: 22.11.2014

Сообщений: 111

1

08.11.2017, 20:44. Показов 5643. Ответов 6


Студворк — интернет-сервис помощи студентам

Подскажите компонент для работы с Excel. Надо: читать .xls и .xlsx, в идеале с возможностью чтения картинок из ячеек; создавать документы. Сейчас использую Microsoft Office, но он не на всех машинах стоит. Также работал с NPOI, но он не поддерживает .xlsx. Желательно простой, быстрый и с нормальным описанием.



0



21 / 21 / 9

Регистрация: 11.09.2013

Сообщений: 72

13.11.2017, 09:53

2

OfficeOpenXml.
Не уверен насчет чтения, использую для быстрого создания и форматирования excel-файла.



1



467 / 231 / 72

Регистрация: 25.05.2012

Сообщений: 1,013

Записей в блоге: 1

16.11.2017, 13:22

4

serg4242, взгляните на эту библиотеку
http://epplus.codeplex.com/



0



187 / 100 / 19

Регистрация: 15.09.2011

Сообщений: 801

21.11.2017, 10:40

5

Странно, заметил, за собой черту, что всегда при ответе, получается, что с кем-то спорю. Так вот же: закон подлости.
Используйте ClosedXml)))
https://github.com/ClosedXML



1



21 / 19 / 4

Регистрация: 15.01.2015

Сообщений: 202

21.11.2017, 12:01

6

Меня в своем время вот эта библиотека очень выручила
https://exceldatareader.codeplex.com/
Берет excel файл и целиком пихает его в dataset.
Насчет картинок не знаю не пробовал…



0



187 / 100 / 19

Регистрация: 15.09.2011

Сообщений: 801

22.11.2017, 13:23

7

yagami2, кажется, это делается стандартным ODBC драйвером и, кстати, делает это рекордно быстро, как вставка данных в DataSet, так и загрузка в Excel из DataSet.



0



Все привет, в этой статье опишу исчерпывающие примеры работы с excel на языке C#.

Для начала работы нам необходимо подключить библиотеку COM как на рисунке ниже:

Для этого добавляем ссылку в проект, надеюсь вы знаете как это делается) Выбираем пункт COM ищем библиотеку Microsoft Excel 16.0 Object Library ставим галочку и жмем Ок.

Далее нам не обходимо для сокращения записи и удобства создать алиас.

using Excel = Microsoft.Office.Interop.Excel;

Теперь нам нужно объявить объект Excel задать параметры и приступать к работе.

//Объявляем приложение

            Excel.Application app = new Excel.Application

            {

                //Отобразить Excel

                Visible = true,

                //Количество листов в рабочей книге

                SheetsInNewWorkbook = 2

            };

            //Добавить рабочую книгу

            Excel.Workbook workBook = app.Workbooks.Add(Type.Missing);

            //Отключить отображение окон с сообщениями

            app.DisplayAlerts = false;

            //Получаем первый лист документа (счет начинается с 1)

            Excel.Worksheet sheet = (Excel.Worksheet)app.Worksheets.get_Item(1);

            //Название листа (вкладки снизу)

            sheet.Name = «Имя должно быть не больше 32сим»;

Пример заполнения ячейки:

           //Пример заполнения ячеек №1

            for (int i = 1; i <= 9; i++)

            {

                for (int j = 1; j < 9; j++)

                    sheet.Cells[i, j] = String.Format(«nookery {0} {1}», i, j);

            }

            //Пример №2

            sheet.Range[«A1»].Value = «Пример №2»;

            //Пример №3

            sheet.get_Range(«A2»).Value2 = «Пример №3»;

Захват диапазона ячеек:

            //Захватываем диапазон ячеек Вариант №1

            Excel.Range r1 = sheet.Cells[1, 1];

            Excel.Range r2 = sheet.Cells[9, 9];

            Excel.Range range1 = sheet.get_Range(r1, r2);

            //Захватываем диапазон ячеек Вариант №2

            Excel.Range range2 = sheet.get_Range(«A1»,«H9» );

Оформление, шрифт, размер, цвет, толщина.

            //Шрифт для диапазона

              range.Cells.Font.Name = «Tahoma»;

              range2.Cells.Font.Name = «Times New Roman»;

            //Размер шрифта для диапазона

              range.Cells.Font.Size = 10;

            //Жирный текст

              range.Font.Bold = true;

            //Цвет текста

              range.Font.Color = ColorTranslator.ToOle(Color.Blue);

Объединение ячеек в одну

  //Объединение ячеек с F2 по K2

    Excel.Range range3 = sheet.get_Range(«F2», «K2»);

    range3.Merge(Type.Missing);

Изменяем размеры ячеек по ширине и высоте

//увеличиваем размер по ширине диапазон ячеек

   Excel.Range range2 = sheet.get_Range(«D1», «S1»);

   range2.EntireColumn.ColumnWidth = 10;

//увеличиваем размер по высоте диапазон ячеек

   Excel.Range rowHeight = sheet.get_Range(«A4», «S4»);

   rowHeight.EntireRow.RowHeight = 50;range.EntireColumn.AutoFit();range.EntireColumn.AutoFit(); //авторазмер

Создаем обводку диапазона ячеек

Excel.Range r1 = sheet.Cells[countRow, 2];

Excel.Range r2 = sheet.Cells[countRow, 19];

Excel.Range rangeColor = sheet.get_Range(r1, r2);

rangeColor.Borders.Color = ColorTranslator.ToOle(Color.Black);

Производим выравнивания содержимого диапазона ячеек.

  Excel.Range r = sheet.get_Range(«A1», «S40»);

  //Оформления

  r.Font.Name = «Calibri»;

  r.Cells.Font.Size = 10;

  r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

  r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

Примеры вычисления формул, все вставки формул были скопированы из самой Excel без изменений. Позиция ячейки взята из счетчика переменно и подставлен к букве ячейки

sheet.Cells[countRow, countColumn] = $«=G{countRow}-F{countRow}»;

sheet.Cells[countRow, countColumn].FormulaLocal = $«=ЕСЛИ((H{countRow}*O{countRow})+(I{countRow}*P{countRow})/100<=0;J{countRow}*O{countRow}/100;((H{countRow}*O{countRow})+(I{countRow}*P{countRow}))/100)»;

sheet.Cells[countRow, countColumn] = $«=K{countRow}+N{countRow}-R{countRow}»;

sheet.Cells[33, 22].FormulaLocal = «=СУММ(V3:V32)»;

Добавляем разрыв страницы.

//Ячейка, с которой будет разрыв

Excel.Range razr = sheet.Cells&#91;n, m] as Excel.Range;

//Добавить горизонтальный разрыв (sheet — текущий лист)

sheet.HPageBreaks.Add(razr);

//VPageBreaks — Добавить вертикальный разрыв

Как открыть фаил Excel

app.Workbooks.Open(@»C:UsersUserDocumentsExcel.xlsx»,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing);

Сохраняем документ Excel

app.Application.ActiveWorkbook.SaveAs(«MyFile.xlsx», Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Завершение работы с объектом Excel.Application

app.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

Пример как выбрать фаил и загрузив его и узнать количество заполненных строк и колонок в одном конкретном листе по имени.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect =false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

            //рабоата с Excel

            Excel.Range Rng;            

            Excel.Workbook xlWB;

            Excel.Worksheet xlSht;

            int iLastRow, iLastCol;

            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel

            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл          

            xlSht = xlWB.Worksheets[«Лист1»]; //или так xlSht = xlWB.ActiveSheet //активный лист

            iLastRow = xlSht.Cells[xlSht.Rows.Count, «A»].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А

            iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке

Получаем список всех загруженных книг «листов» из файла

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

  //поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

Excel.Workbook xlWB = ex.Workbooks.Open(xlFileName);

///загружаем список всех книг

            foreach (object item in xlWB.Sheets)

            {

                Excel.Worksheet sheet = (Excel.Worksheet)item;

            }

Содержание

  • Введение
  • Добавление необходимых ссылок в решение
  • Работа с объектом Application (Excel)
    • Запуск и остановка Microsoft Excel в C#
    • Создание рабочей книги Excel в C#
    • Работа с листами Excel в C#. Hello Excel
  • Итого

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

При разработки различных программ для анализа данных нередко требуется не только обрабатывать большие массивы данных, но и предоставить конечному пользователю удобно оформленный отчёт о работе программного обеспечения. В сегодняшних реалиях экономия килобайт оперативной памяти при разработке программного обеспечения уже не так важна по сравнению с удобством работы программного продукта. Не секрет, что при работе в Windows для наиболее удобного представления табличных данных является Microsoft Excel. В этой и других статьях, посвященных работе с Excel в .NET Core и C# я постараюсь рассмотреть наиболее частые задачи по импорту и экспорту данных между приложением и Microsoft Excel. Сегодня мы рассмотрим как использовать MS Excel в .NET Core, используя технологию COM.

Введение

Разработка программ, взаимодействующих с пакетом Microsoft Office, вне зависимости от среды разработки, будь то Visual Studio С# или Delphi, основана на применении так называемой объектной модели Microsoft Office. Взаимодействие с объектами такой модели базируется на технологии OLE (Object Linking and Embedding, связывание и внедрение объектов), которая, в свою очередь, использует технологический стандарт COM (Component Object Model — модель компонентного объекта).

Существует достаточно много решений, позволяющих работать с Microsoft Excel в Visual Studio .NET о которых мы, вполне возможно, поговорим позднее. Сейчас же мы будем учиться использовать возможности Microsoft Excel, опираясь исключительно на объектную модель Microsoft Office и те возможности, которые она предоставляет разработчикам, так сказать, «из коробки».

Добавление необходимых ссылок в решение

Для подключения в решение библиотек для взаимодействия с Microsoft Excel необходимо добавить добавьте следующие ссылки:

  • Microsoft Excel 16.0 Object Library
  • Microsoft Office 16.0 Object Library

В Visual Studio это делается следующим образом:

1. В «Обозревателе решений» кликаем правой кнопкой мыши по строке «Зависимости» и выбираем пункт «Добавить ссылку на модель COM»

2. В открывшемся окне в строке поиска набираем «Microsoft», выбираем необходимые ссылки, то есть Microsoft Excel 16.0 Object Library и Microsoft Office 16.0 Object Library и жмем «Ok»:

После этого, в обозревателе решений для нашего проекта в зависимостях появятся следующие ссылки:

Зависимости
   COM
      Interop.Microsoft.Office.Core
      Interop.Microsoft.Office.Interop.Excel
   Платформы
      Microsoft.NetCore.App

Теперь, чтобы наше решение для .NET Core могло полноценно использовать возможности Microsoft Excel необходимо указать в решении, что все типы, используемые в объектной модели Microsoft Office будут использоваться в нашей сборке. Чтобы это сделать выбираем в зависимостях нашего решения каждую ссылку из раздела COM и в разделе «Свойства» указываем напротив пункта «Внедрить типы взаимодействия» значение «Да». На рисунке ниже представлен пример для ссылки Interop.Microsoft.Office.Core

Если не выполнить эти действия, то при разработки приложения .NET Core при попытке работы с Excel вы получите следующую ошибку:

System.IO.FileNotFoundException HResult=0x80070002
Сообщение = Could not load file or assembly ‘office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c’. Не удается найти указанный файл.
Источник = <Не удается определить источник исключения>
Трассировка стека: <Не удается определить трассировку стека исключения>

Работа с объектом Application (Excel)

Объект Application представляет всё приложение Microsoft Excel. С помощью этого объекта в C# мы можем запускать и останавливать работу Excel, получать доступ к рабочим книгам Excel и так далее. Посмотрим, как можно взаимодействовать с Excel в C#, используя объект Application.

Запуск и остановка Microsoft Excel в C#

Чтобы продемонстрировать запуск и остановку Excel в C# подключим в наше решение пространство имен Microsoft.Office.Interop.Excel, используя псевдоним:

using Excel = Microsoft.Office.Interop.Excel;

Теперь напишем следующий код для метода Main():

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace ExcelApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application application = new Excel.Application();
            Console.WriteLine("Объект Excel.Application создан");
            Console.ReadKey();
            application.Visible = true;
            Console.WriteLine("Окно Excel видно пользователю");
                        
            Console.ReadKey();
            Console.WriteLine("Закрываем Excel");
           
            application.Quit();
            Marshal.ReleaseComObject(application);
        }
    }
}

Разберемся с тем, что происходит в нашем приложении при запуске. Вначале мы создаем объект application типа Excel.Application (Excel — псевдоним пространства имен Microsoft.Office.Interop.Excel). После выполнения этой строки кода происходит запуск процесса Microsoft Excel. Убедиться в этом можно, открыв диспетчер задач Windows и заглянув в раздел «Фоновые процессы»:

Чтобы показать главное окно Excel пользователю, мы устанавливаем значение true свойству Visible:

application.Visible = true;

И, наконец, для того, чтобы закрыть Excel и освободить память, занятую процессом Excel мы вызываем метод Quit().

application.Quit()

Таким образом, всё, что пока делает наше приложение .NET Core — это запускает процесс Microsoft Excel, показывает окно Excel и закрывает приложение. При этом, стоит обратить внимание на следующий момент: так как чаще всего мы будем взаимодействовать с Excel в C# в фоновом режиме без показа главного окна, то по окончанию взаимодействия необходимо обязательно вызывать метод Quit() объекта Application и вызвать метод объекта Marshal.ReleaseComObject(application) из пространства имен System.Runtime.InteropServices. Если этого не сделать, то после N запусков нашего приложения мы рискуем «забить» оперативную память компьютера неиспользуемыми процессами Excel, так как после остановки нашего приложения и вызова Quit() внешний процесс (Excel) автоматически не завершается. Продемонстрировать это можно, написав всего две строки кода:

static void Main(string[] args)
  {
      Excel.Application application = new Excel.Application();
      application.Quit();
  }

и запустить приложение несколько раз. Например, на рисунке ниже показан диспетчер задач после трех запусков нашего приложения:

Создание рабочей книги Excel в C#

Следующий пример демонстрирует создание новой рабочей книги Excel в C#:

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace ExcelApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //Объявляем переменную приложения Excel 
            Excel.Application application = null;
            //объявляем переменные для коллекции рабочих книг 
            //и одной рабочей книги
            Excel.Workbooks workbooks = null;
            Excel.Workbook workbook = null;
            try
            {
                //создаем объект Application
                application = new Excel.Application();
                Console.WriteLine("Объект Excel.Application создан");
                Console.ReadKey();
                //показываем окно Excel пользователю
                application.Visible = true;
                Console.WriteLine("Окно Excel видно пользователю");
                //получаем ссылку на коллекцию рабочих книг
                workbooks = application.Workbooks;
                //добавляем новую рабочую книгу в коллекцию
                workbook = workbooks.Add();
                Console.ReadKey();
                Console.WriteLine("Закрываем Excel");
                application.Quit();
            }
            finally
            {
                //освобождаем память, занятую объектами
                Marshal.ReleaseComObject(workbook);
                Marshal.ReleaseComObject(workbooks);
                Marshal.ReleaseComObject(application);

            }
        }
    }
}

На первый взгляд, может показаться, что этот код вполне можно упростить, например, избавившись от «лишних» переменной workbooks,  например так:

workbook = application.Workbooks.Add();

Такой код, безусловно, будет короче и рабочая книга также будет создана, НО при этом, память выделенная для процесса Excel не будет освобождена по причине того, что в приведенной выше строке кода мы на самом деле создаем не один, а два объекта: объект типа Excel.Workbooks и объект типа Excel.Workbook и, соответственно, оба эти объекта нам необходимо освободить после работы с ними.

Исходя из вышеизложенного, можно определить для себя два следующих правила работы с COM в C#:

Никогда не использовать две и более точек при работе с COM

О том, из-за чего процесс Excel может зависать — смотрите в этой статье.

Работа с листами Excel в C#. Hello Excel

В следующем примере демонстрируется то, как получить доступ к первому листу рабочей книги и записи в ячейку A1 строки «Hello Excel«:

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace ExcelApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application application = null;
            Excel.Workbooks workbooks = null;
            Excel.Workbook workbook = null;
            Excel.Sheets worksheets = null;
            Excel.Worksheet worksheet = null;
            //переменная для хранения диапазона ячеек
            //в нашем случае - это будет одна ячейка
            Excel.Range cell = null;
            try
            {
                application = new Excel.Application
                {
                    Visible = true
                };
                workbooks = application.Workbooks;
                workbook = workbooks.Add();
                worksheets = workbook.Worksheets; //получаем доступ к коллекции рабочих листов
                worksheet = worksheets.Item[1];//получаем доступ к первому листу
                cell = worksheet.Cells[1, 1];//получаем доступ к ячейке
                cell.Value = "Hello Excel";//пишем строку в ячейку A1
                application.Quit();
            }
            finally
            {
                //освобождаем память, занятую объектами
                Marshal.ReleaseComObject(cell);
                Marshal.ReleaseComObject(worksheet);
                Marshal.ReleaseComObject(worksheets);
                Marshal.ReleaseComObject(workbook);
                Marshal.ReleaseComObject(workbooks);
                Marshal.ReleaseComObject(application);

            }
        }
    }
}

После запуска этого приложения откроется Excel, создастся рабочая книга, на первом листе рабочей книги в ячейке А1 появится строка «Hello Excel» после чего Excel попросит сохранить книгу. После отказа сохранения Excel закроется и память процесса Microsoft Excel будет освобождена.

Итого

Итак, сегодня мы рассмотрели основные моменты по работе с Microsoft Excel в C# и .NET Core: научились создавать процесс Microsoft Excel, создавать рабочую книгу, записывать текст в ячейки листа Excel и корректно освобождать память после работы с Excel в C#. В следующий раз мы продолжим разбираться с темой использования возможностей Excel в .NET Core и более детально познакомимся с объектной моделью Microsoft Office.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

  • Download source files — 17.1 Kb
  • Download demo project — 55.8 Kb

Sample Image - Excel_VBA_Library.jpg

Introduction

After the arrival of VSTO, VBA development is almost outdated. However, to support Office 2000, developers still need a library to easily code a VBA based solution. Excel VBA Library could be used in order to use Excel as database tables to INSERT, UPDATE and SELECT. There are also other libraries to simplify Excel VBA developer life a bit. I hope it will be of some help.

List of libraries

  • ACell: Use this library to obtain row, column or cell address for current row.
  • AComboBox: Use this library to simplify loading of ComboBox and ListBox.
  • AConst: Defining your constants at one place could be handy, no matter how small your project is.
  • ALog: Use this library to write a log of a Excel sheet by the name of «Log». For background processes, this log could be very helpful.
  • AMsgForm: Use this library instead of MsgBox to provide consistent application name and message formatting in your VBA solutions.
  • AOptions: Use this library to get/set end user preferences to an Excel sheet named «Option«.
  • ARange: Use this library to obtain valid range string or range object from a given row, column.
  • ASQL: Use this library to use the Excel sheet as a database table. This library could simplify INSERT, UPDATE, SELECT in an Excel sheet.
  • AStr: Use this library for string manipulation and formatting.
  • ATable: Use this library to make use of an Excel worksheet as a database table. Make sure that the first row of the sheet contains column names. This library simplifies table based worksheet tasks.

How To Use Code

  • Create an Excel sheet.
  • Open VBA editor by pressing Alt+F11.
  • Drag Drop to include all the VBA library module files in workbook.
  • Place buttons on sheet and assign the following macros to each button.
    Sub Button1_Click()
        AMsgForm.Show "Use ALog library to write information in Log. _
                        A info Log is written."
        ALog.WriteErr "Use ALog library to write information in Log"
    
        AMsgForm.Show "Use ALog library to write errors in Log. _
                        An error Log is written."
        ALog.WriteInfo "Use ALog library to write errors in Log"
    End Sub
    
    Sub Button3_Click()
        AMsgForm.Show "You could have consistent messages with _
                            AMsgForm library"
    
        AMsgForm.ShowErr "& Errors. This is an error message"
    End Sub
    
    Sub Button5_Click()
        AMsgForm.Show "Use AOption library to get/set user preferences."
    
        AMsgForm.Show AOptions.StrGet(OptionE.Option1, "Not found")
    End Sub
    
    Sub Button7_Click()
        Dim rs
    
        AMsgForm.Show "Use ASQL library to SELECT, INSERT, UPDATE Excel sheet. _
         Now count of cities will be selected in City sheet."
    
        Set rs = ASQL.Run("City")
    
        AMsgForm.Show rs.RecordCount
    End Sub
    
    Sub Button8_Click()
        AMsgForm.Show "Use AStr  for string manipulation and formatting."
    
        AMsgForm.Show AStr.Quote("Quote a string in VBA always ends up _
        in dirty and less maintainable code. But its easy with AStr.Quote")
    
        AMsgForm.Show AStr.Bracket("To bracket use AStr.Bracket")
    End Sub

Software engineer developing solutions using Microsoft technologies.

Библиотеки для работы с excel с

А чем именно интероп тот же не устраивает? Боитесь, что рванет на несоответствии версий библиотек типов? Сделайте свой враппер на late binding, и будет вам счастье. Я лично сам самописную либу под это дело давно и вполне комфортно использую. А 100% managed вы все равно не получите, т.к. все эти библиотеки есть обертки над вызовами методов com-объектов библиотеки типов экселя, которая сама по себе не managed.

P.S. http://sql.ru/forum/actualthread.aspx?tid=620401 — вот тут люди как раз и обмениваются опытом по написанию врапперов на late binding для экселя.

цитата: sla3:
mystery
Какие проблемы видите из-за Interop?
сразу признаюсь, в своё время на .net я не перешёл, остался, так сказать, в том поезде.
А люди жалуются — вот, например, http://blog.byndyu.ru/2009/05/excelexe-interopexcel.html
Оно конечно, если всё «правильно» делать, то и проблем не будет. Так что, это технология для избранных?
Тогда мне остаётся использовать к.-н. обёртку, скрывающую проблемы; или использовать другие технологии.. Проблема описанная по ссылке довольно известная. Поскольку работа идет с неуправляемым кодом, освобождать объекты нужно ручками (сборщик мусора и using/dispose с ними не работают). Но ведь это не не проблема Interop-а, а проблема «кривых рук».

А вообще на какой библиотеке остановились? И кстати, встроенный JET драйвер не понравился?

В общую копилку
http://myxls.in2bits.org/
http://www.codeplex.com/ExcelPackage/

Последний — плохо открывает сложные xlsx документы.

PHP библиотека PHPExcel для работы с Excel

Для работы с Excel использовал библиотеку PHPExcel. Установка простейшая – кладем папку Classes в нужную папку на сервере, указываем корректные пути в include/require.

Примеры кода по чтению/генерации файлов Excel можно посмотреть на github странице библиотеки.

Красивости

и этим не ограничивается функционал, это лишь то, что использовал:

  • mergeCells(“cell_range”) – Объединение указанных ячеек в одну. Данные должны лежать в первой ячейке, иначе они теряются.
  • setSize(16) – Делаем размер шрифта 16 для указанных ячеек.
  • setBold(true) – Делаем текст “жирным”
  • setWrapText(true) – Делаем перенос слов по умолчанию для всех ячеек
  • setAutoFilter – Включить фильтр по умолчанию
  • freezePane – Закрепить какие либо строки, например первую
  • borders – делается через создание стиля, а потом его применение на указанный диапазон ячеек
  • color – Аналогично с помощью стилей меняем цвет шрифта (Font)
  • setARGB – Изменить цвет ячейки, например
    • всей первой строки
    • конкретной ячейки (делал так цвет был переменным и задавался на основе данных – формировался разноцветный показательный Excel)
    • диапазона ячеек по диагонали

Код для чтения (два столбца):

Редактирование

Открываем файл test.xlsx, на его основе создаем новый new.xlsx с измененными парой ячеек.

Пример генерации на основе результата MySQL (не тестил, использовал универсальную функцию ниже).

Если нужно протестить базовую работу генерации на основе двумерного массива

Пример генерации xls из двумерного массива с настройками

  • имени (определяется на основе значения в переменной $_POST[‘filename’]),
  • ширины столбца (на основе $_POST[‘excelSettings’]),
  • bold первой строки (setBold),
  • переноса слов (setWrapText).

Пример вызова и код по генерации кнопки, добавлению к названию файла даты/времени (формат 20170123_003800_Название.xlsx) и переходу на страницу генерации xls.

Вызов функции (про функцию iconv_for_xls ниже):

Особенности

Мусор

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

Например, возможны кракозябры при генерации файла больше 20-40 строк, если оставить включенным debug типа print_r($_POST); (почему не воспроизводиться при генерации мелких файлов – это вопрос :)).

Аналогично, будет выдавать ошибку:

  1. Если в конце кода php нет “exit;”
  2. Если перед генерацией файла нет очистки буфера вывода через “ob_end_clean();”
  3. Если используется генерация xlsx (Excel2007), но не установлены xml и xmlwriter модули PHP. Так же может выдаваться ошибка “Fatal error: Class ‘XMLWriter’ not found in /

/XMLWriter.php on line 37” т.к. библиотека PHPExcel использует наследование класса от XMLWriter (“class PHPExcel_Shared_XMLWriter extends XMLWriter”), т.е. требует установленного модуля xmlwriter. Для “нормальных” дистрибутивов это делается простым sudo apt-get/yum install php-xmlwriter (или php5-xml) и перезагрузкой apache, для gentoo это делается через пересборку всего php с новым модулем.

Отправка array на другую страницу

Чтобы функция по генерации xlsx была универсальной, сделал отдельную страницу по генерации, но на эту страницу потребовалось передать двумерный массив. В интернете гуляет два варианта решения: сохранить массив в сессии/куках, передать его через json (лучше) или serialize (хуже).

Через сессии все передавалось, только значение почему то не апдейтилось корректно. Сходу не разобрался в причинах, использовал сначала serialize (полный пример см. в function create_xls), но потом мигрировал на json из-за периодических проблем со спец. символами serialize.

Кодировка

Если на сайте кодировка cp-1251, то при генерации обязательно нужно использовать iconv в utf-8. В противном случае вместо русских символов в ячейке будет бред (например, “ИСТИНА”).

Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel)

Оставляю заметку по работе с Excel с помощью C#.

Привожу фрагменты кода, которые искал когда-то сам для работы с 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

Комментарии

При работе с Excel с помощью C# большую помощь может оказать редактор Visual Basic, встроенный в Excel.

Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.

Далее заходим в редактор Visual Basic и смотрим код, который туда записался:

В данном макросе записаны все действия, которые мы выполнили во время его записи. Эти методы и свойства можно использовать в C# коде.

Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:

Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.

Сравнение библиотек для работы с файлами Misrosoft Excel

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Сравнение библиотек для работы с файлами Misrosoft Excel

Самым удобным, полным и хорошо документированным способом работы с файлами MS Excel является использование OLE Automation с Microsoft Excel. Единственный его недостаток — низкая скорость, поэтому данный способ неприемлем для больших объемов данных. Возникает необходимость использовать библиотеки, работающие с файлами напрямую, и скорость является основной характеристикой для данного класса продуктов.

В данной статье мы рассмотрим и сравним несколько библиотек для Borland Delphi, предоставляющих разработчикам возможность работать с файлами Microsoft Excel напрямую, без использования OLE Automation и самого Microsoft Excel.

Перечислим библиотеки, которые мы будем рассматривать, и приведем их краткое описание.

Мы рассмотрим эти библиотеки как с точки зрения производительности, так и с точки зрения удобства использования для разработчика.

Удобство использования для разработчика

Для того чтобы оценить удобство использования продуктов для разработчика, мы рассмотрим следующие их параметры:

  • Архитектура
  • Наличие и качество документации

Архитектура

Наличие и качество документации

Производительность

Для сравнения производительности мы проведем несколько тестов записи файлов MS Excel.

Сначала приведем некоторые сведения о внутреннем формате файла MS Excel, которые понадобятся нам при анализе результатов тестов. В файле MS Excel все строковые значения ячеек хранятся в таблице строк, при этом ячейки содержат только указатели на элементы таблицы строк. В таблице строк собраны уникальные строковые значения ячеек (например, если все текстовые ячейки в рабочей книге содержат одно и то же значение, в таблице строк будет один элемент). Одна из важных задач при записи файла MS Excel — быстро построить таблицу строк.

При записи файла MS Excel библиотеки выполняют два вида действий — анализ и подготовка данных к записи и непосредственно запись в файл. Анализ данных, в частности, включает в себя создание таблицы строк.

Платформа для тестирования

Тест 1 — большое число ячеек с одинаковым строковым значением

Заполним 50000 ячеек одинаковым строковым значением. Этот тест, показывает скорость записи данных в файл. Так как все ячейки содержат строковое одинаковое значение, то таблица строк здесь строится быстро. Время анализа и подготовки данных в данном случае не существенно влияет на результат.

Тест 2 — большое число ячеек с различными случайными строковыми значениями

Заполним 50000 ячеек различными строками, состоящими из набора случайных символов, и имеющими длину от 10 до 60 символов. Этот тест показывает скорость построения таблицы строк. Чем больше различных текстовых значений в файле MS Excel, который нужно создать, тем важнее этот показатель.

Тест 3 — большое число ячеек с различными случайными числами

Заполним 50000 ячеек различными случайными числами. Этот тест, как и Тест 1, показывает скорость записи данных в файл. Так как ячейки не содержат строковых значений, то таблица строк здесь будет пустая. Время анализа и подготовки данных в данном случае не существенно влияет на результат.

Тест 4 — большое число ячеек с разнородными данными

Этот тест моделирует запись типичного файла MS Excel, содержащего и строковые значения, и числа. Возьмем задачу, которую выполняет демо-приложение StressTest из библиотеки FlexCel. Требуется провести экспорт 6000 строк, каждая из которых содержит 30 столбцов — итого 180000 ячеек. При этом в 2 столбцах будут содержаться различные строки, состоящие из набора случайных символов, и имеющие длину от 10 до 60 символов. В черырех других столбцах будут содержаться постоянные строковые значения. Остальные столбцы заполним случайными целыми числами.

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

Copyright © 2004 Ольга Сосонных Специально для Delphi Plus

Библиотеки для работы с excel с

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Некоторое время назад задался целью найти готовую библиотеку для чтения/записи файлов .xls и .xlsx без установленного приложения Excel
Если Excel установлен, то кажется, что всё просто. Однако: 1) он должен быть установлен 2) есть разница работы с разными версиями офиса — зависим от версии 3) запись больших таблиц работает очень медленно. и т.д., на этом проблемы не заканчиваются.
После серьёзного изучения вопроса, понял, что действительно стоящего варианта — не найдено. Существует несколько библиотек, как свободных, так и платных. Но ни те, ни другие — не удовлетворяют. С чтением таблиц — проблем нет, это делается, например, через MS Jet. А вот запись, тем более — с форматированием, вызывает вопросы.
Задача «минимум» для такой библиотеки:
1) запись файла (например, .xlsx) из dataset — одним вызовом.
2) автоматический подбор ширины столбцов по содержимому (AutoFit)
3) выбор шрифта (хотя бы одного на весь файл) и его размера
4) установка автофильтра на всё содержимое
т.е. получаем файл, готовый к просмотру и к обработке данных без лишних телодвижений вручную. Желательно, чтобы использование библотеки выглядело как можно более лаконично в коде.

Предлагаю обсудить, кто чем пользуется, какие библиотеки рекомендует.

Пробовал EPPlus 2.9, GemBox.Spreadsheet. На крайний случай сгодится, но не очень.

Во многих библиотеках присутствует один и тот же глюк: формат «# ##0,##» до Excel доходит как «# ##0,##».

Generates Excel files from WinForms, WebForms ASP.NET, PocketPC applications, webservices on the fly and fast with FlexCel Studio for .NET
Native .NET components (no additional OLE/dlls required) allowing to read, create and modify native Excel .XLS and .XLSX files without needing to have Excel installed.
Supported Excel 97 .XLS file format and Excel 2007/2010 .XLSX format
Native PDF file export
Exceptionally fast and solid hand tuned .XLS & .XLSX engine capable of generating thousands files per minute.
Able to modify .XLS files and keep almost everything existing on the original file, from macros to activex objects.
Recalculation of more than 200 Excel functions.
Ability to read and write encrypted .XLS files.
Completely written in C# 100% managed code, with NO interop and NO p/invokes!
Runs on .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, Mono and the .NET Compact Framework (xlsx support requires .NET 3.5).
Templates can be stored inside your executable file, in a database or in any place from where you can access it as a stream.
Extensive API is available with which you can programmatically write and read files, with formatting info, images comments, etc.
Export to HTML in HTML 4.01 strict or XTHML 1.1 and fully standards compliant
Report Engine that allows to create complex reports using Excel as your report designer, so your final users can modify them. You can use images/comments/conditional formats/merged cells/pivot tables/charts and almost anything you can think of on those reports.

using System.IO;
using System.Globalization;
using System.Drawing;
using FlexCel.Core;
using FlexCel.XlsAdapter;

public void CreateAndSaveFile()
<
XlsFile xls = new XlsFile(true);
CreateFile(xls);

//Save the file as XLS
xls.Save(openFileDialog1.FileName);
>

public void CreateFile(ExcelFile xls)
<
xls.NewFile(1); //Create a new Excel file with 1 sheet.
xls.ActiveSheet = 1; //Set the sheet we are working in.
>
Все имеется. Куча примеров.Могу кинуть на обменник FS. правда немного староват дистр.

Вообще-то не помешает, по крайней мере поизучать. Я сам кое-что попробовал, но форматирование — не прошло, вообще. Не понял пока что не так.

Кстати, YuriyRR, может ты заодно знаешь почему все библиотеки (может не все, но всё что я пробовал — это много) корёжат формат, заданный строкой, я тут уже выше писал:

Вероятно ожидают увидеть формат в английской локали, где в качестве десятичного разделителя используется тчк, а не зпт. Соответственно эскейпят все прочие символы. Или, как вариант, у тебя на машине локаль неправильная стоит.

Добавлено:
Когда-то давно делал репорты в excel на asp.net вообще без библиотек:

— сохраняешь готовый отформатированный пример репорта с одной строчкой в xml
— копи-пастишь как есть в aspx
— находишь строчку с данными и делаешь итерацию по датасету
— бинго! — красивый репорт за 15 мин

Зпт. у них активно используется, как разделитель групп разрядов

Правильная, хотя может быть и нестандартная (что тут вообще стандарт?):
Десятичный разделитель — зпт.
Разделитель групп разрядов — пробел

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

Имеет смысл проверить на машине с en-US и с английским же форматом, а потом уже смотреть где валится на русской, да еще и с хитрой локалью.

В этой статье мы рассмотрим способы для выгрузки данных в xls/xlsx файл. Для примера был создан небольшой тестовый проект для демонстрации возможностей библиотек. Допустим у нас есть класс студент

public class Student

    {

        public int ID { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public bool Gender { get; set; }

        public string phone { get; set; }

        public int Eng { get; set; }

        public int Math { get; set; }

    }

Создадим функцию которая будет создавать фейковые данные студентов

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

        /// <summary>

        /// Generate Random Student Data

        /// </summary>

        /// <param name=»count»>count</param>

        /// <returns>List<Student></returns>

        private List<Student> GenerateRandomData(int count)

        {

            Random rnd = new Random();

            List<Student> students = new List<Student>();

            for (int i = 0; i < count; i++)

            {

                students.Add(new Student()

                {

                    Name = «name» + i.ToString(),

                    Age = rnd.Next(10, 60),

                    Gender = rnd.NextDouble() >= 0.5,

                    ID = i,

                    phone = «8987654321»,

                    Eng = rnd.Next(0, 100),

                    Math = rnd.Next(0, 100)

                });

            }

            return students;

        }

Теперь рассмотрим  способы выгрузить эти данные в excel.

Содержание

  1. NPOI
  2. Общие характеристики NPOI:
  3. Как использовать
  4. EPPlus
  5. Общие характеристики
  6. Как использовать
  7. ClosedXML
  8. Как использовать
  9. ClosedXML.Report
  10. ‎Функции‎
  11. Как использовать
  12. OleDB
  13. Провайдеры данных
  14. Extended Properties
  15. Как использовать

NPOI

Этот проект является .NET версией проекта POI Java. С помощью NPOI вы можете легко читать/записывать файлы Office 2003/2007.

Общие характеристики NPOI:

a. Это абсолютно бесплатно для использования

b. Охват большинства функций Excel (стиль ячеек, формат данных, формула и т. д.)

c. Поддерживаемые форматы: xls, xlsx, docx.

d. Разработан для ориентации на интерфейс (взгляните на NPOI. Пространство имен SS)

e. Поддержка не только экспорта, но и импорта

f. Реальные успешные кейсы по всему миру

г. огромное количество базовых примеров

h. Работает как на Windows, так и на Linux

Подробно узнать о проекте можно по ссылке 

Ниже указан способ выполнить экспорт с помощью NPOI

Как использовать

Установим библиотеку через NuGet

Библиотеки для экспорта данных в Excel

Подключим в код

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

List<Student> students = GenerateRandomData(100);

XSSFWorkbook workbook = new XSSFWorkbook();

ISheet sheet = workbook.CreateSheet(«Primer_NPOI»);

//create the header row

IRow headerRow = sheet.CreateRow(0);

int count = 0;

foreach (var item in typeof(Student).GetProperties())

{

   headerRow.CreateCell(count++).SetCellValue(item.Name);

}

//set the value

for (int i = 1; i < students.Count() + 1; i++)

{

   IRow row = sheet.CreateRow(i);

   count = 0;

   row.CreateCell(count++).SetCellValue(students[i 1].ID);

   row.CreateCell(count++).SetCellValue(students[i 1].Name);

   row.CreateCell(count++).SetCellValue(students[i 1].Age);

   row.CreateCell(count++).SetCellValue(students[i 1].Gender ? «М» : «Ж»);

   row.CreateCell(count++).SetCellValue(students[i 1].phone);

   row.CreateCell(count++).SetCellValue(students[i 1].Eng);

   row.CreateCell(count).SetCellValue(students[i 1].Math);

}

try

{

    //save file

    SaveFileDialog saveDialog = new SaveFileDialog()

    {

       DefaultExt = «.xlsx»,

       FileName = «Primer_NPOI»,

       Filter = «Excel |*.xlsx»

    };

    if (saveDialog.ShowDialog() == true)

    {

       using (FileStream MS = new FileStream(saveDialog.FileName,FileMode.Create))

       {

          workbook.Write(MS);

       }

      }

    }

catch (Exception ex)

{

   StatusText.Text = ex.Message;

}

  • Создание, чтение и изменение книг Office Open XML (xslx и xlsm)
  • Поддерживает как .NET Framework, так и .NET Core. Нет различий в наборе функций между фреймворками.
  • Предоставляет простой в использовании, строго типизированный программный интерфейс, который тесно связан с хорошо известным API Excel VBA.
  • Только управляемый код, без зависимостей от Microsoft Excel
  • Закаленная в боях кодовая база после многих лет работы в качестве самой скачиваемой в мире библиотеки .NET для управления электронными таблицами. Качество, обеспечиваемое тысячами юнит-тестов.
  • Исходный код EPPlus в открытом доступе на Github , распространяется под некоммерческой лицензией Polyform

Как использовать

Установка

Библиотеки для экспорта данных в Excel

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

List<Student> students = GenerateRandomData(100);

using (ExcelPackage p = new ExcelPackage())

{

ExcelWorksheet sheet = p.Workbook.Worksheets.Add(«EPPlus_Test»);

//create the header row

int count = 1;

foreach (var item in typeof(Student).GetProperties())

{

    sheet.Cells[1, count].Style.Fill.PatternType = ExcelFillStyle.Solid;

    sheet.Cells[1, count].Style.Fill.BackgroundColor.SetColor(Color.Yellow);

    sheet.Cells[1, count++].Value = item.Name;

}

//set the value

for (int i = 2; i < students.Count() + 2; i++)

{

    count = 1;

    sheet.Cells[i, count++].Value = students[i 2].ID;

    sheet.Cells[i, count++].Value = students[i 2].Name;

    sheet.Cells[i, count++].Value = students[i 2].Age;

    sheet.Cells[i, count++].Value = students[i 2].Gender ? «М» : «Ж»;

    sheet.Cells[i, count++].Value = students[i 2].phone;

    sheet.Cells[i, count++].Value = students[i 2].Eng;

    sheet.Cells[i, count].Value = students[i 2].Math;

    sheet.Cells[i, count].Style.Fill.PatternType = ExcelFillStyle.Solid;

    sheet.Cells[i, count].Style.Fill.BackgroundColor.SetColor(students[i 2].Math < 60 ? Color.Red : Color.Transparent);

}

sheet.Column(4).AutoFit();

//condition format

var ruleIcon = sheet.ConditionalFormatting.AddThreeIconSet(new ExcelAddress(2, 5, 10, 5), eExcelconditionalFormatting3IconsSetType.Signs);

var colorformat = sheet.ConditionalFormatting.AddDatabar(new ExcelAddress(2, 6, 10, 6), Color.Blue);

//add chart

ExcelWorksheet sheet2 = p.Workbook.Worksheets.Add(«chart»);

ExcelChart chart = sheet2.Drawings.AddChart(«NewChart», eChartType.Area3D);

chart.Title.Text = «Title»;

chart.Series.Add(sheet.Cells[2, 6, 6, 6], sheet.Cells[2, 1, 6, 1]);

chart.SetPosition(4, 1, 1, 0);

chart.SetSize(800, 400);

chart.View3D.DepthPercent = 60;

chart.View3D.Perspective = 15;

chart.View3D.RotX = 20;

chart.View3D.RotY = 15;

try

{

    //save file

    SaveFileDialog saveDialog = new SaveFileDialog()

    {

        DefaultExt = «.xlsx»,

        FileName = «EPPlus_Test»,

        Filter = «Excel |*.xlsx»

    };

    if (saveDialog.ShowDialog() == true)

    {

        File.WriteAllBytes(saveDialog.FileName, p.GetAsByteArray());

        //p.SaveAs(new FileInfo(saveDialog.FileName));

    }

}

catch (Exception ex)

{

    StatusText.Text = ex.Message;

}

}

}

ClosedXML

‎ClosedXML — это библиотека .NET для чтения, обработки и записи файлов Excel 2007+ (.xlsx, XLSM). Он направлен на предоставление интуитивно понятного и удобного интерфейса для работы с базовым ‎‎OpenXML‎‎ API.‎

Ссылка на проект

‎Для получения дополнительной информации см. вики‎

Как использовать

Библиотеки для экспорта данных в Excel

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

List<Student> students = GenerateRandomData(100);

XLWorkbook workbook = new XLWorkbook();

var sheet = workbook.Worksheets.Add(«ClosedXML_Test»);

int count = 1;

foreach (var item in typeof(Student).GetProperties())

{

    sheet.Cell(1, count).Style.Fill.PatternType = XLFillPatternValues.Solid;

    sheet.Cell(1, count).Style.Fill.BackgroundColor = XLColor.Yellow;

    sheet.Cell(1, count++).Value = item.Name;

}

for (int i = 2; i < students.Count() + 2; i++)

{

    count = 1;

    sheet.Cell(i, count++).Value = students[i 2].ID;

    sheet.Cell(i, count++).Value = students[i 2].Name;

    sheet.Cell(i, count++).Value = students[i 2].Age;

    sheet.Cell(i, count++).Value = students[i 2].Gender ? «М» : «Ж»;

    sheet.Cell(i, count++).Value = students[i 2].phone;

    sheet.Cell(i, count++).Value = students[i 2].Eng;

    sheet.Cell(i, count).Value = students[i 2].Math;

    sheet.Cell(i, count).Style.Fill.PatternType = XLFillPatternValues.None;

    sheet.Cell(i, count).Style.Fill.BackgroundColor = students[i 2].Math < 60 ? XLColor.Red : XLColor.Transparent;

}

sheet.Column(4).AdjustToContents();

//condition format

sheet.Range(2, 6, 10, 6).AddConditionalFormat().DataBar(XLColor.Orange).LowestValue().HighestValue();

sheet.Range(2, 3, 10, 3).AddConditionalFormat().IconSet(XLIconSetStyle.ThreeTrafficLights2)

    .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 45, XLCFContentType.Number)

    .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 20, XLCFContentType.Number)

    .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 10, XLCFContentType.Number);

try

{

    //save file

    SaveFileDialog saveDialog = new SaveFileDialog()

    {

        DefaultExt = «.xlsx»,

        FileName = «ClosedXML»,

        Filter = «Excel |*.xlsx»

    };

    if (saveDialog.ShowDialog() == true)

    {

        workbook.SaveAs(saveDialog.FileName);

    }

}

catch (Exception ex)

{

    StatusText.Text = ex.Message;

}

ClosedXML.Report

‎ClosedXML.Report — это инструмент для создания отчетов и анализа данных в приложениях .NET с помощью Microsoft Excel. Это . NET-библиотека для создания отчетов Microsoft Excel без необходимости установки Excel на компьютере, на котором выполняется код. С помощью ClosedXML.Report можно легко экспортировать любые данные из классов .NET в Excel с помощью XLSX-шаблона.‎

‎Функции‎

  • ‎Копирование форматирования ячеек‎
  • ‎Условное форматирование
  • ‎Вертикальные и горизонтальные таблицы и поддиапазоны‎
  • ‎Возможность реализации формул Excel‎
  • ‎Использование динамически вычисляемых формул с синтаксисом C # и Linq‎
  • ‎Операции с табличными данными: сортировка, группировка, суммарные функции.‎
  • ‎Сводные таблицы‎
  • ‎Поддиапазоны‎

Библиотеки для экспорта данных в Excel

Библиотеки для экспорта данных в Excel

Как использовать

ClosedXML/ClosedXML.Report: ClosedXML.Report is a tool for report generation with which you can easily export any data from your .NET classes to Excel using a XLSX-template. (github.com)

OleDB

Провайдеры данных

Для работы с Excel 2003 (.Xls) можно использовать провайдер Microsoft Jet OLE DB 4.0.

SELECT * FROM OPENROWSET(

‘Microsoft.Jet.OLEDB.4.0’,

‘Excel 12.0;Database=d:tmpTimeSheets.xlsx;HDR=YES;IMEX=1’,

‘SELECT * FROM [Sheet1$]’);

Для работы с Excel 2007 (.Xlsx) — Microsoft ACE OLEDB 12.0.

SELECT * FROM OPENROWSET (

    ‘Microsoft.ACE.OLEDB.12.0’,

    ‘Excel 12.0;Database=d:tmpTimeSheets.xlsx;HDR=YES;IMEX=1’,

    ‘SELECT * FROM [Sheet1$]’);

В Windows 10 открыть настройки источников данных ODBC можно написав «Источники данных ODBC» или через Панель управления Администрирование.

Extended Properties

  • HDR=YES|NO. HDR=YES означает, что первую строку листа, следует рассматривать как заголовки колонок. Т.о. значение из первой строки можно использовать как имена полей в sql запросах (любых: select, insert, update, delete).
  • IMEX=1|3. 1 — открыть соединение для чтения. 3 — для записи.

Как использовать

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

List<Student> students = GenerateRandomData(100);

try

{

    SaveFileDialog saveDialog = new SaveFileDialog()

    {

        DefaultExt = «.xlsx»,

        FileName = «Sample»,

        Filter = «Excel |*.xlsx»

    };

    if (saveDialog.ShowDialog() == true)

    {

        string Connstring = $«Provider=Microsoft.ACE.OLEDB.12.0;Data Source={saveDialog.FileName};Extended Properties=’Excel 12.0 Xml;HDR=YES;'»;

        using (OleDbConnection Conn = new OleDbConnection(Connstring))

        {

            await Conn.OpenAsync();

            //create sheet

            string sql = «CREATE TABLE Test (ID int,Name VarChar,Age int,Gender VarChar,phone VarChar,Eng int,Math int)»;

            using (OleDbCommand cmd = new OleDbCommand(sql, Conn))

            {

                await cmd.ExecuteNonQueryAsync();

                //insert data

                cmd.CommandText = «Insert into Test values (@ID,@Name,@Age,@Gender,@phone,@Eng,@Math)»;

                for (int i = 0; i < students.Count; i++)

                {

                    cmd.Parameters.Clear();

                    cmd.Parameters.Add(«@ID», OleDbType.Integer).Value = students[i].ID;

                    cmd.Parameters.Add(«@Name», OleDbType.VarChar).Value = students[i].Name;

                    cmd.Parameters.Add(«@Age», OleDbType.Integer).Value = students[i].Age;

                    cmd.Parameters.Add(«@Gender», OleDbType.VarChar).Value = students[i].Gender ? «М» : «Ж»;

                    cmd.Parameters.Add(«@phone», OleDbType.VarChar).Value = students[i].phone;

                    cmd.Parameters.Add(«@Eng», OleDbType.Integer).Value = students[i].Eng;

                    cmd.Parameters.Add(«@Math», OleDbType.Integer).Value = students[i].Math;

                    await cmd.ExecuteNonQueryAsync();

                }

            }

        }

    }

}

catch (Exception ex)

{

    StatusText.Text = ex.Message;

}

Скачать проект

Понравилась статья? Поделить с друзьями:
  • Бесплатный программы word excel скачать бесплатно
  • Библиотека диаграмм для excel
  • Библиотека в microsoft word 2007
  • Библиотека python для работы с word
  • Библиотека pandas работа с excel