Asp bersih membaca file excel

Membuka file Excel dalam kode telah menjadi pengalaman yang menyakitkan jauh sebelumnya. NET Core datang. Dalam banyak kasus, Anda sebenarnya membutuhkan aplikasi Excel yang diinstal pada mesin target/pengguna untuk dapat membuka file excel melalui kode. Jika Anda pernah menggunakan kueri "OLE DB Jet" sebelumnya, Anda tahu itu bukan pengalaman yang hebat. Untungnya ada beberapa solusi open source yang cukup bagus sekarang yang tidak memerlukan excel pada mesin target. Ini bagus untuk pengguna Windows sehingga Anda tidak perlu menginstal excel di mesin pengguna target atau server web, tetapi juga untuk hosting orang. Aplikasi .NET Core di Linux (Dan bahkan Mac/ARM) – di mana Excel jelas tidak terlihat di mana pun

Metodologi saya untuk artikel ini cukup sederhana. Buat buku kerja excel standar dengan beberapa lembar, beberapa rumus, dan beberapa kasus pemformatan khusus. Baca data yang sama di setiap perpustakaan dan lihat mana yang paling cocok untuk saya. Sederhana. Mari kita pergi

Buat Spreadsheet Magic dengan IronXL – Baca, Tulis, dan Buat dalam C#. BERSIH

Setelah membantu Lego dan NASA dengan kesengsaraan spreadsheet mereka – IronXL memenuhi kebutuhan spreadsheet Anda dengan memvalidasi, mengonversi, menyimpan, dan memodifikasi file Excel. IronXL membaca, menulis, dan membuat file buku kerja excel di C#. NET Core hanya dalam beberapa baris kode. IronXL bekerja dengan banyak format excel seperti XLS/XLSX/CSV/TSV. Uji dan bagikan proyek Anda langsung dengan kunci uji coba gratis IronXL 30 hari atau rasakan manfaat lisensi mulai dari $399 dengan dukungan teknisi 24 jam

Catatan Pada Format CSV

Saya harus mencatat bahwa jika Anda membaca CSV, atau lebih dari satu lembar excel yang tidak memiliki rumus atau apa pun "excel" khusus pada lembar tersebut, Anda sebaiknya menguraikannya menggunakan teknik CSV standar. Kami memiliki artikel bagus di sini tentang parsing CSV di C#. NET yang seharusnya Anda ikuti. Pengurai CSV sangat bagus untuk mengambil data tabular dan membatalkan serialisasinya menjadi objek dan harus digunakan jika memungkinkan

Contoh Data

Saya pikir cara terbaik untuk membandingkan berbagai perpustakaan yang ditawarkan adalah dengan membuat spreadsheet sederhana untuk membandingkan berbagai cara kita dapat membaca data. Spreadsheet akan memiliki dua "lembar", di mana lembar kedua mereferensikan yang pertama

Lembar 1 diberi nama "Lembar Pertama" dan sepertinya begitu

Asp bersih membaca file excel

Perhatikan bahwa sel A2 hanyalah angka “1”. Kemudian di kolom B2, kita memiliki referensi ke sel A2. Ini karena kami ingin memeriksa apakah perpustakaan memungkinkan kami untuk tidak hanya mendapatkan "formula" dari sel, tetapi juga nilai yang dihitung seharusnya.

Kami juga menata sel A2 dengan warna font merah, dan B2 memiliki batas penuh (Meskipun sulit dilihat karena saya mencoba menunjukkan fomula). Kami akan mencoba dan mengekstrak elemen gaya ini nanti

Lembar 2 diberi nama "Lembar Kedua" dan sepertinya begitu

Asp bersih membaca file excel

Jadi kami melakukan rumus "JUMLAH" sederhana dan mereferensikan lembar pertama. Sekali lagi, ini agar kami dapat menguji mendapatkan rumus dan nilai yang dihitung, tetapi kali ini di lembar yang berbeda. Tidak rumit bagi seseorang yang terbiasa bekerja dengan Excel, tetapi mari kita lihat bagaimana beberapa pustaka menanganinya

Secara umum, dalam pengujian saya, saya mencari keluaran saya untuk selalu mengikuti format yang sama

Sheet 1 Data
Cell A2 Value   : 
Cell A2 Color   :
Cell B2 Formula :
Cell B2 Value   :
Cell B2 Border  :

Sheet 2 Data
Cell A2 Formula :
Cell A2 Value   :

Dengan begitu saat saya menunjukkan kodenya, Anda dapat memilih perpustakaan yang paling masuk akal bagi Anda

EPPlus

Ketika saya pertama kali mulai mencari-cari parsing excel. NET Core, saya ingat menggunakan EPPlus beberapa bulan yang lalu untuk penguraian excel yang sangat ringan. Paket nuget dapat ditemukan di sini. https. // www. nuget. org/paket/EPPlus/. Ini juga open source sehingga Anda dapat membaca kode sumber jika itu yang Anda inginkan di sini. https. //github. com/JanKallman/EPPlus

Kode untuk membaca spreadsheet excel kita terlihat seperti itu

static void Main(string[] args)
{
    using(var package = new ExcelPackage(new FileInfo("Book.xlsx")))
    {
        var firstSheet = package.Workbook.Worksheets["First Sheet"];
        Console.WriteLine("Sheet 1 Data");
        Console.WriteLine($"Cell A2 Value   : {firstSheet.Cells["A2"].Text}");
        Console.WriteLine($"Cell A2 Color   : {firstSheet.Cells["A2"].Style.Font.Color.LookupColor()}");
        Console.WriteLine($"Cell B2 Formula : {firstSheet.Cells["B2"].Formula}");
        Console.WriteLine($"Cell B2 Value   : {firstSheet.Cells["B2"].Text}");
        Console.WriteLine($"Cell B2 Border  : {firstSheet.Cells["B2"].Style.Border.Top.Style}");
        Console.WriteLine("");

        var secondSheet = package.Workbook.Worksheets["Second Sheet"];
        Console.WriteLine($"Sheet 2 Data");
        Console.WriteLine($"Cell A2 Formula : {secondSheet.Cells["A2"].Formula}");
        Console.WriteLine($"Cell A2 Value   : {secondSheet.Cells["A2"].Text}");
    }
}
_

Jujur apa yang bisa saya katakan. Ini *sangat* mudah dan bekerja langsung di luar kotak. Itu mengambil formula vs teks dengan sempurna. Gaya pada lembar pertama kami juga cukup mudah untuk diterapkan. Perbatasan sedikit mengganggu karena Anda harus memeriksa "Gaya" perbatasan, dan jika itu adalah gaya "Tidak Ada", berarti tidak ada perbatasan (Berlawanan dengan boolean untuk "HasBorder" atau serupa). Tapi saya pikir saya hanya memilih-milih, EPPlus hanya berfungsi

NPOI

NPOI adalah opsi sumber terbuka lainnya dengan Github di sini. https. //github. com/tonyqus/npoi dan Nuget di sini. https. // www. nuget. org/paket/NPOI/. Itu belum dirilis selama lebih dari setahun yang tidak terlalu buruk karena tidak seperti Excel itu sendiri yang memiliki banyak pembaruan sepanjang tahun, tetapi daftar Masalah di Github tumbuh sedikit dengan beberapa bug yang adil, jadi pertahankan itu.

Kode untuk membaca data kita menggunakan NPOI terlihat seperti itu

… Sebenarnya kamu tahu apa. Saya menghabiskan banyak waktu untuk mencoba dan mencari cara terbaik untuk menggunakan NPOI dan dokumentasinya sangat buruk. Wikinya ada di sini. https. //github. com/tonyqus/npoi/wiki/Getting-Started-with-NPOI tetapi memiliki beberapa contoh tetapi kebanyakan/semuanya tentang membuat buku kerja excel bukan membacanya. Saya melihat mereka memiliki tautan ke tutorial tentang cara membaca file Excel yang tampak menjanjikan, tetapi itu benar-benar membaca spreadsheet dan kemudian membuang teksnya.

Setelah menggunakan EPPlus, saya tidak melihat alasan untuk melanjutkan dengan yang satu ini. Hampir setiap jawaban google akan mengarahkan Anda ke StackOverflow dengan orang-orang yang menggunakan NPOI dengan kasus penggunaan khusus sehingga tidak pernah benar-benar disatukan untuk saya

ExcelDataReader

ExcelDataReader muncul dalam beberapa jawaban stackoverflow saat membaca excel. Inti BERSIH. Mirip dengan yang lain dalam daftar ini, ini open source di sini. https. //github. com/ExcelDataReader/ExcelDataReader dan di Nuget di sini. https. // www. nuget. org/paket/ExcelDataReader/

Saya ingin membuat ini berhasil tetapi…. Sepertinya tidak intuitif sama sekali. ExcelDataReader bekerja dengan asumsi bahwa Anda membaca "baris" dan "kolom" secara berurutan hampir dengan gaya CSV. Semacam itu berfungsi tetapi jika Anda mencari sel tertentu, itu sangat sulit

Beberapa contoh kode

static void Main(string[] args)
{
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    using (var stream = File.Open("Book.xlsx", FileMode.Open, FileAccess.Read))
    {
        using (var reader = ExcelReaderFactory.CreateReader(stream))
        {
            do
            {
                while (reader.Read()) //Each ROW
                {
                    for (int column = 0; column < reader.FieldCount; column++)
                    {
                        //Console.WriteLine(reader.GetString(column));//Will blow up if the value is decimal etc. 
                        Console.WriteLine(reader.GetValue(column));//Get Value returns object
                    }
                }
            } while (reader.NextResult()); //Move to NEXT SHEET

        }
    }
}

Baris pertama khususnya sangat mengganggu (Semuanya meledak tanpa itu). Tapi Anda akan melihat bahwa kami bergerak melalui baris demi baris (Dan lembar demi lembar) mencoba untuk mendapatkan nilai. Selain itu, memanggil hal-hal seperti "GetString" tidak berfungsi jika nilainya desimal (Cast implisit akan menjadi IMO yang lebih baik). Saya juga tidak dapat menemukan cara untuk mendapatkan rumus sel yang sebenarnya. Di atas hanya mengembalikan hasil yang dihitung

Saya akan bekerja keras dan benar-benar mendapatkan hasil yang kami cari, tetapi itu bukan perpustakaan yang akan saya gunakan

Sinkronisasi

Syncfusion adalah salah satu perusahaan menjengkelkan yang membuat pustaka berbayar untuk digunakan, mengunggahnya ke nuget, lalu dalam cetakan kecil mengatakan Anda perlu membeli lisensi atau lainnya. Secara pribadi, saya ingin melihat Microsoft tidak mengizinkan perpustakaan berbayar ke repo Nuget publik. Saya akan menyertakannya di sini, tetapi lisensinya mulai dari $995 per tahun, per pengembang, jadi saya tidak melihat banyak alasan untuk menggunakannya untuk sebagian besar kasus penggunaan. Halaman nuget dapat ditemukan di sini https. // www. nuget. org/paket/Sinkronisasi. XlsIO. Bersih. Inti/

Kodenya terlihat seperti

static void Main(string[] args)
{
    ExcelEngine excelEngine = new ExcelEngine();
    using (var stream = File.Open("Book.xlsx", FileMode.Open, FileAccess.Read))
    {
        var workbook = excelEngine.Excel.Workbooks.Open(stream);

        var firstSheet = workbook.Worksheets["First Sheet"];
        Console.WriteLine("Sheet 1 Data");
        Console.WriteLine($"Cell A2 Value   : {firstSheet.Range["A2"].DisplayText}");
        Console.WriteLine($"Cell A2 Color   : {firstSheet.Range["A2"].CellStyle.Font.RGBColor.Name}");
        Console.WriteLine($"Cell B2 Formula : {firstSheet.Range["B2"].Formula}");
        Console.WriteLine($"Cell B2 Value   : {firstSheet.Range["B2"].DisplayText}");
        Console.WriteLine($"Cell B2 Border  : {firstSheet.Range["B2"].CellStyle.Borders.Value}");
        Console.WriteLine("");

        var secondSheet = workbook.Worksheets["Second Sheet"];
        Console.WriteLine($"Sheet 2 Data");
        Console.WriteLine($"Cell A2 Formula : {secondSheet.Range["A2"].Formula}");
        Console.WriteLine($"Cell A2 Value   : {secondSheet.Range["A2"].DisplayText}");
    }
}

Jadi tidak buruk. Harus saya akui, saya mengutak-atik mencoba memahami cara kerjanya di luar perbatasan (Karena kode di atas tidak berfungsi), tetapi menyerah. Warna font juga memerlukan beberapa utak-atik di mana perpustakaan mengembalikan objek non standar sebagai warnanya. Beberapa properti untuk data aktual juga agak membingungkan di mana Anda memiliki nilai, teks, teks tampilan, dll. Semua mengembalikan hal-hal yang sedikit berbeda sehingga Anda hanya perlu menyemprot dan berdoa dan melihat mana yang berhasil

Jika EPPlus tidak ada, dan Syncfusion tidak terlalu mahal, perpustakaan ini sebenarnya cukup bagus

Cara membaca file XLSX di ASP. C# bersih?

Cara Membaca Berkas Excel di C# .
Unduh Perpustakaan C# untuk membaca file Excel
Muat dan baca file Excel (buku kerja)
Buat buku kerja Excel dalam format CSV atau XLSX
Edit nilai sel dalam rentang sel
Validasi data spreadsheet
Ekspor data menggunakan Entity Framework

Bagaimana cara membaca data dari file Excel di asp net Core?

Langkah-langkah membaca file Excel .
Membuat atau menggunakan yang sudah ada. proyek inti .NET
Unduh dan instal GemBox. Penyiapan Lembar Bentang
Tambahkan referensi ke GemBox. Spreadsheet. dll di dalam Anda. proyek inti .NET
Secara opsional, Anda dapat menambahkan GemBox. Paket Nuget Spreadsheet ke C# atau VB Anda. proyek BERSIH
Jalankan C#/VB. Kode .NET di bawah ini

Apa cara terbaik untuk membaca file Excel di C#?

Cara Membaca Berkas Excel di C Sharp .
Instal IronXL Excel Library dari NuGet atau unduhan DLL
Gunakan Buku Kerja. Muat metode untuk membaca dokumen XLS, XLSX atau CSV
Dapatkan nilai Sel menggunakan sintaks intuitif. lembar["A11"]. Nilai Desimal

Cara membaca file Excel di ASP. MVC bersih?

Buat, baca, dan edit file Excel di ASP. .NET MVC .
Pengontrol default dengan nama HomeController. cs ditambahkan pada pembuatan ASP. proyek .NET MVC. .
Metode tindakan default bernama Index akan hadir di HomeController. cs. .
Tambahkan tombol baru di Indeks. .
Tambahkan metode tindakan baru CreateDocument di HomeController