EPPlus — InsertRow: строка не может быть меньше 1. Имя параметра: значение

У меня есть шаблон Excel с таблицей (диапазон: A4:AM5), которую мне нужно расширить, вставив строки через EPPlus. Мой код без проблем вставляет значения ячеек в файл, но мне нужно расширить строки таблицы в соответствии с каждым новым значением, вставленным в первый столбец.

Я пытался использовать метод InsertRow(5,1), но он показывает исключение

"System.ArgumentOutOfRangeException: 'Row cannot be less than 1. Parameter name: value'"

И значение представляет:

{System.ArgumentOutOfRangeException: Row cannot be less than 1. Parameter name: value > at OfficeOpenXml.ExcelCellAddress.set_Row(Int32 value) > at OfficeOpenXml.ExcelNamedRangeCollection.InsertRows(Int32 rowFrom, Int32 rows, ExcelNamedRange namedRange) > at OfficeOpenXml.ExcelNamedRangeCollection.Insert(Int32 rowFrom, Int32 colFrom, Int32 rows, Int32 cols, Func`2 filter) > at OfficeOpenXml.ExcelWorksheet.InsertRow(Int32 rowFrom, Int32 rows, Int32 copyStylesFromRow) > at TestInsertRow.Program.Main(String[] args)}

Я минимизировал функции кода в этот, который также показывает то же исключение:

    class Dnp3
{
    private static ExcelPackage _dnp3Package;
    private static ExcelWorksheet _worksheet1;
    private static FileInfo _templateInfo;
    private static FileInfo _newDnp3FileInfo;

    public static bool TempFile
    {
        get
        {
            if (_templateInfo != null) return true;
            return false;
        }

        set
        {
            if (value == true)
            {
                _templateInfo = new FileInfo(@" Existing template path ");
            }
        }
    }

    public static bool NewFile
    {
        get
        {
            if (_newDnp3FileInfo != null) return true;
            return false;
        }

        set
        {
            if (value == true)
            {
                _newDnp3FileInfo = new FileInfo(@" Existing new file path ");

                _dnp3Package = new ExcelPackage(_newDnp3FileInfo, _templateInfo);
                {
                    _worksheet1 = Dnp3._dnp3Package.Workbook.Worksheets["DNP3_RTUs"];
                    {
                        _worksheet1.DataValidations.Clear();
                    }
                }
            }
        }
    }

    public static bool Save
    {
        set
        {
            if (value == true)
            {
                Dnp3._dnp3Package.Save();
            }
        }
    }

    public class DNP3_RTUs : Dnp3
    {
        private int _idobj_nameCol;//IDOBJ_NAME
        private int _idobj_aliasCol;//IDOBJ_ALIAS
        private int _idobj_customidCol;//IDOBJ_CUSTOMID
        private int _idobj_aorgroupCol;//IDOBJ_AORGROUP

        public bool Header
        {
            set
            {
                int _column = 1;
                _idobj_nameCol = 1;
                _idobj_aliasCol = 1;
                _idobj_customidCol = 1;
                _idobj_aorgroupCol = 1;

                if (value == true)
                {

                    while (_worksheet1.Cells[Row: 3, Col: _column].Value != null)
                    {
                        switch (_worksheet1.Cells[Row: 3, Col: _column].Value)
                        {
                            case "IDOBJ_NAME":
                                _idobj_nameCol = _column;
                                break;
                            case "IDOBJ_ALIAS":
                                _idobj_aliasCol = _column;
                                break;
                            case "IDOBJ_CUSTOMID":
                                _idobj_customidCol = _column;
                                break;
                            case "IDOBJ_AORGROUP":
                                _idobj_aorgroupCol = _column;
                                break;
                        }
                        _column++;
                    }

                }
            }
        }

        public bool AddRow(int _line)
        {
            _line = _line + 5;
            _worksheet1.InsertRow(_line, 2);
            return false;
        }

        public string IDOBJ_NAME(int _line, string _data)
        {
            _line = _line + 5;//Pq a entrada de dados começa na linha
            _worksheet1.Cells[_line, _idobj_nameCol].Value = _data;
            _worksheet1.Cells[_line, _idobj_nameCol].Style.Font.Size = 11;
            _worksheet1.Cells[_line, _idobj_nameCol].Style.Font.Name = "Calibri";
            return "";
        }

        public string IDOBJ_ALIAS(int _line, string _data)
        {
            _line = _line + 5;//Pq a entrada de dados começa na linha 5
            _worksheet1.Cells[_line, _idobj_aliasCol].Value = _data;
            _worksheet1.Cells[_line, _idobj_aliasCol].Style.Font.Size = 11;
            _worksheet1.Cells[_line, _idobj_aliasCol].Style.Font.Name = "Calibri";
            return "";
        }

        public string IDOBJ_CUSTOMID(int _line, string _data)
        {
            _line = _line + 5;//Pq a entrada de dados começa na linha 5
            _worksheet1.Cells[_line, _idobj_customidCol].Value = _data;
            _worksheet1.Cells[_line, _idobj_customidCol].Style.Font.Size = 11;
            _worksheet1.Cells[_line, _idobj_customidCol].Style.Font.Name = "Calibri";
            return "";
        }

        public string IDOBJ_AORGROUP(int _line, string _data)
        {
            _line = _line + 5;//Pq a entrada de dados começa na linha 5
            _worksheet1.Cells[_line, _idobj_aorgroupCol].Value = _data;
            _worksheet1.Cells[_line, _idobj_aorgroupCol].Style.Font.Size = 11;
            _worksheet1.Cells[_line, _idobj_aorgroupCol].Style.Font.Name = "Calibri";
            return "";
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dnp3.TempFile = true;
        Dnp3.NewFile = true;

        Dnp3.DNP3_RTUs dNP3_RTUs = new Dnp3.DNP3_RTUs() { Header = true };
        int _mappingCount = 1;

            dNP3_RTUs.IDOBJ_NAME(_mappingCount, "BOQ_1");

            dNP3_RTUs.IDOBJ_ALIAS(_mappingCount,"nome_se_ordem");

            dNP3_RTUs.IDOBJ_AORGROUP(_mappingCount, "mnem_se");

        dNP3_RTUs.AddRow(_mappingCount);

        Dnp3.Save = true;
    }
}

Ваш код не компилируется, поэтому вы скопировали-вставили или переписали код? Вам нужно будет предоставить минимальный воспроизводимый пример

Camilo Terevinto 10.04.2019 15:03

@CamiloTerevinto Я сделал минимизированную версию кода, которая все еще имеет то же исключение, и отредактировал вопрос.

Lucas Apolinário 10.04.2019 16:12

Извините @VDWWD, но я все еще не понимаю, как это исправить.

Lucas Apolinário 11.04.2019 17:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
4
2 784
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я столкнулся с тем же исключением и смог решить его, исправив коллекцию имен шаблонов excel.

Нажмите Ctrl+F3 (Диспетчер имен) и найдите имена, содержащие любой #REF! значения и рефереры и удалить их из шаблона.

большое спасибо! Я начал терять свое психическое здоровье с этой проблемой %)

IvanSorokin 30.11.2021 18:44

Если Ctrl + F3 не работает для поиска диспетчера имен

Наведите курсор на «sheet.Names», вы найдете все менеджеры имен и
вы можете удалить их код броска

var refName = sheet.Names.FirstOrDefault(x => x.Name == "nameOfNameManager");
if (refName != null)
{
    sheet.Names.Remove("nameOfNameManager");
}

Другие вопросы по теме