none
Не читаются числовые данные из EXCEL RRS feed

  • Вопрос

  • В Приложении на C# пытаюсь читать файлы xls и xlsx таким образом:

    private DataTable ReadFromXLS(string pathName, string fileName) 
            {
                if (File.Exists(pathName + fileName))
                {  
                    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                        "Data Source =" + pathName + fileName + ";" + "Extended Properties=Excel 8.0;";
                    OleDbConnection conn = new OleDbConnection(strConn);
                    conn.Open();
                    DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                    string sheet = (string)schemaTable.Rows[0].ItemArray[2];
    
                    OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM[" + sheet + "]", strConn);
    
                    DataSet dataSet = new DataSet();
                    myCommand.Fill(dataSet);
                    conn.Close();
                    return dataSet.Tables[0];
                }
                else { return null; }
    }

    При этом все строковые и некоторые числовые данные читаются. А в некоторых колонках числвые данные не считываются.

    Вот пример данных:

    Код Артикул  Кросс номер Номенклатура Комментарий Страна происхождения Бренд Номенклатура.Производитель Дилер (АМД)
    Цена Ед.
    42157       553101C200 N5520516G/G12413LR  Амортизатор задний газовый 55310-1C200/AMD.SA139 AMD HYUNDAI (Getz 02-) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA139 605 шт.
    42161       553102B211   Амортизатор задний газовый 55310-2B211/AMD.SA144 AMD HYUNDAI (Santa Fe NEW 07-) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA144 796 шт.
    42158       553112H000   Амортизатор задний газовый 553112H000/AMD.SA141 AMD HYUNDAI (Elantra New (06-)) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA141 990 шт.
    42153       5531138610 PJA-R011 Амортизатор задний газовый 5531138610/AMD.SA135 AMD HYUNDA (SONATA 5 02-) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA135 1029 шт.
    4454        96494605 443399 / DW9A-05-865 / 27-J64-0 Амортизатор задний газовый 96494605 /AMD.SA311 AMD CHEVROLET (Aveo) DAEWOO (Kalos) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA311 681 шт.
    4497        0K2SB28900A PJB-134A Амортизатор задний левый газовый 0K2SB28900A /AMD.SA122L (стойка) AMD KIA (Shuma II/Spectra ИЖ +ABS -ABS) КОРЕЯ, РЕСПУБЛИКА  AMD AMD.SA122L 1370 шт.

    20 октября 2012 г. 17:17

Ответы

  • Дело в том что возникла проблема при установке драйвера x32 - из-за установленного офиса x64. Я скомпилировал приложение под x64 и все заработало. 

    Что касается нечитаемой колонки. Была ошибка в строке подключения. Нужно установить  IMEX=1 - тогда все данные считываются как текст, и никаких проблем не возникает.

    string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        "Data Source =" + fileName + ";" + "Extended Properties=\"Excel 8.0; HDR=NO; IMEX=1\"";

     

    • Помечено в качестве ответа Abolmasov Dmitry 4 декабря 2012 г. 12:38
    4 декабря 2012 г. 12:12

Все ответы

  • В данном случае Колонка Код считывается, а некоторые значения в колонке Артикул - нет
    20 октября 2012 г. 17:18
  • Привет.

    Проблема еще актуальна? Если можете - выложите куда-нибудь сам Excel файл и оставьте здесь ссылку. Есть подозрения на формат данных ячейки, то что для некоторых ячеек выбран неверный формат.


    Для связи [mail]


    23 октября 2012 г. 9:10
  • Здравствуйте.

    Была подобная проблема. Решил ее, отказавшись от ADO.NET. Стал использовать для чтения xls/xlsx файлов автоматизацию Excel.

    26 октября 2012 г. 18:47
  • Добрый день. Прошу прощения отсутствовал.

    Сейчас проверил на нескольких файлах - проблема не проявилась.

    Помогите решить другой вопрос. При подключении через Microsoft.ACE.OLEDB.12.0 - пишет что данный провайдер отсутствует. AccessDatabaseEngine устанавливал. В чем может быть проблема? 

    Мне необходимо чтение всей книги xlsx в DataSet. Сторонние библиотеки не хотелось бы использовать во избежание перебора строк - хочу использовать встроенные функции .net



    • Изменено ArtProg 29 ноября 2012 г. 12:41
    • Помечено в качестве ответа Abolmasov Dmitry 4 декабря 2012 г. 11:38
    • Снята пометка об ответе Abolmasov Dmitry 4 декабря 2012 г. 12:38
    29 ноября 2012 г. 12:38
  • не могли бы привести пример такой работы? для этого, как я понял, необходим установленный на клиенте экземпляр excel?

    Здравствуйте.

    Была подобная проблема. Решил ее, отказавшись от ADO.NET. Стал использовать для чтения xls/xlsx файлов автоматизацию Excel.


    29 ноября 2012 г. 12:40
  • Добрый день.

    Для работы с файлами Excel последних версий (расширения файлов docx), вы можете воспользоваться замечательной библиотекой OpenXML.

    30 ноября 2012 г. 6:27
    Отвечающий
  • Привет,

    Отдельный вопрос лучше задавать в новой теме.

    При установке AccessDatabaseEngine вы точно нужную битность выбрали? Битность офиса и драйвера должны совпадать. Попробуйте доустановить другую разрядность библиотеки Microsoft Access Database Engine 2010 Redistributable


    Для связи [mail]

    4 декабря 2012 г. 11:35
  • Так понял, что вы все же воспользовались сторонней библиотекой. Продолжение обсуждения в топике - Не читается колонка из xlsx

    Для связи [mail]


    4 декабря 2012 г. 11:40
  • Дело в том что возникла проблема при установке драйвера x32 - из-за установленного офиса x64. Я скомпилировал приложение под x64 и все заработало. 

    Что касается нечитаемой колонки. Была ошибка в строке подключения. Нужно установить  IMEX=1 - тогда все данные считываются как текст, и никаких проблем не возникает.

    string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        "Data Source =" + fileName + ";" + "Extended Properties=\"Excel 8.0; HDR=NO; IMEX=1\"";

     

    • Помечено в качестве ответа Abolmasov Dmitry 4 декабря 2012 г. 12:38
    4 декабря 2012 г. 12:12