Member 9662079 Ответов: 1

Обработка диапазонов excel getusedrangeofselectrange


Попробуйте проанализировать используемые диапазоны выбранных диапазонов.
Почему?
Usecase:
Пользователь не только выбирает диапазоны ячеек на листе xl, иногда он выбирает целую строку или, наконец, более одного столбца.
Один помеченный столбец наследует из-за Excel 2010 приблизительно 1.000.000 строк. Он оказывает влияние на время выполнения.
Как этого избежать?

Поэтому я думаю, что у меня есть две возможности.

1) считывать количество членов ячеек каждой области диапазона, чтобы огонь предупреждал пользователя о происходящем, потому что к большому количеству выбранных ячеек.

2) было бы неплохо иметь такой метод, как Range rngSelected.UsedRange() и не только, как уже существует для листа.
Моя обходная идея состояла в том, чтобы в первый раз оценить выбранные диапазоны пользователем и
второй шаг к диапазону используемых активов.
Но как я могу циклически сравнивать выбранный элемент диапазона с элементом используемого элемента диапазона?

Есть идеи?

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

private Excel.Range SelectedUsedRange()
      {


          string sSelect;
          string sUse;

          Excel.Range rngSelected = null;
          Excel.Range rngSelectedUsedRange = null;

          if (rngSelectedRange == null)
          {
              rngSelected = Globals.ThisAddIn.Application.Selection as Microsoft.Office.Interop.Excel.Range;
          }

          mySheet.Cells[1, 1].Select();
          Excel.Range rngUsed = mySheet.UsedRange;
          try
          {
              foreach (Excel.Range rngSelect in rngSelected)
              {
                  foreach (Excel.Range rngSelectCell in rngSelect.Cells)
                  {
                      foreach (Excel.Range rngUse in rngUsed)
                      {
                          sSelect = rngSelectCell.Address;
                          sUse = rngUse.Address;

                          if (sSelect == sUse)
                          {
                              if (rngSelectedUsedRange == null)
                              {
                                  rngSelectedUsedRange = rngSelectCell;
                              }
                              else
                              {
                                 rngSelectedUsedRange = myExcelApp.Union(rngSelectedUsedRange, rngSelectCell);
                              }
                              break;
                          }
                      }
                  }
              }
          }
          catch
          {
          }
          return rngSelectedUsedRange;
      }

  }

1 Ответов

Рейтинг:
2

Member 9662079

Привет,
это решаю я сам.
Метод приложения Excel называется "Intersect".
Возвращает объект Range, представляющий прямоугольное пересечение двух или более диапазонов.

В этом случае выбранные диапазоны и используемые диапазоны я получаю обратно пересечение.
Это именно то, что мне нужно.

Приложение.Intersect-Methode (Excel)[^]


#realJSOP

Если она решена, отметьте свое решение как ответ.