Saya mencoba membaca file Excel (xlsx) menggunakan kode di bawah ini. Saya mendapatkan "Tabel eksternal tidak dalam format yang diharapkan." kesalahan kecuali saya memiliki file sudah terbuka di Excel. Dengan kata lain, saya harus membuka file di Excel terlebih dahulu sebelum saya dapat membaca jika dari program C # saya. File xlsx berbagi di jaringan kami. Bagaimana saya bisa membaca file tanpa harus membukanya terlebih dahulu? Terima kasih
string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
DataSet ds = new DataSet();
adaptor.Fill(ds);
}
c#
excel-2007
xlsx
import-from-excel
Sisiutl
sumber
sumber
Jawaban:
"Tabel eksternal tidak dalam format yang diharapkan." biasanya terjadi ketika mencoba menggunakan file Excel 2007 dengan string koneksi yang menggunakan: Microsoft.Jet.OLEDB.4.0 dan Extended Properties = Excel 8.0
Menggunakan string koneksi berikut tampaknya memperbaiki sebagian besar masalah.
sumber
Terima kasih untuk kode ini :) Saya sangat menghargainya. Bekerja untukku.
Jadi jika Anda memiliki versi berbeda dari file Excel, dapatkan nama file, jika ekstensinya adalah .xlsx , gunakan ini:
dan jika .xls , gunakan:
sumber
.xls
file di PC yang tidak memiliki Jet OleDb diinstal di dalamnya.(Saya memiliki reputasi yang terlalu rendah untuk berkomentar, tetapi ini adalah komentar pada entri JoshCaba, menggunakan mesin Ace bukannya Jet untuk Excel 2007)
Jika Anda tidak memiliki Ace yang diinstal / terdaftar pada mesin Anda, Anda bisa mendapatkannya di: https://www.microsoft.com/en-US/download/details.aspx?id=13255
Ini berlaku untuk Excel 2010 juga.
sumber
We're sorry, this download is no longer available
.Tambahkan saja case saya. File xls saya dibuat oleh fungsi ekspor data dari sebuah situs web, ekstensi file adalah xls, biasanya dapat dibuka oleh MS Excel 2003. Tetapi Microsoft.Jet.OLEDB.4.0 dan Microsoft.ACE.OLEDB.12.0 mendapat " Tabel eksternal tidak dalam pengecualian format yang diharapkan ".
Akhirnya, masalahnya adalah, seperti perkecualian mengatakan, "itu tidak dalam format yang diharapkan". Meskipun nama ekstensi adalah xls, tetapi ketika saya membukanya dengan editor teks, itu sebenarnya file html yang terbentuk dengan baik, semua data berada dalam <tabel>, masing-masing <tr> adalah baris dan setiap <td> adalah sel. Maka saya pikir saya dapat menguraikannya dengan cara html.
sumber
Extended Properties=""HTML Import;HDR=No;IMEX=1
Saya memiliki masalah yang sama. yang telah diselesaikan menggunakan langkah-langkah ini:
1.) Klik File
2.) Pilih "simpan sebagai"
3.) Klik pada drop down (Simpan sebagai tipe)
4.) Pilih Buku Kerja Excel 97-2003
5.) Klik pada tombol Simpan
sumber
Saya memiliki masalah yang sama (Menggunakan ACE.OLEDB) dan apa yang mengatasinya bagi saya adalah tautan ini:
http://support.microsoft.com/kb/2459087
Inti dari itu adalah bahwa menginstal beberapa versi kantor dan berbagai kantor sdk, majelis, dll. Telah mengarah ke referensi ACEOleDB.dll dalam registri yang menunjuk ke folder OFFICE12 alih-alih OFFICE14 di
Dari tautan:
sumber
Saya juga melihat kesalahan ini ketika mencoba menggunakan rumus INDIRECT () kompleks pada lembar yang sedang diimpor. Saya perhatikan ini karena ini adalah satu-satunya perbedaan antara dua buku kerja di mana satu mengimpor dan yang lainnya tidak. Keduanya adalah file 2007+ .XLSX, dan mesin 12.0 diinstal.
Saya mengkonfirmasi ini adalah masalah dengan:
dan kesalahan itu hilang.
sumber
Saya mendapatkan kesalahan dengan pihak ketiga dan Oledb membaca buku kerja XLSX. Masalahnya tampaknya lembar kerja tersembunyi yang menyebabkan kesalahan. Melonggarkan lembar kerja memungkinkan buku kerja untuk mengimpor.
sumber
Jika file hanya-baca, hapus saja dan itu akan berfungsi lagi.
sumber
Berlari ke masalah yang sama dan menemukan utas ini. Tidak ada saran di atas yang membantu kecuali untuk komentar @ Smith untuk jawaban yang diterima pada 17 April13.
Latar belakang masalah saya cukup dekat dengan @ zhiyazw - pada dasarnya mencoba mengatur file Excel yang diekspor (SSRS dalam kasus saya) sebagai sumber data dalam paket dtsx. Semua yang saya lakukan, setelah bermain-main, mengganti nama lembar kerja. Tidak harus huruf kecil seperti yang disarankan @Smith.
Saya kira ACE OLEDB mengharapkan file Excel mengikuti struktur XML tertentu tetapi entah bagaimana Layanan Pelaporan tidak menyadarinya.
sumber
Alamat file excel itu mungkin memiliki ekstensi yang salah. Anda dapat mengubah ekstensi dari xls ke xlsx atau sebaliknya dan coba lagi.
sumber
file mungkin dikunci oleh proses lain, Anda perlu menyalinnya lalu memuatnya seperti yang dikatakan dalam posting ini
sumber
Ini juga bisa berupa file yang berisi gambar atau bagan, lihat ini: http://kb.tableausoftware.com/articles/knowledgebase/resolving-error-external-table-is-not-in-expected-format
Rekomendasi ini disimpan sebagai Excel 2003
sumber
Hanya menambahkan solusi saya untuk masalah ini. Saya sedang mengunggah file .xlsx ke server web, lalu membaca darinya dan memasukkannya secara massal ke SQL Server. Sedang mendapatkan pesan kesalahan yang sama ini, mencoba semua jawaban yang disarankan tetapi tidak ada yang berhasil. Akhirnya saya menyimpan file sebagai excel 97-2003 (.xls) yang berfungsi ... satu-satunya masalah yang saya miliki sekarang adalah file aslinya memiliki 110.000 baris.
sumber
Jika Anda masih memiliki masalah ini, kemudian periksa izin Anda, saya mencoba banyak saran ini dan masalah konkret saya adalah bahwa file yang ingin saya proses berada di bawah kendali sumber dan utas tidak memiliki izin, saya harus mengubah seluruh izin folder. dan mulai bekerja (saya sedang memproses banyak file di sana) ... Ini juga cocok dengan banyak saran seperti mengubah nama file atau memeriksa bahwa file tersebut tidak dirusak oleh proses lain.
Saya harap ini membantu Anda.
sumber
Saya punya masalah ini dan mengubah Extended Properties ke HTML Impor memperbaikinya sesuai posting ini oleh Marcus Miris:
sumber
Alih-alih OleDb, Anda bisa menggunakan Interop Excel dan membuka lembar kerja sebagai hanya-baca.
https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.open(v=office.15).aspx
sumber
ACE telah Mengawasi JET
Ace Mendukung semua versi Office sebelumnya
Kode ini berfungsi dengan baik!
sumber
Ini bisa terjadi ketika buku kerja dilindungi kata sandi. Ada beberapa solusi untuk menghapus perlindungan ini, tetapi sebagian besar contoh yang Anda temukan online sudah usang. Apa pun caranya, solusi sederhana adalah membuka proteksi workbook secara manual, jika tidak gunakan sesuatu seperti OpenXML untuk menghapus proteksi secara terprogram.
sumber
Baru-baru ini saya melihat kesalahan ini dalam konteks yang tidak cocok dengan jawaban yang tercantum sebelumnya. Itu ternyata konflik dengan AutoVer . Penanganan masalah: untuk sementara menonaktifkan AutoVer.
sumber
Baru-baru ini saya memiliki "System.Data.OleDb.OleDbException (0x80004005): Tabel eksternal tidak dalam format yang diharapkan." kesalahan terjadi. Saya mengandalkan Microsoft Access 2010 Runtime. Sebelum pembaruan yang diinstal secara otomatis di server saya pada 12 Desember 2018, kode C # saya bekerja dengan baik menggunakan penyedia Microsoft.ACE.OLEDB.12.0. Setelah pembaruan dari 12 Desember 2018 diinstal saya mulai mendapatkan "Tabel eksternal tidak dalam format yang diharapkan" dalam file log saya.
Saya membuang Microsoft Access 2010 Runtime dan menginstal Microsoft Access 2013 Runtime dan kode C # saya mulai berfungsi lagi tanpa "System.Data.OleDb.OleDbException (0x80004005): Tabel eksternal tidak dalam format yang diharapkan." kesalahan.
Versi 2013 yang memperbaiki kesalahan ini untuk saya https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358
Versi 2010 yang bekerja untuk saya sebelum pembaruan yang diinstal secara otomatis di server saya pada 12 Desember. https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910 https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910
Saya juga mengalami kesalahan ini bulan lalu dalam proses otomatis. Kode C # berjalan dengan baik ketika saya menjalankannya debugging. Saya menemukan bahwa akun layanan yang menjalankan kode juga memerlukan izin untuk folder C: \ Windows \ Temp.
sumber
Lingkup saya terdiri dari pengunduhan templat dan verifikasi templat saat diisi dengan data. Jadi,
1) Unduh file templat (.xlsx) dengan baris tajuk. file dihasilkan menggunakan openxml dan berfungsi dengan baik.
2) Unggah file yang sama tanpa perubahan apa pun dari status unduhannya. Ini akan menyebabkan kesalahan koneksi dan gagal (koneksi OLEDB digunakan untuk membaca lembar excel).
Di sini jika data diisi, program bekerja seperti yang diharapkan.
Siapa pun yang memiliki ide masalah terhubung dengan file yang kami buat itu dalam format xml jika kami membukanya dan hanya menyimpannya dikonversi ke format excel dan berfungsi dengan baik.
Adakah gagasan untuk mengunduh excel dengan jenis file yang disukai?
sumber
Bekerja dengan beberapa kode lama dan menemukan pengecualian umum yang sama. Sangat sulit untuk melacak masalahnya, jadi saya pikir saya akan menambahkan di sini kalau-kalau itu membantu orang lain.
Dalam kasus saya, ada kode di tempat lain dalam proyek yang membuka StreamReader pada file Excel sebelum OleDbConnection mencoba membuka file (ini dilakukan dalam kelas dasar).
Jadi pada dasarnya saya hanya perlu memanggil
Close()
objek StreamReader terlebih dahulu, kemudian saya bisa membuka Koneksi OleDb dengan sukses. Itu tidak ada hubungannya dengan file Excel itu sendiri, atau dengan string OleDbConnection (yang secara alami di mana saya melihat pada awalnya).sumber