C прочитать excel файл

Обновлено: 08.07.2024

В этой статье приведен краткий обзор нескольких способов работы с файлами Excel - создание, чтение, запись.

[ExcelLibrary]

В настоящее время поддерживается формат *.xls (BIFF8). В будущем может быть добавлен формат *.xlsx (Excel 2007).

Пример кода с созданием таблицы Excel вручную:

Пример заполнения листа Excel содержимым базы данных:

Простой пример создания книги из существующего файла Excel:

[EPPlus]

EPPlus поддерживает VBA, диапазоны ячеек, стили ячеек (Border, Color, Fill, Font, Number, Alignments), проверку данных, условное форматирование, вычисление формул, вставку диаграмм, картинок, фигур, комментарий. Можно создавать сводные таблицы (Pivot tables) и обычные таблицы, с защитой, шифрованием.

Проект EPPlus с лицензией LGPL [3] больше не развивается (поддержка ограничивается только постами на сайте Stack Overflow). Существует библиотека EPPlus с коммерческой лицензией.

Адреса ячеек, числовые форматы и формулы не чувствительны к представлению данных, зависящему от языка (culture-insensitive). Это означает, что при написании кода все может выглядеть немного иначе. Используется способ хранения данных OOXML и последующего перевода в вашу культуру при открытии книги в Excel.

Элементы адреса отделяются друг от друга запятой, например:

Форматы числе используют десятичную точку для дробной части (.) и запятую (,) для выделения тысяч. Пример:

В формулах для разделения параметров используется запятая (,):

ExcelPackage. Первое, что нужно сделать, это создать экземпляр класса ExcelPackage. Для этого директивой using надо добавить пространство имен OfficeOpenXml (это верхнее пространство имен в EPPlus):

Теперь можно ссылаться на класс Excelpackage непосредственно из ваших классов. У класса ExcelPackage есть несколько разных конструкторов, которые можно использовать в зависимости от поставленной цели.

Также можно задать имя файла напрямую в конструкторе:

EPPlus может работать с книгами как потоками (stream). Это может быть полезно при чтении файлов с web-сервера, или когда нужно передать книги без наличия физического файла. В конструктор также можно передать пароль, если создается зашифрованная книга.

Подробнее про работу с EPPlus см. [4].

Скомпилировать библиотеку в DLL-файлы можно из исходного кода [3] с помощью Visual Studio 2019. Готовые скомпилированные DLL можно скачать в архиве [8].

[NPOI]

Считывание(запись) Excel в(из) массив структур
Добрый день. Подскажите пожалуйста как проще выполнить считывание данных с Excel и записать в.

Считывание данных в двумерный массив из Excel файла
Здравствуйте дорогие форумчане! У меня возник вопрос ответ на который я сам не смог найти поэтому.


Считывание большой двумерной excel матрицы в статический массив
смотрел темы и так толком и не разобрался. суть задачи: имеется файл excel в котором тупо матрица.


Считывание EXCEL
Здравствуйте! Подскажите пожалуйста. Как считать данные со столбца Excel документа, если.

Additional information: Исключение из HRESULT: 0x800A01A8
Разъясните плиз.

