Вы делаете следующее
dt.RemoveAt(0);
dt.RemoveAt(1);
dt.RemoveAt(2);
Когда выполняется первая строка, строки переиндексируются с 1 становится 0, 2 становится 1 и т. Д.
Когда вторая строка выполняет, теперь вы удалили строку, которая изначально была позицией 2. Строки снова переиндексируются.
Когда третья строка выполняется, вы снова удаляете неправильную строку.
В результате, когда этот процесс завершится, он удалит строки, которые были первоначально расположены в 0, 2 и 4.
Измените код, чтобы удалить правильные строки, или пропустите три строки с помощью linq или a для l oop.
Пример использования для l oop (не проверено).
//create the reader
var reader = ExcelReaderFactory.CreateReader(stream);
var result = reader.AsDataSet();
DataRowCollection dt = result.Tables[0].Rows;
//ignore the first 3 rows
for(int dataRowCount = 3; dataRowCount < dt.Count; dataRowCount++)
{
//exclude the column 1 and 2 and any columns after 9
for (int columnNumber = 2; columnNumber < 8; columnNumber++)
{
Debug.Log(dr[dataRowCount][columnNumber].ToString());
msg += dr[dataRowCount][columnNumber].ToString();
}
}