If you have a fixed worksheet template, the most simple way to achieve what you wanted would be to loop over the rows and retrieve the cell value at the specified index.
For example, based on OP's example:
var sheet = workbook.GetSheetAt(0); // assuming 0 is the worksheet index
for (var i = 0; i <= sheet.LastRowNum; i++)
{
var row = sheet.GetRow(i);
if (row == null) continue;
// do your work here
Console.Write("{0}\t", row.GetCell(4));
Console.Write("{0}\t", row.GetCell(6));
Console.Write("{0}\t", row.GetCell(7));
Console.WriteLine();
}
But if you insist on using range address, you could try using the CellRangeAddress
class like this:
var sheet = workbook.GetSheetAt(0);
var range = "E3:H8";
var cellRange = CellRangeAddress.ValueOf(range);
for (var i = cellRange.FirstRow; i <= cellRange.LastRow; i++)
{
var row = sheet.GetRow(i);
for (var j = cellRange.FirstColumn; j <= cellRange.LastColumn; j++)
{
// skip cell with column index 5 (column F)
if (j == 5) continue;
// do your work here
Console.Write("{0}\t", row.GetCell(j));
}
Console.WriteLine();
}