у вас циклы с нуля, в экселе нумерация с 1
попробуйте на 1 заменить или весь код выложить Пытаюсь пока просто вывести результат. Заменила в цикле вывода начальные значения на 1, но ошибка осталась. Стойкое подозрение, что я точно недопонимаю что-то(((:

Понимаю, что прошло слишком много времени и вопрос утратил актуальность, но этот кусочек кода мне упростил жизнь, авось пригодиться ещё кому-то, поэтому пусть будет ответ.
КМК, тут ошибка простая -- сборщик мусора (GC=GarbageCollector) "прибрался" как и требовалось, и lastCell стал пустой ссылкой на несуществующий объект, обращаться к его полям стало нельзя; но в дальнейшем он вам потребовался только для того чтоб узнать размер заполненного из него массива -- надо либо заранее сохранить эти размеры в отдельные переменные, либо узнавать размеры самого массива, все элементы которого надо прогнать:

Лучше так не делать, т.к. обращение к ячейкам Excel в цикле ОЧЕНЬ долгий процесс, я имею ввиду так

лучше делать так

Pavel55, действительно. Здоровенный файл, 35 столбцов, 3600 строк. Для любопытства добавил Stopwatch и хотел посмотреть сколько займёт времени. сдался на десятой минуте. Ваш вариант для моего файла выполняется приблизительно 1.7 секунды. Экспериментировал, нашел dll, которая позволяет сделать это ещё быстрее, процентов на пятнадцать, эксперименты продолжаются, но код я выложу:

опаньки, кажется всё, доэкспериментировался, в хорошем смысле. Удалось сократить затраты времени в два раза, и без всяких сторонних библиотек.

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

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

поскольку это позволяет мне использовать LINQ для поиска и построения структур из полей.

Update: тогда вы можете просто прочитать рабочий лист через что-то вроде select * from [Sheet1$]

Это то, что я использовал для Excel 2003:

Как насчет Excel Data Reader?

Я использовал в нем гнев, в производственной среде, чтобы вытащить большие объемы данных из различных файлов Excel в SQL Server Compact. Он работает очень хорошо и довольно прочно.

  • COM API, где вы получаете доступ к объектам Excel напрямую и манипулировать ими с помощью методов и свойств
  • драйвер ODBC, который позволяет использовать Excel как базу данных.

последний подход был много быстрее: чтение большой таблицы с 20 столбцами и 200 строками займет 30 секунд через COM и полсекунды через ODBC. Так Что Я . порекомендовал бы подход к базе данных, если все, что вам нужно, это данные.

Я хочу показать простой метод для чтения файла xls /xlsx.Сеть. Я надеюсь, что следующее будет полезным для вас.

Простите меня, если я здесь не на базе, но разве это не то, что офис Пиа для?

в последнее время, частично, чтобы стать лучше в LINQ. Я использую API автоматизации Excel для сохранения файла в виде таблицы XML, а затем обрабатываю этот файл с помощью LINQ to XML.

SmartXLS является еще одним компонентом электронной таблицы excel, который поддерживает большинство функций диаграмм excel, движков формул и может читать/писать формат excel2007 openxml.

вы можете попробовать использовать это решение с открытым исходным кодом, что делает работу с Excel намного чище.

SpreadsheetGear является удивительным. Да, это расходы,но по сравнению с этими другими решениями это стоит того. Это быстро, надежно, очень всесторонне, и я должен сказать, что после использования этого продукта в моей полной программной работе более полутора лет, их поддержка клиентов фантастическая!

решение, которое мы использовали, необходимо, чтобы:

  • разрешить Читать/Писать из Excel производимых файлов
  • быть быстро в производительности (не так, как с помощью COMs)
  • быть MS Office независимая (необходимо использовать без клиентов с установленным MS Office)
  • быть свободный или Открыть Источник (но активно развивается)

Она также позволяет работать с .док и. ppt-формат файла

Если это просто табличные данные. Я бы рекомендовал файл data helpers by Marcos Melli который можно скачать здесь.

поздно на вечеринку, но я поклонник LinqToExcel

вы можете написать электронную таблицу excel, которая загружает данную электронную таблицу excel и сохраняет ее как csv (а не делает это вручную).

(кроме того, если кто-то просит вас программировать в excel, лучше притвориться, что вы не знаете, как)

(edit: Ах да, Роб и Райан оба правы)

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

Пакет Excel является компонентом с открытым исходным кодом (GPL) для чтения/записи файлов Excel 2007. Я использовал его в небольшом проекте,и API прост. Работает только с XLSX (Excel 200&), а не с XLS.

мы используем:ClosedXML в довольно больших системах.

  • свободный
  • простота установки
  • прямое кодирование
  • очень отзывчивая поддержка
  • команда разработчиков составляет очень открыты для новых предложений. Часто новые функции и исправления ошибок, реализованные в течение одной недели

Take.io электронная таблица сделает эту работу за вас, и бесплатно. Просто взгляните на этой.

Я просто использовать ExcelLibrary загрузить .таблица xls в набор данных. Отлично сработало.


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

Сначала откройте диалоговое окно «Добавить ссылки». На вкладке COM выберите «Библиотека объектов Microsoft Excel 14.0» (или любую другую версию, которую вы установили в своей системе).

Добавьте следующий с помощью оператора, чтобы упростить работу с пространством имен Excel. Часть Excel = означает, что вы можете использовать Excel как псевдоним для пространства имен.

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

private void btnRead_Click ( object sender , EventArgs e ) Excel . Application excel_app = new Excel . ApplicationClass ( ) ; Excel . Workbook workbook = excel_app . Workbooks . Open ( Type . Missing , Type . Missing , Type . Missing , Type . Missing , Type . Missing , Type . Missing , Type . Missing , Type . Missing , Excel . Worksheet sheet = ( Excel . Worksheet ) workbook . Sheets [ 1 ] ; SetTitleAndListValues ( sheet , 1 , 1 , lblTitle1 , lstItems1 ) ; SetTitleAndListValues ( sheet , 1 , 2 , lblTitle2 , lstItems2 ) ; workbook . Close ( false , Type . Missing , Type . Missing ) ;

Сначала код создает объект Excel.Application для управления Excel. Это делает этот объект видимым, чтобы вы могли наблюдать за его работой. Часто вы не хотите, чтобы сервер был видимым.

Далее код открывает рабочую книгу. Большинство параметров метода Open являются необязательными (например, пароли), поэтому они передают значения Type.Missing. В этом примере рабочая книга доступна только для чтения (это единственный параметр true), потому что ее не нужно записывать в книгу.

В коде используется первый рабочий лист книги. Обратите внимание, что индексы в Excel имеют тенденцию начинаться с 1 не 0.

В коде используется первый рабочий лист книги. Обратите внимание, что индексы в Excel имеют тенденцию начинаться с 1 не 0.

/ / Получить заголовок из ячейки ( строка , col ) . Получить значения из private void SetTitleAndListValues ( Excel . Worksheet sheet , lbl . ForeColor = System . Drawing . ColorTranslator . FromOle ( lbl . BackColor = System . Drawing . ColorTranslator . FromOle ( range = ( Excel . Range ) sheet . Columns [ col , Type . Missing ] ; ( Excel . Range ) sheet . get_Range ( first_cell , last_cell ) ; object [ , ] range_values = ( object [ , ] ) value_range . Value2 ; / / Обратите внимание , что массив Range имеет нижние границы 1.

Метод SetTitleAndListValues довольно специфичен для этого примера. Он получает заголовок из ячейки и получает значения из ячеек ниже этого.

Далее код получает значения под заголовком. Сначала он получает Range, представляющий весь столбец. Затем он использует метод range объекта get_End для получения диапазона, представляющего последнюю использованную ячейку столбца. Затем код создает другой Range, представляющий первую ячейку, содержащую значения, и использует две ячейки для получения еще одного нового Range, представляющего все ячейки значений. (Это проще, если вы знаете, где ячейки впереди времени, поэтому вам не нужно путаться, пытаясь найти последнюю ячейку.)

Далее код получает значения под заголовком. Сначала он получает Range, представляющий весь столбец. Затем он использует метод range объекта get_End для получения диапазона, представляющего последнюю использованную ячейку столбца. Затем код создает другой Range, представляющий первую ячейку, содержащую значения, и использует две ячейки для получения еще одного нового Range, представляющего все ячейки значений. (Это проще, если вы знаете, где ячейки впереди времени, поэтому вам не нужно путаться, пытаясь найти последнюю ячейку.)

Читайте также: