0 oy
452 gösterim
Merhaba. C# ClosedXML kullanarak Excel dosyasını nasıl okuyabilirim? Yardımcı olursanız sevinirim.

1 cevap

0 oy
 
En İyi Cevap

Merhaba. C# da ClosedXML kullanarak Excel dosyası okuma işlemi de oldukça kolaydır. ClosedXML kütüphanesini kendi projelerimde de kullandığımdan dolayı bununla ilgili bir metodum vardı. Onu sizinle paylaşayım. Kodun açıklamaları da mevcut. Metodun kullanımı çok basit. MyGetDataTableFromExcel(DOSYA_YOLU); bu şekilde metodu kullanabiliyorsunuz. Metod içerisinde pFirstRowCaption parametresini göreceksiniz. Bu parametre de Excel dosyasında ki ilk satırın DataTable başlığı kabul edilip edilmeyeceğini belirlemek için kullanılır. True yaparsanız ilk satır kolon başlığı olarak alınır. Using bloğunu da eklemeyi unutmayın.

Bu arada bu metot içerisinde ben Excel dosyasında varsa formüllerin dikkate alınmamasını o hücreye boş değer atanmasını sağladım. Formüllü bir işleminiz var ise bu metodu düzenlemeniz gerekebilir.

using ClosedXML.Excel;

 public static DataTable MyGetDataTableFromExcel(string pExcelFileName, bool pFirstRowCaption=true) {
            try {
                // Excel dosyası okunuyor...
                using (XLWorkbook W_ExcelFile = new XLWorkbook(pExcelFileName)) { 

                    // Excel dosyasın da ki birinci sayfayı alıyoruz..
                    IXLWorksheet W_WorkSheet = W_ExcelFile.Worksheet(1); 
                    DataTable W_DT = new DataTable();

                    // Excel içerisinde ki dolu satırlar arasında döngü kuruluyor...
                    foreach (IXLRow W_SheetRow in W_WorkSheet.RowsUsed()) {

                        #region DataTable kolonları ekleniyor...
                        if (W_DT.Columns.Count == 0) { // DataTable icerisine kolon eklenmediyse

                            if (pFirstRowCaption) {
                                // Kolon adlari Excel 1.satiri olarak ayarlanıyor...
                                foreach (IXLCell W_Cell in W_SheetRow.CellsUsed()) {
                                    W_DT.Columns.Add(W_Cell.Value?.ToString() ?? "");
                                }
                                // Sonra ki Excel satirina gec
                                continue;
                            }
                            else {
                                // Kolon adlari Column1, Column2.. şeklinde ayarlanıyor...
                                foreach (IXLCell W_Cell in W_SheetRow.CellsUsed()) {
                                    W_DT.Columns.Add("Column" + W_Cell.Address.ColumnNumber);
                                }
                            } // if pFirstRowCaption

                        } //if
                        #endregion

                        DataRow W_Row = W_DT.NewRow();
                        foreach (IXLCell W_Cell in W_SheetRow.CellsUsed()) {
                            if (!W_Cell.HasFormula) {
                                // Hücrede formül yoksa ilgili hücre verisi yeni DataRow kolonuna yazılıyor...
                                W_Row[W_Cell.Address.ColumnNumber-1] = W_Cell.Value.ToString(); 
                            }
                        } // Foreach Cells
                        W_DT.Rows.Add(W_Row); // Doldurulan yeni DataRow geri döndürülecek DataTable içerisine ekleniyor...

                    } // Foreach Sheets
                    return W_DT; 
                }
            }
            catch (Exception ex) {
                throw new Exception(ex.Message + "\nClass:"+ MethodBase.GetCurrentMethod().DeclaringType.Name+"\nMethod:" + System.Reflection.MethodBase.GetCurrentMethod().Name);
            }

Türkiye'nin en iyi soru cevap sitesi | SorSoyleyelim.com

İlgili sorular

0 oy
1 cevap
2 Mayıs 2020 misafir sordu

Web sitemiz hakkında ki reklam,istek,öneri ve şikayetlerinizi iletisim(at)sorsoyleyelim.com adresine mail atabilir veya sitemizin iletişim formu üzerinden bize yazabilirsiniz.
Sitede ki içeriklerin izinsiz kullanılması ya da kopyalanması yasaktır. Bknz: Kullanım şartları.
...