it-roy-ru.com

Как читать данные из файла Excel с помощью c #

Мое приложение должно читать данные из файла Excel. Я использую .Net и c # для разработки. Я не могу установить MS Office в системе. Из-за этого мое приложение не может прочитать файл Excel и выдает ошибку при загрузке DLL для Excel.

Как я могу получить доступ к файлу Excel в моем приложении в системе, где MS Office не установлен?

57
TutuGeorge

Существует возможность использовать OleDB и использовать листы Excel как таблицы данных в базе данных ...

Просто пример .....

string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

В этом примере используется поставщик Microsoft.Jet.OleDb.4.0, чтобы открыть и прочитать файл Excel. Однако, если файл имеет тип xlsx (из Excel 2007 и более поздних версий), необходимо загрузить компоненты Microsoft Access Database Engine и установить его на целевой компьютер.

Поставщик называется Microsoft.ACE.OLEDB.12.0;. Обратите внимание на то, что существует две версии этого компонента: одна для 32-битной и одна для 64-битной. Выберите подходящий для битности вашего приложения и какой версии Office установлена ​​(если есть). Есть много причуд, чтобы этот драйвер правильно работал для вашего приложения. см. Этот вопрос, например .

Конечно, вам не нужно, чтобы Office был установлен на целевой машине.

Хотя у этого подхода есть некоторые достоинства, я думаю, вам следует обратить особое внимание на ссылку, указанную в комментарии к вашему вопросу Чтение файлов Excel из C # . Существуют некоторые проблемы, касающиеся правильной интерпретации типов данных, и когда длина данных, представленных в одной ячейке Excel, превышает 255 символов

88
Steve

CSharpJExcel для чтения файлов Excel 97-2003 (xls): http://sourceforge.net/projects/jexcelapi/

и ExcelPackage для чтения файлов Excel 2007/2010 (формат Office Open XML, xlsx): http://excelpackage.codeplex.com/

и ExcelDataReader, который, похоже, способен обрабатывать оба формата: https://github.com/ExcelDataReader/ExcelDataReader

Удачи!

19
Obama

У меня нет машины для тестирования, но она должна работать. Сначала вам, вероятно, потребуется установить либо драйвер системы Office 2007: компоненты для подключения к данным , либо Microsoft Access Database Engine 2010 Redistributable . Затем попробуйте следующий код, обратите внимание, что вам нужно будет изменить имя листа в инструкции Select ниже, чтобы соответствовать имени листа в файле Excel:

using System.Data;
using System.Data.OleDb;

namespace Data_Migration_Process_Creator
{
    class Class1
    {
        private DataTable GetDataTable(string sql, string connectionString)
        {
            DataTable dt = null;

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    using (OleDbDataReader rdr = cmd.ExecuteReader())
                    {
                        dt.Load(rdr);
                        return dt;
                    }
                }
            }
        }

        private void GetExcel()
        {
            string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
            DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);

            foreach (DataRow dr in dt.Rows)
            {
                //Do what you need to do with your data here
            }
        }
    }
}

Примечание. У меня нет среды, в которой это можно было бы проверить (одна с установленным Office), поэтому я не могу сказать, будет ли она работать в вашей среде или нет, но я не понимаю, почему она не должна работать.

8
Mark Kram

Сохраните файл Excel в CSV и прочитайте полученный файл с помощью C #, используя библиотеку для чтения CSV, например FileHelpers .

5
Robert Harvey

Преобразуйте файл Excel в файл .csv (значение, разделенное запятыми файл), и теперь вы можете легко прочитать его.

4
petko_stankoski