Member 14139372 Ответов: 2

"Внешняя таблица не находится в ожидаемом формате" показывает эту ошибку, когда я пытаюсь заполнить excel в datatable .please help me .thanks заранее



Я пытаюсь прочитать excel и вставить его в базу данных.

Мой код таков

public string GetGridData(string parameters)
    {
        string conn = string.Empty;
        DataTable dtexcel = new DataTable();
        object[] parameterVal = GetParamarray(parameters);
        string fileName = parameterVal[0].ToString();
        fileName = System.Web.HttpContext.Current.Server.MapPath("Manual\\" + fileName);
        string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=Excel 12.0;";
        //connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=NO';"; //for above excel 2007  
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0 Xml; HDR = YES; IMEX = 1'";
        using (OleDbConnection con = new OleDbConnection(connectionString))
        {
            try
            {
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con); //here we read data from sheet1  
                oleAdpt.Fill(dtexcel); //fill excel data into dataTable  
            }
            catch (Exception ex)
            {
            }
        }

        return "1";
    }




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

Я хочу прочитать excel и заполнить его в datatable. Сервер 2012 года
Я использую строку подключения

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0 Xml; HDR = YES; IMEX = 1'";

Richard MacCutchan

Почему вы также открыли файл в FileStream? Это может вызвать проблемы, так как файл уже открыт. Вы также создаете две слегка отличающиеся строки подключения.

Maciej Los

Хорошая мысль, Ричард!

Maciej Los

А в чем твоя проблема?

2 Ответов

Рейтинг:
1

Maciej Los

Прежде всего, эта линия:

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);

это излишне!


Независимо от расширения файла, вы должны правильно загрузить и установить его Драйвер базы данных MS Access[^] - варьироваться от конкретной архитектуры серверной ОС.

Иногда эта ошибка отображается, когда:
1) лист, из которого вы хотите получить данные, скрыт
2) там очень много формул (вместо значений)

Строку подключения для
А) Excel 97-2003 должен выглядеть следующим образом:
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;Extended Properties='Excel 8.0;HDR=YES';";

Б) Excel 2007 и выше должен выглядеть следующим образом:
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties='Excel 12.0 Xml';";


Я бы не стал использовать IMEX, если вы хотите получить правильный тип данных, вместо того чтобы рассматривать их как текст.
Для получения более подробной информации, пожалуйста, смотрите: Строки подключения Excel - ConnectionStrings.com[^]


Рейтинг:
0

OriginalGriff

Скорее всего, это более старый файл .XLS - ACE иногда может быть придирчивым к ним.
Возможно, его стоит использовать try...catch чтобы поймать ошибку, переименуйте или скопируйте файл в файл .XLSX и повторите попытку - иногда это работает.