2011-01-17 6 views
2

Есть ли какая-нибудь простая в использовании библиотека, которая может использоваться для чтения файлов excel и может быть создана позже? это мой лучший выбор?Чтение и запись файлов Excel C#

http://support.microsoft.com/kb/302084

+2

возможно дубликат [файла Создание Excel (.xls и .xlsx) из C#] (http://stackoverflow.com/questions/151005/create- excel-xls-and-xlsx-file-from-c) –

+0

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

+0

Создаете ли вы WinForm для этого или какой-либо другой тип приложения? – NDraskovic

ответ

4

Если вы хотите посвятить себя более поздней версии Excel (2007+), вы также можете взглянуть на OpenXML SDK. Это бесплатно, не связывает вас с тем, что MS Office установлен на компьютере, на котором он будет работать, и существует немало ресурсов available о том, как использовать его в Интернете (including blogs from the OpenXML team).

0

Компания я работал на сделал много исследований по этому и решил продукт, SoftArtisans был их лучшим выбором: OfficeWriter

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

0

Вы можете либо пойти на VBA, либо использовать бесплатную библиотеку от FileHelpers. Если вы планируете купить некоторые Commerical решения, я бы рекомендовал ASPOSE

3

Существует пакет первенствует плюс:

http://epplus.codeplex.com/

работает только на XLSX, хотя, но Office 2003 является езда на велосипеде в любом случае.

0

Согласно this website, вам необходимо включить ссылку на библиотеку объектов Microsoft Excel 12.0. Оттуда вам нужно сделать несколько вещей, чтобы открыть файл. На веб-сайте есть образец кода.

PS - Извините, это не слишком подробно, но я не смог найти ссылку на разработчиков Microsoft Office с более подробной информацией.

0

Я использовал ExcelLibrary с отличными результатами! (до сих пор он поддерживает Excel 2003 или более низкие версии).

http://code.google.com/p/excellibrary/

+0

В библиотеке Excel есть ошибка, нельзя открывать файлы, сгенерированные с ней в Excel 2010 (по крайней мере, если <100 столбцов и строк). –

+0

Действительно? На самом деле я управлял файлом с максимальным количеством 70-80 строк, и эта проблема никогда не возникает! Спасибо, что сообщили мне об этом! –

+0

Исправление: магическое число равно 50, но, похоже, оно в некоторой степени произвольно в целом, я считаю, что правильное определение заключается в том, что сгенерированный поток файлов короче 4096 байт. И только в Excel 2010 во всех остальных версиях он работает нормально. –

5

Попробуйте это: http://epplus.codeplex.com

EPPlus библиотека .net, который считывает и записывает Excel 2007/2010 файлы с использованием формата Open Office XML (XLSX).

1

Вы можете использовать ExcelLibrary, хотя она работает только .xls, который составляет 2003 Формат

Целью данного проекта является обеспечить родное решение .NET для создания, чтения и редактирования файлов Excel без использования COM или OLEDB.

У меня был шанс использовать EPPLUS, это было замечательно :), оно работает для нового формата первенствовать .xlsx, который используется в 2007/2010

EPPlus библиотека .net, вы можете читать и писать в excel-файлы, создавать диаграммы, рисунки, фигуры ...и многое другое

Также посмотрите на эту SO post

1

я использовал OLEDB, Interop и только начал использовать Epplus. Пока что epplus оказывается самым простым. http://epplus.codeplex.com/

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

c# epplus error Removed Part: Drawing shape

0

Мне нравится использовать ExcelDataReader для чтения и вышеупомянутый EPPlus для записи. Here's an example.

Вот пример чтения с ним:

  FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

     // Reading from a binary Excel file ('97-2003 format; *.xls) 
     //   IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 

     // Reading from a OpenXml Excel file (2007 format; *.xlsx) 
     IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 

     // DataSet - The result of each spreadsheet will be created in the result.Tables 
     DataSet result = excelReader.AsDataSet(); 

     // Free resources (IExcelDataReader is IDisposable) 
     excelReader.Close(); 

     var cdm = new ValueSetRepository(); 

     for (int i = 0; i < result.Tables.Count; i++) 
     { 
      // CHECK if tableNames filtering is specified 
      if (tableNames != null) 
      { 
       // CHECK if a table matches the specified tablenames 
       var tablename = result.Tables[i].TableName; 
       if (!tableNames.Contains(tablename)) 
       { 
        continue; 
       } 
      } 

      var lookup = new ValueSetLookup(); 
      lookup.CmsId = result.Tables[i].Rows[2][0].ToString(); 
      lookup.NqfNumber = result.Tables[i].Rows[2][1].ToString(); 
      lookup.Data = new List<ValueSetAttribute>(); 

      int row_no = 2; 
      while (row_no < result.Tables[i].Rows.Count) // i is the index of table 
      // (sheet name) which you want to convert to csv 
      { 
       var currRow = result.Tables[i].Rows[row_no]; 
       var valueSetAttribute = new ValueSetAttribute() 
       { 
        Id = currRow[0].ToString(), 
        Number = currRow[1].ToString(), 
        tName = currRow[2].ToString(), 
        Code = currRow[7].ToString(), 
        Description = currRow[8].ToString(), 
       }; 

       lookup.Data.Add(valueSetAttribute); 
       row_no++; 
      } 

      cdm.AddRecord(lookup); 
Смежные вопросы