Наиболее вероятным кандидатом на исключение является ваш звонок в First.Он не находит элементы, которые соответствуют Value == columnName, и выдает исключение.Я бы предложил разбить ваше заявление if, чтобы вы могли разобраться с этим делом.Я бы также предложил использовать FirstOrDefault, поскольку он просто возвращает ноль, а не вызывает исключение.
var myCell = ws.Cells["1:1"].FirstOrDefault(c => c.Value.ToString() == columnName );
if (myCell != null && myCell.Start.Column != Undefined)
{
ColumnNumber = myCell.Start.Column;
}