Ema112 Ответов: 1

Как устранить ошибку или отсутствие ответа при чтении из файла excel в формате. xlsx с помощью oledb в C#?


Как устранить ошибку или отсутствие ответа при чтении из файла excel в формате. xlsx с помощью Oledb в c#?

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

Мой код выглядит следующим образом:
if (fileExtension == ".xls" || fileExtension == ".XLS")
              {
                  connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filelocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";

              }
              else if (fileExtension == ".xlsx" || fileExtension == ".XLSX")
              {
                  connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filelocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
              }


              DataTable dt = new DataTable();


              System.Data.OleDb.OleDbConnection MyConnection;
              System.Data.DataSet ds;
              System.Data.OleDb.OleDbDataAdapter MyCommand;
              MyConnection = new System.Data.OleDb.OleDbConnection(connStr);
              MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
              ds = new System.Data.DataSet();
              MyCommand.Fill(dt);
              MyConnection.Close();


Что я уже пробовал:

Мой код выглядит следующим образом:
если (расширение == ".файл XLS" || расширение == ".В XLS")
{
connStr = "поставщика=Майкрософт.Джет.Oledb для.4.0;Источник данных=" + filelocation, который + ";дополнительные свойства=\в"Excel 8.0;HDR съемка=да;компания IMEX=2\"";

}
остальное, если (расширение == ".файлы XLSX" || расширение == ".XLSX-файл")
{
connStr = "поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=" + filelocation, который + ";дополнительные свойства=\"значение Excel 12.0;HDR съемка=да;компания IMEX=2\"";
}


DataTable dt = новый DataTable();


Системы.Данных.Oledb для.Метод Oledbconnection MyConnection;
Системы.Данных.Набор ДС;
Системы.Данных.Oledb для.Объект Oledbdataadapter MyCommand;
MyConnection = новая система.Данных.OleDb. OleDbConnection(connStr);
MyCommand = новая система.Данных.OleDb.OleDbDataAdapter ("select * from [Sheet1$]", MyConnection);
ДС = новая система.Данных.Набор данных();
Моя команда.Заполнение (dt);
MyConnection.Закрывать();

1 Ответов

Рейтинг:
1

Ehsan Skardu

Используйте следующую строку подключения в случае XLXS как есть.

connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filelocation + ";Extended Properties =\"Excel 12.0 Xml;HDR=YES\";";


Помните, просто скопируйте и вставьте.


Ema112

Используется та же самая вставка копии, но все еще остается в режиме обработки только при заполнении таблицы данных для excel с расширением .xlsx . Если с расширением .xls он работает нормально.

Ehsan Skardu

Какая версия office установлена на вашем компьютере?

Ema112

Microsoft Office Excel 2007

Ehsan Skardu

вот в чем проблема.
скачайте этот движок и установите его, какая бы ваша ОС ни была 32-битной или 64-битной.
https://www.microsoft.com/en-pk/download/details.aspx?id=13255