Четене от excel файл с помощта на oledb - празни низове

Използвам oledb за четене от excel файл.

    DataTable sheet1 = new DataTable();
    string excelCS = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";

    using (OleDbConnection connection = new OleDbConnection(excelCS))
    {
        connection.Open();
        string selectSql = @"SELECT * FROM [Sheet1$]";   
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
        {
            adapter.Fill(sheet1);
        }
        connection.Close();
    }

Но има проблем с някои клетки от файла.

За някои клетки получавам празна стойност вместо текст. Опитах се да сложа друг текст в тези клетки, но не се получи - все още получавам празни низове. Но след изтриване на колоната и вмъкване отново моето приложение получава правилната стойност на клетката. Важно е, че проблемът не е във всички клетки в колоната.

Това проблем с формата на клетката ли е или нещо подобно? Този excel файл ще бъде генериран от друга система, така че няма да мога да го модифицирам ръчно.

Някой има ли някакви предложения какво не е наред и какво мога да направя?


person Community    schedule 10.12.2013    source източник
comment
Опитахте ли с IMEX=1?   -  person Siddharth Rout    schedule 10.12.2013
comment
Благодаря ви, правя това за първи път и не знаех за това. Сега работи перфектно. Много благодаря!   -  person    schedule 10.12.2013
comment
Радвам се, че помогна. Прочетете ТУК, за да научите повече за IMEX   -  person Siddharth Rout    schedule 10.12.2013


Отговори (3)


Използвайте IMEX = 1 в края на вашия низ за връзка. Това ще реши проблема ви.

Винаги да използвате IMEX=1 е по-безопасен начин за извличане на данни за смесени колони с данни. .."

Не забравяйте, че понякога има някои грешки, свързани с използването на IMEX, докато използвате Update вместо Selecting.

person Mehrad    schedule 16.12.2014

като използвате този метод, конвертирайте Execel в набор от данни без празен низ в c#

 public static DataSet ConvertExcelToDataTable(string FileName)  
    {
        DataSet ds = new DataSet();
        string strConn = "";

        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + FileName + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=1;\"";
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Sheet1$]", strConn);


        da.Fill(ds);

        return ds;          
    }  

ще върне набор от данни.

person Kutty Rajesh Valangai    schedule 13.01.2016

Имах този проблем. Това, което открих, беше, че в клетките, които върнаха празни стойности, данните изглеждаха като низове, но останалите данни изглеждаха като числа, така че Excel съхранява низовете на различно място от числата. Промених формата на колоната на текст и всички данни бяха взети.

Тази нишка може да помогне при промяна на формата: Форматиране на Excel колона (или клетка) като текст в C#?

person Lanklaas    schedule 21.04.2017