Mengimpor Data Excel Tampaknya Memberikan Nilai Null Secara Acak

Menggunakan SSIS untuk Visual Studio 2017 untuk beberapa impor file excel.

Saya telah membuat sebuah paket dengan beberapa wadah loop yang memanggil paket tertentu untuk menangani beberapa file. Saya memiliki masalah dengan satu paket tertentu yang sedang dieksekusi yang tampaknya secara acak memutuskan data untuk kolom adalah NULL per file excel. Saya mendapat kesan bahwa ini adalah bagian dari pengaturan registri untuk TypeGuessRows (awalnya diubah menjadi 0 kemudian menjadi 1000 sebagai pengujian) yang terletak di

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

Alasan menurut saya hal ini karena berbagai file yang dibawa umumnya memiliki data yang sama, namun nampaknya jika beberapa baris kolom pertama pada data sumber hanya berisi angka, maka data dengan nilai campuran tidak akan dibawa masuk dengan benar. . Semua kolom lain selain ini tampaknya baik-baik saja.

Melihat file sumber, semuanya memiliki tipe data yang sama. Saya telah mencoba mengubah nilai registri TypeGuessRows dan memastikan bahwa properti kolom keluaran berbasis string, bukan numerik. String koneksi memiliki IMEX=1


person J. Sutton    schedule 29.05.2019    source sumber


Jawaban (2)


Jadi saya memperbaikinya. Atau setidaknya menemukan solusi yang memadai yang dapat membantu siapa pun dalam situasi saya. Saya pikir ada hubungannya dengan cache SSIS. Saya akhirnya meletakkan fungsi pengurutan pada kolom masalah sehingga catatan yang dibaca sebagai NULL karena memiliki tipe data acak dibaca terlebih dahulu, dan tidak dianggap acak. Saya akan mengatakan, Saya mencoba ini pada awalnya dan tidak berhasil. Melalui sedikit percobaan membuat aliran data baru dalam paket yang sama saya menemukan bahwa solusi ini benar-benar berhasil, oleh karena itu saya memikirkan cache itulah masalahnya. Jika ada yang memiliki pertanyaan lebih lanjut mengenai hal ini, beri tahu saya.

person J. Sutton    schedule 06.06.2019
comment
Saya menghadapi masalah yang sama. Mohon berikan solusi untuk diterapkan. - person giparekh; 28.07.2020

Masalah ini terkait dengan penyedia OLEDB yang digunakan untuk membaca file excel: Karena excel bukanlah database yang setiap kolomnya memiliki tipe data tertentu, penyedia OLEDB mencoba mengidentifikasi tipe data dominan yang ditemukan di setiap kolom dan mengganti semua tipe data lain yang tidak bisa. diuraikan dengan NULL.

Ada banyak artikel daring yang membahas masalah ini dan memberikan beberapa solusi (tautan tercantum di bawah).

Namun setelah menggunakan SSIS selama bertahun-tahun, saya dapat mengatakan bahwa praktik terbaiknya adalah mengonversi file excel ke file csv dan membacanya menggunakan komponen Flat File.

Atau, jika Anda tidak mempunyai pilihan untuk mengkonversi file excel ke flat maka Anda dapat memaksa manajer koneksi excel untuk mengabaikan header dari baris pertama tetapi menambahkan HDR=NO ke string koneksi dan menambahkan IMEX=1 untuk memberitahu penyedia OLEDB untuk menentukan tipe data dari baris pertama (yang merupakan header - sebagian besar string), dalam hal ini semua kolom diimpor sebagai string dan tidak ada nilai yang diganti dengan NULL tetapi Anda akan kehilangan header dan baris tambahan (baris header diimpor).

Jika Anda tidak dapat mengabaikan baris header, cukup tambahkan baris dummy yang berisi nilai string dummy (contoh: aaa) setelah baris header dan tambahkan IMEX=1 ke string koneksi.

Tautan bermanfaat

person Hadi    schedule 30.05.2019
comment
Hai, terima kasih atas tanggapannya, tetapi saya tidak dapat mengubah sumber datanya. HDR sudah disetel ke NO karena masalah yang tidak terkait; Saya pikir ini tidak relevan dengan masalah ini, jadi saya tidak menyebutkannya di postingan. Juga, sesuai postingan awal, IMEX=1 telah ditetapkan. Saya telah membaca beberapa tautan yang Anda berikan sebelum memposting pertanyaan ini dan dalam membaca sisanya sepertinya mereka semua merekomendasikan variasi IMEX=1 dan/atau mengubah registri untuk memastikan TypeGuessRows adalah 0, serta memeriksa tipe data yang semuanya saya sebutkan di posting saya sudah dilakukan. - person J. Sutton; 30.05.2019