Удалить несколько столбцов из Excel с Epplus? - PullRequest
0 голосов
/ 02 октября 2019

Существует ли простой способ удаления нескольких столбцов Excel в одной строке из кода (C #) с помощью Epplus? У меня есть такой переключатель:

switch (packageId)
            {
                case 15:
                case 16: wsSheet.DeleteColumn(16);
                         wsSheet.DeleteColumn(17);
                         wsSheet.DeleteColumn(18);
                         wsSheet.DeleteColumn(19);
                         wsSheet.DeleteColumn(20);
                    break;
                case 17: delete multiple columns again..
                    break;
                ...and so on.....
                default:
                    break;
            }

... и так как у меня есть 15-20 дел для удаления нескольких (разных) строк для каждого случая, мне бы очень хотелось сократить код и время, затрачиваемое наэтот метод ..

Для ясности, идентификатор пакета не имеет никаких связей с идентификатором столбца. В реальной ситуации один идентификатор пакета - 358, следующий - 469 и т. Д. Если я не найду более плавного пути, я буду использовать циклы с индексами столбцов (чего я бы хотел избежать, потому что в одном случае я мог быв конечном итоге 5-6 циклов, например, показать первые 15 столбцов, затем удалить следующие 4, затем показать следующие 5, затем удалить следующие 3, .. и так до последнего столбца с индексом 67)

РЕДАКТИРОВАТЬ (мое решение для других, которые приходят к этому вопросу): есть перегрузка метода DeleteColumn (fromCol, noOfCols), который удаляет фиксированное количество столбцов, которое передается во втором параметре, но я хотел иметь что-то вроде«удалить все столбцы из индекса столбца в индекс столбца», поэтому я написал простой маленький метод, который делает это.

private void DeleteColumns(ExcelWorksheet wsSheet, int fromColumn, int toColumn)
        {
            for (int i = toColumn; i >= fromColumn; i--)
            {
                wsSheet.DeleteColumn(fromColumn);
            }
        }

Это делает работу для меня в этом случае ..

1 Ответ

0 голосов
/ 02 октября 2019

Ради чистого кода вы можете сделать что-то вроде этого (комментарии в коде):

//create dictionaty where id is packageId, and columns that should be deleted for that packageId
Dictionary<int, int[]> columnsDictionary = new Dictionary<int, int[]>();
//add values for each key
columnsDictionary.Add(358, new int[] { 15, 16, 17, 18, 19, 20 });
columnsDictionary.Add(469, new int[] { 16, 17, 18, 19, 20 });
//etc...

//check if this packageId is in present as key in dictionary
if (!columnsDictionary.ContainsKey(packageId))
    return; //if not, exit or show some error...

//delete corresponding columns in one loop
foreach (int i in columnsDictionary[packageId])
{
    wsSheet.DeleteColumn(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...