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

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

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

Ответ 1

Существует возможность использовать 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 с С#. Существуют некоторые проблемы относительно правильной интерпретации типов данных, и когда длина данных, присутствующих в одной ячейке excel, длиннее 255 символов

Ответ 3

У меня нет машины для тестирования, но она должна работать. Сначала вам, вероятно, потребуется установить либо "Драйвер системы Office 2007: компоненты подключения к данным" или Распространяется распространяемый Microsoft Access Database Engine 2010. Затем попробуйте следующий код, обратите внимание, что вам нужно будет изменить имя листа в инструкции 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), поэтому я не могу сказать, будет ли он работать в вашей среде или нет, но я не понимаю, почему он не должен работать.

Ответ 4

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

Ответ 5

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