Я использовал свойство UsedRange
объекта Excel.Worksheet
, чтобы получить количество строк и столбцов. Если я попытаюсь удалить столбец или строку, количество UsedRange
должно уменьшиться соответственно. Однако после долгих отладок в определенном порядке изменилось свойство Hidden
и ширина столбца столбца. Счетчик не изменится соответственно, что должно означать, что для ячейки установлен якорь. Пожалуйста, помогите объяснить (поскольку это сильно влияет на мои коды).
Тестовые коды:
Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;
Debug.WriteLine("Used Range Column Count 1: " + worksheet.UsedRange.Columns.Count);
worksheet.Range["A1"].Formula = "1";
worksheet.Range["B1"].Formula = "1";
worksheet.Range["C1"].Formula = "1";
worksheet.Range["D1"].Formula = "1";
Debug.WriteLine("Used Range Column Count 2: " + worksheet.UsedRange.Columns.Count);
Range column = worksheet.Columns[4];
column.Delete();
Debug.WriteLine("Used Range Column Count 3: " + worksheet.UsedRange.Columns.Count);
worksheet.Range["D1"].Formula = "1";
column = worksheet.Columns[4];
column.ColumnWidth = 20.0;
column.Hidden = true;
column.Hidden = false;
column.Delete();
Debug.WriteLine("Used Range Column Count 4: " + worksheet.UsedRange.Columns.Count);
worksheet.Range["D1"].Formula = "1";
column = worksheet.Columns[4];
column.Hidden = true;
column.Hidden = false;
column.ColumnWidth = 20.0;
column.Delete();
Debug.WriteLine("Used Range Column Count 5: " + worksheet.UsedRange.Columns.Count);
Результаты:
Количество используемых столбцов диапазона 1: 1 (ожидается)
Количество используемых столбцов диапазона 2: 4 (ожидается)
Количество используемых столбцов диапазона 3: 3 (ожидается)
Количество используемых столбцов диапазона 4: 4 (не ожидается)
Число используемых столбцов диапазона 5: 3 (ожидается)
Дальнейшие описания необходимости правильного подсчета используемых диапазонов:
Я работаю над приложением, которое может улучшить интерфейс Excel. Например, у пользователя есть список запасов и стоимость покупки с промежуточной суммой или строкой средней цены в конце. (фактическая строка промежуточного итога будет намного сложнее, чем сумма и среднее значение). Поэтому список должен быть расширяемым, а строка промежуточного итога — нет. В результате мне нужно отслеживать, добавляется или удаляется новая строка или новый столбец, поэтому мне нужно перепроверить количество на листе Excel с историческим (кешированным) количеством. Поскольку новая строка или столбец могут не содержать фактических данных, я использовал свойство UsedRange, чтобы определить отображаемое текущее количество строк/столбцов. Следовательно, тот факт, что UsedRange включает удаленные строки/столбцы, делает мой расчет невозможным.
Хотя я не могу найти способ снять эффект якоря, я, наконец, нашел способ сделать эту работу:
Использование диапазона имен одной ячейки для обозначения последней ячейки рабочего листа со свойством UsedRange для инициализации диапазона.
Если вам нужно не показывать пользователям диапазон, вы можете попробовать сохранить данные в настраиваемых свойствах на листе. Однако этот подход потребует гораздо большего внимания к отслеживанию действий пользователя (ссылка на именованный диапазон автоматически изменится, если вы добавите строку/столбец).
UsedRange
. За последние несколько дней я прочитал несколько сообщений и все еще пытаюсь понять, как это работает. - person vknowles   schedule 14.01.2017