public RespondentAnswerTable(IWorksheet worksheet, bool hasHeader) { int question_count = (hasHeader) ? (worksheet.ColumnCount() - 1) : 1; int first_row = (hasHeader) ? 1 : 0; questionLabels = (hasHeader) ? (worksheet.Header()) : (new string[0]); answers = new Dictionary<int, string>[question_count]; for (int i = 0; i < answers.Length; ++i) answers[i] = new Dictionary<int, string>(); //Конец инициализации и переход к копированию таблицы const int RespCol = 0; for (int row = first_row; worksheet[row, RespCol] != null; ++row) { try { int resp_id = int.Parse(worksheet[row, RespCol]); for (int question = 1; question <= question_count; ++question) { string resp_answer = worksheet[row, question]; if (!String.IsNullOrWhiteSpace(resp_answer)) answers[question - 1].Add(resp_id, resp_answer); // throws an exception when resp_id has duplicates } } catch (Exception e) { throw new Exception(string.Format("Error parsing row {0} . Probably wrong file format.\nException is {1}", row.ToString(), e.ToString())); } } }