Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 34

Индекс находится вне границ массива

16.02.2023, 13:09. Показов 376. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Если вкратце то функция вызывает диалоговое окно, откуда берется путь к файлу excel, и из файла берется определенный столбец и записывается в массив. Проблема в последнем пункте, не записывается все таки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
private void OpenFile()
        {
            //Открытие файла и получение пути
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = false;
            ofd.DefaultExt = "*.xls;*.xlsx";
            ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*";
            ofd.Title = "Выберите документ Excel";
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Вы не выбрали файл для открытия", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string xlFileName = ofd.FileName; //имя нашего Excel файла
 
            //рабоата с Excel
            Excel.Workbook xlWB;
            Excel.Worksheet xlSht;
            int iLastRow, iLastCol;
 
            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel
            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл           
            xlSht = xlWB.ActiveSheet; //или так xlSht = xlWB.ActiveSheet //активный лист
 
            iLastRow = xlSht.Cells[xlSht.Rows.Count, "B"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А
            iLastCol = xlSht.Cells[3, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке
 
            Excel.Range r = xlSht.Range["B3", "B"+iLastCol];
 
            //Работа с массивом и добавление данных из ячеек
            string[] cattegory_array = new string [iLastCol-3];
 
            
            foreach (Range cell in r.Cells)
            {
 
                string value = Convert.ToChar( cell.Value2.ToString());
                cattegory_array[iLastCol - 3] = value;
 
                Console.WriteLine(value);
 
            }
            Console.WriteLine(cattegory_array[iLastCol - 3]);
            xlWB.Close();
 
        }
компилятор ругается на эту строчку
C#
1
cattegory_array[iLastCol - 3] = value;
Подозреваю, что я не правильно данные записываю, или же в типе данных проблема
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2023, 13:09
Ответы с готовыми решениями:

Индекс находится вне границ массива
Программа на вход должна получить 2 параметра: путь к файлу и число, которое нужно заменить на 0. Если ввести только путь - считываем...

Индекс находится вне границ массива
В чем ошибка? for (int c = 0; c < text.Length; c++) // до длинны текстового массива считаем ...

Индекс находится вне границ массива
Console.WriteLine("Введи те сколько?"); int i = Convert.ToInt32(Console.ReadLine()); int arr =...

4
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.02.2023, 14:08
flurps, во-первых, если Вы создаете массив cattegory_array, который должен заполняться, то для чего цикл происходит по ячейкам таблицы?
во-вторых, к чему тут вообще массив и цикл, если значение постоянно перезаписывается здесь?
C#
1
cattegory_array[iLastCol - 3] = value;
в-третьих, Вы создали массив длинной iLastCol-3, допустим, это = 3. и внутри цикла обращаетесь к элементу с индексом длинной iLastCol-3 = 3, которого попросту не существует, так как индексация массива начинается с 0.
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 34
16.02.2023, 14:35  [ТС]
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
то для чего цикл происходит по ячейкам таблицы?
цикл собирает данные из ячеек, и по задумке должен записывать их в массив
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
и внутри цикла обращаетесь к элементу с индексом длинной iLastCol-3 = 3, которого попросту не существует
отсчет ячеек начинается с 3 строчки, поэтому и стоит -3. Не исключаю, что я это не правильно сделал
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.02.2023, 14:45
Лучший ответ Сообщение было отмечено flurps как решение

Решение

flurps, зачем тут вообще массив, если не умеете с ним работать? используйте списки
C#
1
2
3
4
5
6
7
8
9
10
List<string> lData = new List<string>(); 
foreach(Range cell in r.Cells)
{ 
    lData.Add(cell.Value2.ToString());
}
xlWB.Close();
foreach(string rows in lData)
{
    Console.WrileLine(rows);
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
16.02.2023, 15:02
flurps, в 31 строке у вас есть iLastCol-3 элементов cattegory_array. Поэтому у вас только максимальный индекс должен iLastCol-4. И соответственно, в 38, 43 строках нужно:
C#
1
cattegory_array[iLastCol - 4] = value;
вместо
C#
1
cattegory_array[iLastCol - 3] = value;

(-4 а не -3)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2023, 15:02
Помогаю со студенческими работами здесь

Индекс находится вне границ массива
Здравствуйте. C# начал изучать недавно. Ошибка наверное банальна, но уже которое время пытаюсь понять какая. Желательно с объяснением....

Индекс находится вне границ массива. С#
Вот код C# int m, n, summachet = 0; Console.WriteLine(&quot;Введите количество строк&quot;); m =...

Индекс находится вне границ массива
Нужно организовать вывод текстового файла постранично( т.е. по 25 строчек на экран) по нажатию пробела. сейчас код исправен, но после...

Индекс находится вне границ массива
Я не могу понять в чём проблема.. Думал что с циклом, посмотрел на него, вроде всё нормально, потом подумал что с переменной array, тоже...

Индекс находится вне границ массива
using System.Text; namespace ConsoleApplication1 { class Program { static void Main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru