Очистка ячеек в заданном диапазоне с помощью C#

  • Автор темы Автор темы noble
  • Дата начала Дата начала

noble

Пользователь
Регистрация
09.10.2014
Сообщения
183
Реакции
10
Баллы
18
70 xlsx таблиц в которых нужо постоянно очищать заднный диазон ячеек.
Примерно так:
var table = project.Tables["1"];
string startCellReference = "F7";
string endCellReference = "F406";
string startCellReference = "G7";
string endCellReference = "G406";
string startCellReference = "H7";
string endCellReference = "H406";

Я пробывал написать код но при запуске cкрипата вилазит ошибка
"Invalid token 'return' in class, struct, or interface member declaration"
Помогите плиз с кодом
 
Если не подходит tb.DeleteColumn(5); , который удаляет полностью столбец, то можно попробовать другой альтернативный вариант. На реальной таблице не проверял.
В общий код пихаем это:
C#:
Развернуть Свернуть Копировать
public class Ranges
{
    public string Collumn {get;set;} = string.Empty;
    public int StartRow {get;set;} = 0;
    public int EndRow {get;set;} = 0;
}

В то время, в кубике пишем это:
C#:
Развернуть Свернуть Копировать
var tb = project.Tables["tb"];

var ranges = new List<Ranges>()
{
    new Ranges{
        Collumn = "F",
        StartRow = 7,
        EndRow = 406
    },
    new Ranges{
        Collumn = "H",
        StartRow = 7,
        EndRow = 406
    },
    new Ranges{
        Collumn = "G",
        StartRow = 7,
        EndRow = 406
    }
};

foreach (var range in ranges)
{
    for (int i = range.StartRow; i <= range.EndRow; i++)
    {
        tb.SetCell(range.Collumn, i, "");
        //project.SendInfoToLog($"Clear {range.Collumn}{i}");
    }
}

Строку вывода в лог можно раскомментировать и посмотреть на то, какие ячейки обрабатываются.
Наверняка, есть болееизящный подход, который обработал бы на входе строку "F7:G406", но, честно сказать, выдумывать его не сильно хочется. Надеюсь, вам поможет!
 
  • Оценить
Реакции: noble
Если не подходит tb.DeleteColumn(5); , который удаляет полностью столбец, то можно попробовать другой альтернативный вариант. На реальной таблице не проверял.
В общий код пихаем это:
C#:
Развернуть Свернуть Копировать
public class Ranges
{
    public string Collumn {get;set;} = string.Empty;
    public int StartRow {get;set;} = 0;
    public int EndRow {get;set;} = 0;
}

В то время, в кубике пишем это:
C#:
Развернуть Свернуть Копировать
var tb = project.Tables["tb"];

var ranges = new List<Ranges>()
{
    new Ranges{
        Collumn = "F",
        StartRow = 7,
        EndRow = 406
    },
    new Ranges{
        Collumn = "H",
        StartRow = 7,
        EndRow = 406
    },
    new Ranges{
        Collumn = "G",
        StartRow = 7,
        EndRow = 406
    }
};

foreach (var range in ranges)
{
    for (int i = range.StartRow; i <= range.EndRow; i++)
    {
        tb.SetCell(range.Collumn, i, "");
        //project.SendInfoToLog($"Clear {range.Collumn}{i}");
    }
}

Строку вывода в лог можно раскомментировать и посмотреть на то, какие ячейки обрабатываются.
Наверняка, есть болееизящный подход, который обработал бы на входе строку "F7:G406", но, честно сказать, выдумывать его не сильно хочется. Надеюсь, вам поможет!
Ошибка - CS1022 но по скробкам вроде все ок
 
Скриншот отправьте ошибки и покажите свой код. Код не скриншотом, а текстом.
Компиляция кода Ошибка в действии "CS1022" "Type or namespace definition, or end-of-file expected". [Строка: 34; Cтолбец: 1]
 
Компиляция кода Ошибка в действии "CS1022" "Type or namespace definition, or end-of-file expected". [Строка: 34; Cтолбец: 1]
Код, который я отправил выше, точно работает. Либо, пожалуйста, отправьте все, о чем я вас попросил (+ к тому, что просил выше, скриншот или текст из общего кода), либо разбирайтесь сами.
 
  • Оценить
Реакции: noble
Код, который я отправил выше, точно работает. Либо, пожалуйста, отправьте все, о чем я вас попросил (+ к тому, что просил выше, скриншот или текст из общего кода), либо разбирайтесь сами.


116530

116527



var tb = project.Tables["tb"];

var ranges = new List<Ranges>()
{
new Ranges{
Collumn = "F",
StartRow = 7,
EndRow = 406
},
new Ranges{
Collumn = "H",
StartRow = 7,
EndRow = 406
},
new Ranges{
Collumn = "G",
StartRow = 7,
EndRow = 406
}
};

foreach (var range in ranges)
{
for (int i = range.StartRow; i <= range.EndRow; i++)
{
tb.SetCell(range.Collumn, i, "");
//project.SendInfoToLog($"Clear {range.Collumn}{i}");
}
}
 
Посмотреть вложение 116530
Посмотреть вложение 116527


var tb = project.Tables["tb"];

var ranges = new List<Ranges>()
{
new Ranges{
Collumn = "F",
StartRow = 7,
EndRow = 406
},
new Ranges{
Collumn = "H",
StartRow = 7,
EndRow = 406
},
new Ranges{
Collumn = "G",
StartRow = 7,
EndRow = 406
}
};

foreach (var range in ranges)
{
for (int i = range.StartRow; i <= range.EndRow; i++)
{
tb.SetCell(range.Collumn, i, "");
//project.SendInfoToLog($"Clear {range.Collumn}{i}");
}
}
В общем коде нет определения класса Ranges.
116553
 
То есть, не получится очистить содержимое ячеек с помощью C#?
Если Вы планируете пользоваться C# кодом, то стоит понять хотя бы небольшие основы. Чтобы ваш код заработал, вам надо:
1. Добавить использование using и общего кода:
116569


2. Вставить в него код класса, который мы используем в коде:
116570


Сам код для общего кода:
Развернуть Свернуть Копировать
    public class Ranges
    {
        public string Collumn {get;set;} = string.Empty;
        public int StartRow {get;set;} = 0;
        public int EndRow {get;set;} = 0;
    }

3. Попробовать запустить. Должно заработать.
 
  • Оценить
Реакции: noble
Спс, я не знал про общий код...., буду разбираться
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)