1

With EPPlus and Linq To Excel does anyone know the syntax on how to get all the rows?

IQueryable<Row> excelSheetValues = from workingSheet in excelFile.Worksheet(sheetName) select workingSheet;

This is not retrieving ant data. How to get all the rows for EPPlus using Linq-to-Excel

Thanos Markou
  • 2,587
  • 3
  • 25
  • 32
SamKPrasad
  • 23
  • 2
  • 10
  • Possible duplicate of [How to read excel files row by row in c# using EPPlus](https://stackoverflow.com/questions/37592605/how-to-read-excel-files-row-by-row-in-c-sharp-using-epplus) – Jim G. May 21 '19 at 19:12

1 Answers1

2

This GitHub sample might help you.

Excel package provide a lots of helper method..

using (ExcelPackage package = new ExcelPackage(existingFile))

You can iterate through the workbook and query like,

(from cell in sheet.Cells[sheet.Dimension.Address] where cell.Style.Font.Bold select cell);

Sample code from the link.

public static void RunLinqSample(DirectoryInfo outputDir)
    {
        Console.WriteLine("Now open sample 7 again and perform some Linq queries...");
        Console.WriteLine();

        FileInfo existingFile = new FileInfo(outputDir.FullName + @"\sample7.xlsx");
        using (ExcelPackage package = new ExcelPackage(existingFile))
        {
            ExcelWorksheet sheet = package.Workbook.Worksheets[1];

            //Select all cells in column d between 9990 and 10000
            var query1= (from cell in sheet.Cells["d:d"] where cell.Value is double && (double)cell.Value >= 9990 && (double)cell.Value <= 10000 select cell);

            Console.WriteLine("Print all cells with value between 9990 and 10000 in column D ...");
            Console.WriteLine();

            int count = 0;
            foreach (var cell in query1)
            {
                Console.WriteLine("Cell {0} has value {1:N0}", cell.Address, cell.Value);
                count++;
            }

            Console.WriteLine("{0} cells found ...",count);
            Console.WriteLine();

            //Select all bold cells
            Console.WriteLine("Now get all bold cells from the entire sheet...");
            var query2 = (from cell in sheet.Cells[sheet.Dimension.Address] where cell.Style.Font.Bold select cell);
            //If you have a clue where the data is, specify a smaller range in the cells indexer to get better performance (for example "1:1,65536:65536" here)
            count = 0;
            foreach (var cell in query2)
            {
                if (!string.IsNullOrEmpty(cell.Formula))
                {
                    Console.WriteLine("Cell {0} is bold and has a formula of {1:N0}", cell.Address, cell.Formula);
                }
                else
                {
                    Console.WriteLine("Cell {0} is bold and has a value of {1:N0}", cell.Address, cell.Value);
                }
                count++;
            }

            //Here we use more than one column in the where clause. We start by searching column D, then use the Offset method to check the value of column C.
            var query3 = (from cell in sheet.Cells["d:d"]
                          where cell.Value is double && 
                                (double)cell.Value >= 9500 && (double)cell.Value <= 10000 && 
                                cell.Offset(0, -1).GetValue<DateTime>().Year == DateTime.Today.Year+1 
                          select cell);

            Console.WriteLine();
            Console.WriteLine("Print all cells with a value between 9500 and 10000 in column D and the year of Column C is {0} ...", DateTime.Today.Year + 1);
            Console.WriteLine();    

            count = 0;
            foreach (var cell in query3)    //The cells returned here will all be in column D, since that is the address in the indexer. Use the Offset method to print any other cells from the same row.
            {
                Console.WriteLine("Cell {0} has value {1:N0} Date is {2:d}", cell.Address, cell.Value, cell.Offset(0, -1).GetValue<DateTime>());
                count++;
            }
        }
    }
Agni
  • 428
  • 5
  • 15
  • 1
    While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. – greg-449 Jul 20 '15 at 09:45
  • How to use group by based on a specific column? – Cenk Mar 24 '23 at 07:44