Member 14120682 Ответов: 3

Указанный аргумент находился вне диапазона допустимых значений.


Workbook newBook = new Workbook();            
            Worksheet newSheet = newBook.Worksheets[0];            
            Workbook workbook = new Workbook();            
            workbook.LoadFromFile(filename);
            Worksheet sheet = workbook.Worksheets[0];

            foreach (CellRange range in sheet.Columns[0])
            {
                
                    CellRange sourceRange = sheet.Range[range.Row, 1, range.Row, columnCount];
                    CellRange destRange = newSheet.Range[i, 1, i, columnCount];
                    sheet.Copy(sourceRange, destRange, true);
                
            i++;
               
            }


Что я уже пробовал:

Workbook newBook = new Workbook();            
            Worksheet newSheet = newBook.Worksheets[0];            
            Workbook workbook = new Workbook();            
            workbook.LoadFromFile(filename);
            Worksheet sheet = workbook.Worksheets[0];

            foreach (CellRange range in sheet.Columns[0])
            {
                
                    CellRange sourceRange = sheet.Range[range.Row, 1, range.Row, columnCount];//error
                    CellRange destRange = newSheet.Range[i, 1, i, columnCount];
                    sheet.Copy(sourceRange, destRange, true);
                
            i++;
               
            }

3 Ответов

Рейтинг:
2

OriginalGriff

Мы не можем сказать - у нас нет доступа к вашему коду во время его выполнения или к вашим данным Excel, и вам нужно и то, и другое, чтобы выяснить, почему это происходит, а тем более исправить это.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

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

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

Patrice T

Цитата:
Указанный аргумент находился вне диапазона допустимых значений.

Сообщение об ошибке также сообщает вам положение ошибки, это хорошая идея, чтобы поделиться.
В принципе, ваш код имеет некоторые ожидания в отношении данных, которые эти данные не соответствуют.
Это невозможно сказать, не запустив свой код.
Единственный способ-это наблюдать за выполнением вашего кода с помощью отладчика.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка кода C# в Visual Studio - YouTube[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

Maciej Los

Согласно документации: Рабочий лист.Свойство Диапазона (Microsoft.Офис.Инструменты.Excel) | Microsoft Docs[^]

Цитата:
Свойство Range предназначено для использования со следующими параметрами.

Замечания






Параметр Описание
Cell1 Имя диапазона в нотации в стиле А1 на языке приложения. Он может включать в себя оператор диапазона (двоеточие), оператор пересечения (пробел) или оператор объединения (запятая). Он также может включать знаки доллара, но они игнорируются. Вы можете использовать локальное определенное имя в любой части диапазона. Если вы используете имя, предполагается, что оно написано на языке приложения. Этот параметр является обязательным.
Cell2 Ячейка в правом нижнем углу диапазона. Может быть, это Microsoft.Офис.Взаимодействие.Превосходить.Диапазон, содержащий одну ячейку, весь столбец, всю строку, или это может быть строка, которая называет одну ячейку на языке приложения. Этот параметр является необязательным.


Вывод: вы можете передать только два параметра вместо четырех!