Saya menggunakan OleDb untuk membaca dari buku kerja excel dengan banyak lembar.
Saya perlu membaca nama sheet, tetapi saya membutuhkannya dalam urutan yang ditentukan dalam spreadsheet; jadi Jika saya memiliki file yang terlihat seperti ini;
|_____|_____|____|____|____|____|____|____|____|
|_____|_____|____|____|____|____|____|____|____|
|_____|_____|____|____|____|____|____|____|____|
\__GERMANY__/\__UK__/\__IRELAND__/
Lalu aku perlu mendapatkan kamusnya
1="GERMANY",
2="UK",
3="IRELAND"
Saya sudah mencoba menggunakan OleDbConnection.GetOleDbSchemaTable()
, dan itu memberi saya daftar nama, tetapi menurut abjad mereka mengurutkannya. Alfa-sort berarti saya tidak tahu nomor sheet mana yang sesuai dengan nama tertentu. Jadi saya mendapatkan;
GERMANY, IRELAND, UK
yang telah mengubah urutan UK
dan IRELAND
.
Alasan saya membutuhkannya untuk diurutkan adalah karena saya harus membiarkan pengguna memilih kisaran data berdasarkan nama atau indeks; mereka bisa menanyakan 'semua data dari JERMAN ke IRELAND' atau 'data dari sheet 1 sampai sheet 3'.
Ide apa pun akan sangat dihargai.
jika saya dapat menggunakan kelas interop kantor, ini akan sangat mudah. Sayangnya, saya tidak bisa karena kelas interop tidak bekerja dengan andal di lingkungan non-interaktif seperti layanan windows dan situs ASP.NET, jadi saya perlu menggunakan OLEDB.
sumber
Jawaban:
Tidak dapat menemukan ini dalam dokumentasi MSDN yang sebenarnya, tetapi kata seorang moderator di forum
Nama Lembar Excel dalam Urutan Lembar
Sepertinya ini akan menjadi persyaratan yang cukup umum sehingga akan ada solusi yang layak.
sumber
Bisakah Anda tidak hanya mengulang lembar dari 0 ke Hitungan nama -1? dengan cara itu Anda harus memasukkannya dalam urutan yang benar.
Edit
Saya melihat melalui komentar bahwa ada banyak kekhawatiran tentang penggunaan kelas Interop untuk mengambil nama sheet. Oleh karena itu, berikut adalah contoh penggunaan OLEDB untuk mengambilnya:
Diambil dari Artikel di CodeProject.
sumber
Karena kode di atas tidak mencakup prosedur untuk mengekstrak daftar nama sheet untuk Excel 2007, kode berikut juga akan berlaku untuk Excel (97-2003) dan Excel 2007:
Fungsi di atas mengembalikan daftar lembar dalam file excel tertentu untuk kedua jenis excel (97,2003,2007).
sumber
Ini singkat, cepat, aman, dan dapat digunakan ...
sumber
exceladdress
- apa ini?Cara lain:
file xls (x) hanyalah kumpulan file * .xml yang disimpan dalam wadah * .zip. unzip file "app.xml" di folder docProps.
File tersebut adalah file Jerman (Arbeitsblätter = lembar kerja). Nama tabel (Tabelle3 dll) berada dalam urutan yang benar. Anda hanya perlu membaca tag ini;)
salam
sumber
Saya telah membuat fungsi di bawah ini menggunakan informasi yang diberikan dalam jawaban dari @kraeppy ( https://stackoverflow.com/a/19930386/2617732 ). Ini membutuhkan .net framework v4.5 untuk digunakan dan membutuhkan referensi ke System.IO.Compression. Ini hanya berfungsi untuk file xlsx dan tidak untuk file xls yang lebih lama.
sumber
Saya suka ide @deathApril untuk memberi nama sheet sebagai 1_Germany, 2_UK, 3_IRELAND. Saya juga mendapat masalah Anda untuk melakukan penggantian nama ini untuk ratusan lembar. Jika Anda tidak memiliki masalah untuk mengganti nama lembar maka Anda bisa menggunakan makro ini untuk melakukannya untuk Anda. Diperlukan waktu kurang dari detik untuk mengganti nama semua nama sheet. sayangnya ODBC, OLEDB mengembalikan urutan nama sheet dengan asc. Tidak ada pengganti untuk itu. Anda harus menggunakan COM atau mengganti nama Anda agar sesuai.
PEMBARUAN: Setelah membaca komentar @SidHoland tentang BIFF, sebuah ide muncul. Langkah-langkah berikut dapat dilakukan melalui kode. Tidak tahu apakah Anda benar-benar ingin melakukannya untuk mendapatkan nama sheet dalam urutan yang sama. Beri tahu saya jika Anda memerlukan bantuan untuk melakukan ini melalui kode.
UPDATE: Solusi lain - NPOI mungkin bisa membantu di sini http://npoi.codeplex.com/
Solusi ini berfungsi untuk xls. Saya tidak mencoba xlsx.
Terima kasih,
Esen
sumber
Ini berhasil untuk saya. Dicuri dari sini: Bagaimana Anda mendapatkan nama halaman pertama buku kerja excel?
sumber
Coba ini. Berikut adalah kode untuk mendapatkan nama sheet secara berurutan.
sumber
Excel.XlFileFormat.xlWorkbookNormal
)Sesuai MSDN, Dalam kasus spreadsheet di dalam Excel, ini mungkin tidak berfungsi karena file Excel bukan database nyata. Jadi Anda tidak akan bisa mendapatkan nama lembar dalam urutan visualisasinya di buku kerja.
Kode untuk mendapatkan nama sheet sesuai tampilan visualnya menggunakan interop:
Tambahkan referensi ke Perpustakaan Objek Microsoft Excel 12.0.
Kode berikut akan memberikan nama lembar dalam urutan sebenarnya yang disimpan di buku kerja, bukan nama yang diurutkan.
Kode sampel:
sumber
Saya tidak melihat dokumentasi apa pun yang mengatakan pesanan di app.xml dijamin sebagai urutan lembar. MUNGKIN, tetapi tidak sesuai dengan spesifikasi OOXML.
File workbook.xml, di sisi lain, menyertakan atribut sheetId, yang menentukan urutannya - dari 1 hingga jumlah sheet. Ini sesuai dengan spesifikasi OOXML. workbook.xml dideskripsikan sebagai tempat penyimpanan urutan sheet.
Jadi membaca workbook.xml setelah diekstraksi dari XLSX akan menjadi rekomendasi saya. BUKAN app.xml. Daripada docProps / app.xml, gunakan xl / workbook.xml dan lihat elemennya, seperti yang ditunjukkan di sini -
`
`
sumber