|  | @@ -1,4 +1,5 @@
 | 
	
		
			
				|  |  |  using ClosedXML.Excel;
 | 
	
		
			
				|  |  | +using ExcelORM.Models;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace ExcelORM;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -38,20 +39,35 @@ public class ExcelReader
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public IEnumerable<T> Read<T>(uint startFrom = 1, uint skip = 0) where T : class, new()
 | 
	
		
			
				|  |  | +    public IEnumerable<T> Read<T>(string? worksheetName, uint startFrom = 1, uint skip = 0) where T : class, new()
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        return xlWorkbook.Worksheets.SelectMany(worksheet => Read<T>(worksheet, startFrom, skip));
 | 
	
		
			
				|  |  | +        var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
 | 
	
		
			
				|  |  | +        if (worksheet == null) yield break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        foreach (var value in Read<T>(worksheet, startFrom, skip))
 | 
	
		
			
				|  |  | +            yield return value;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public IEnumerable<T> Read<T>(string? worksheetName, uint startFrom = 1, uint skip = 0) where T : class, new()
 | 
	
		
			
				|  |  | +    public IEnumerable<T> Read<T>(int worksheetIndex = 1, uint startFrom = 1, uint skip = 0) where T : class, new()
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Name.Equals(worksheetName, StringComparison.InvariantCultureIgnoreCase));
 | 
	
		
			
				|  |  | +        if (worksheetIndex > xlWorkbook.Worksheets.Count) yield break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        var worksheet = xlWorkbook.Worksheets.FirstOrDefault(x => x.Position == worksheetIndex);
 | 
	
		
			
				|  |  |          if (worksheet == null) yield break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          foreach (var value in Read<T>(worksheet, startFrom, skip))
 | 
	
		
			
				|  |  |              yield return value;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    public IEnumerable<T> ReadAll<T>(uint startFrom = 1, uint skip = 0) where T : class, new()
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        foreach (var worksheet in xlWorkbook.Worksheets)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            foreach (var item in Read<T>(worksheet, startFrom, skip))
 | 
	
		
			
				|  |  | +                yield return item;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private IEnumerable<T> Read<T>(IXLWorksheet? worksheet, uint startFrom, uint skip) where T : class, new()
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          if (worksheet == null) yield break;
 |