Библиотека .NET Excel, которая может читать/записывать файлы .xls

Я ищу библиотеку Excel, которая читает/записывает файлы .xls (не .xlsx).

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

Я видел в другой ветке, что кто-то предложил EPPlus, но это работает только с форматом .xlsx 2007/2010.

Я использовал Koogra в прошлом и был вполне доволен ею, но я считаю, что она может только читать... не писать.

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

Редактировать: я очень рад создать свой файл Excel со встроенным Microsoft.Office.Interop.Excel, если это необходимо, однако на моей машине установлен Office 2007, а на целевых машинах только Office 2003. Я заметил, что у меня есть 2 версии файла для эта библиотека: 12 и 14. Я проверил версию Excel на целевых машинах, и это 11.8169.8172. Я предполагаю, что встроенное взаимодействие Excel не будет работать на целевой машине?


person Ozzah    schedule 02.05.2011    source источник
comment
Обязательно ли работать напрямую с файлами XLS? Вы исключили использование только файлов CSV?   -  person Jonathan Wood    schedule 02.05.2011
comment
Я обязательно должен использовать XLS, а не CSV или XLSX. Я загружаю результат на стороннюю веб-службу и, следовательно, не имею никакого контроля над форматом файла.   -  person Ozzah    schedule 02.05.2011
comment
Я знаю, что звучу глупо, потому что я никогда не использовал C#, но может ли C# использовать позднее связывание? Если это так, вы можете просто сделать CreateObject("Excel.Application") thingamuhjig (ну, вы все равно можете в VB/VBA/VB.NET). Нет необходимости во всех других библиотеках, или, черт возьми, даже в ссылках.   -  person Todd Main    schedule 02.05.2011


Ответы (3)


Я бы рекомендовал NPOI. NPOI является БЕСПЛАТНЫМ и работает исключительно с файлами .XLS. Это мне очень помогло.

Подробности: вам не нужно устанавливать Microsoft Office на вашем компьютере для работы с файлами .XLS, если вы используете NPOI.

Проверьте эти сообщения в блоге:

Создание электронных таблиц Excel .XLS и .XLSX в C#< /а>

NPOI с таблицей Excel и динамической диаграммой

[ОБНОВЛЕНИЕ]

В NPOI 2.0 добавлена ​​поддержка XLSX и DOCX.

Вы можете прочитать больше об этом здесь:

Серия сообщений NPOI 2.0 запланировано

person Leniel Maccaferri    schedule 02.05.2011
comment
Спасибо. На самом деле я уже начал использовать NPOI вскоре после публикации вопроса и все еще использую его. Документа не так много, и все пространства имен имеют очень недружественные сокращения, но мне удалось разобраться, и это работает :) - person Ozzah; 04.05.2011
comment
это хорошо @Ozzah, но не могли бы вы манипулировать шаблоном xls с помощью Npoi? - person gumuruh; 02.06.2014
comment
Ссылка на codeplex кажется немного устаревшей, разве она не должна указывать на github.com/tonyqus/npoi что показывает, что проект все еще активен? - person user692942; 20.04.2015
comment
Кроме того, NPOI, как и POI, не поддерживает форматы BIFF ниже BIFF8 — просто поймите, что раздражает Поставляемая электронная таблица, похоже, имеет формат Excel 5.0/7.0 (BIFF5). POI поддерживает только формат BIFF8 (начиная с версий Excel 97/2000/XP/2003). Для тех, кто ищет решение этой проблемы, это может помочь - stackoverflow.com/a/17965628/692942 - person user692942; 20.04.2015
comment
спасибо ... использовал epplus ... я думаю, что epplus должен удалить эту ошибку ... хахахаха 2-й человек переходит с epplus на NPOI - person Rakeshyadvanshi; 21.01.2016

Есть ли причина, по которой вы не можете использовать соединение Excel ODBC для чтения и записи в Excel? Например, я использовал следующий код для чтения из файла Excel построчно, как из базы данных:

private DataTable LoadExcelData(string fileName)
{
  string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

  OleDbConnection con = new OleDbConnection(Connection);

  OleDbCommand command = new OleDbCommand();

  DataTable dt = new DataTable(); OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$] WHERE LastName <> '' ORDER BY LastName, FirstName", con);

  myCommand.Fill(dt);

  Console.WriteLine(dt.Rows.Count);

  return dt;
}

Таким же образом вы можете писать в «базу данных» Excel. Как вы можете видеть, вы можете выбрать номер версии для использования, чтобы вы могли понизить версии Excel для машины с Excel 2003. Фактически, то же самое верно и для использования Interop. Вы можете использовать более раннюю версию, и она должна работать с Excel 2003, даже если на вашем компьютере для разработки установлена ​​только более поздняя версия.

person IAmTimCorey    schedule 02.05.2011
comment
Я знаю, что это довольно старый пост, но я хотел указать в качестве уведомления, что я получаю сообщение об ошибке нехватки памяти, когда пытаюсь прочитать ~ 35 тыс. строк на листе с помощью этого метода. - person mcy; 29.11.2013
comment
Я использую этот подход и столкнулся с проблемой установки компонентов Excel на цель развертывания. Любые обходные пути для этого? установка компонента базы данных доступа также не является вариантом. - person Tengiz; 25.11.2014
comment
Если у вас нет Excel в целевом объекте развертывания, вам следует рассмотреть другое решение для этого. Посмотрите на принятое выше решение для работы с Excel без установки Excel. - person IAmTimCorey; 03.12.2014

Вы можете использовать сторонний инструмент, который вызывает компонент Excel Jetcell .NET для чтения/записи файлов Excel:

Пример С#

// Create New Excel Workbook
ExcelWorkbook Wbook = new ExcelWorkbook();
ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells;

Cells["A1"].Value = "Excel writer example (C#)";
Cells["A1"].Style.Font.Bold = true;
Cells["B1"].Value = "=550 + 5";

// Write Excel XLS file
Wbook.WriteXLS("excel_net.xls");

Образец VB.NET

' Create New Excel Workbook
Dim Wbook As ExcelWorkbook = New ExcelWorkbook()
Dim Cells As ExcelCellCollection = Wbook.Worksheets.Add("Sheet1").Cells

Cells("A1").Value = "Excel writer example (C#)"
Cells("A1").Style.Font.Bold = True
Cells("B1").Value = "=550 + 5"

' Write Excel XLS file
Wbook.WriteXLS("excel_net.xls")
person Bonnie Cornell    schedule 04.05.2011