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