I am developing a dashboard in excel. And I am looking for calculating row count. (How many records are present) ..
Since there are some blank cells I thought to go from bottom to up. I use the following
Range("A1048576").Select
Selection.End(xlUp).Select
After this execution the active cell is at A113 which means the row count is 113.
My question is how to get this number 113 from the active cell?
asked Feb 4, 2014 at 13:37
You can use this:
Dim lastrow as Long
lastrow = Cells(Rows.Count,"A").End(xlUp).Row
lastrow will contain number of last empty row in column A, in your case 113
answered Feb 4, 2014 at 13:38
Dmitry PavlivDmitry Pavliv
35.2k13 gold badges79 silver badges80 bronze badges
1
Here is what I usually use for that:
lastrow = WorksheetFunction.CountA(Columns("A:A"))
This will return the number of non-empty cells in Column «A» which is what I think you’re after. Hope this helps.
answered Feb 4, 2014 at 13:49
Jim SimsonJim Simson
2,7663 gold badges21 silver badges30 bronze badges
2
The best way to get the count of rows/records (in most cases) is to use .UsedRange.Rows.Count. You can assign the return value to a variable like this:
lastRow = Sheets(1).UsedRange.Rows.Count
If you use a function that includes a column (such as column A) as shown in other examples, that will only get you the count of rows in that column, which may or may not be what you’re going for. One caveat: if you have formatted rows below your last row with a value then it will return that row number.
answered Mar 3, 2021 at 0:28
If there is a slight chance that the last row of the worksheet is not empty, you should add an IsEmpty() check to @simoco ‘s solution. Therefore; following is a function that returns the last used row and check if the last row of the worksheet is empty:
Function lastRow(WS As Worksheet, iColumn As String) As Long
If Not IsEmpty(WS.Range(iColumn & WS.Rows.Count)) Then
lastRow = WS.Rows.Count
Else
lastRow = WS.Range(iColumn & WS.Rows.Count).End(xlUp).Row
End If
End Function
answered Feb 4, 2014 at 14:22
simpLE MAnsimpLE MAn
1,56213 silver badges22 bronze badges
|
asesja Пользователь Сообщений: 320 |
Здравствуйте. Изменено: asesja — 21.10.2022 23:19:17 |
|
Пытливый Пользователь Сообщений: 4587 |
#2 21.10.2022 22:43:41 Здравствуйте.
Кому решение нужно — тот пример и рисует. |
||
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#3 21.10.2022 22:59:39
никак Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
|
asesja Пользователь Сообщений: 320 |
#4 21.10.2022 23:10:31
Поправил пример. Имеются пустые строки с переносами. |
||
|
БМВ Модератор Сообщений: 21380 Excel 2013, 2016 |
#5 21.10.2022 23:54:47 вставляем текст бокс, выбираем ширину нужную и авто размер, шрифт. вставляем текст.
естественно пустые переводы тоже считаются как строки. Прикрепленные файлы
Изменено: БМВ — 21.10.2022 23:57:28 По вопросам из тем форума, личку не читаю. |
||
|
asesja Пользователь Сообщений: 320 |
БМВ, спасибо. Завтра обязательно попробую. Должно получиться. Ключик уже где-то рядом)) |
|
asesja Пользователь Сообщений: 320 |
#7 22.10.2022 21:47:31 БМВ, проверил. Всё получилось как вы написали. Буду использовать код в своей программе для расчета высоты строчек объединенных ячеек с текстовыми данными. |
22.04.05 — 12:14
Попытка
Прайс = Новый ComОбъект(«Excel.Application»);
Исключение
Предупреждение(«Не удалось создать COM-объект Excel.Application!!!»);
Возврат;
КонецПопытки;
Попытка
Книга = Прайс.WorkBooks().Open(ИмяФайла);
Исключение
Предупреждение(«» + ОписаниеОшибки());
Возврат;
КонецПопытки;
ну че тутуа писать????
Книга.Close();
1 — 22.04.05 — 12:15
65k.
Или тебе только не пустые?
2 — 22.04.05 — 12:16
miki
ну чтобы точно понятно что дальше ничего нету
3 — 22.04.05 — 12:18
Проверяй значение ячейки на <пусто> или маркер какой-нить пиши в конец ХЛС.
4 — 22.04.05 — 12:18
miki (3)
нифина был другой способ
мне тута каньше ктото обьяснил но я забыл
а в архивах нету
5 — 22.04.05 — 12:21
ВходExcel = СоздатьОбъект(«Excel.Application»);
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
….
а далее все обходы по строкам и столбцам через циклы.
6 — 22.04.05 — 12:23
Ret(5)
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
вот ето место пожалуйста поподробнее.
как получить 1-й лист?
7 — 22.04.05 — 12:25
+5 Как пример
//*******************************************
//проверяет есть ли нужные сведения на листе
Функция ПроверкаПередзагрузкой(ВыбранныйЛист,НомерЛиста);
ЕстьНужныеСведения=0;
КонСтолб=ВыбранныйЛист.Cells(1,1).SpecialCells(11). Column;
Для i = НачСтр По КонСтр Цикл
Если ПустоеЗначение(ВыбранныйЛист.Cells(i,3).Text)=1 Тогда
Продолжить;
Иначе
Для к=1 по КонСтолб Цикл
//Проверим ячейки на всякую дрянь
Если ПроверкаБитыхСсылок(ВыбранныйЛист.Cells(i,к))=1 Тогда
ВнестиВКомментарийЗагрузки(«На выбранном вами листе №»+НомерЛиста+» имеются ошибки.Лист не будет загружен»);
Возврат ЕстьНужныеСведения;
КонецЕсли;
КонецЦикла;
Если //Возможно это индетификаторы колонок
(Число(ВыбранныйЛист.Cells(i,3).Value)=3)
и (Число(ВыбранныйЛист.Cells(i,1).Value)=1)
и (Число(ВыбранныйЛист.Cells(i,2).Value)=2)
и (Число(ВыбранныйЛист.Cells(i,4).Value)=4)
и (Число(ВыбранныйЛист.Cells(i,5).Value)=5)
и (Число(ВыбранныйЛист.Cells(i,6).Value)=6)
и (Число(ВыбранныйЛист.Cells(i,7).Value)=7)
и (Число(ВыбранныйЛист.Cells(i,8).Value)=8)
и (Число(ВыбранныйЛист.Cells(i,9).Value)=9)
и (Число(ВыбранныйЛист.Cells(i,10).Value)=10)
и (Число(ВыбранныйЛист.Cells(i,11).Value)=11)
и (Число(ВыбранныйЛист.Cells(i,12).Value)=12)
и (Число(ВыбранныйЛист.Cells(i,13).Value)=13)
и (Число(ВыбранныйЛист.Cells(i,14).Value)=14)
и (Число(ВыбранныйЛист.Cells(i,15).Value)=15)
и (Число(ВыбранныйЛист.Cells(i,16).Value)=16)
и (Число(ВыбранныйЛист.Cells(i,17).Value)=17)
Тогда //наверное то что нам нужно
ЕстьНужныеСведения=1;
Возврат ЕстьНужныеСведения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ЕстьНужныеСведения;
КонецФункции // ПроверкаПередзагрузкой
//Проверим, а есть ли нужные данные
Если ПроверкаПередзагрузкой(НужныйЛист,ЛистExcel)=0 Тогда
Предупреждение(«На выбранном вами листе нет нужных сведений»,5);
Возврат;
КонецЕсли;
МаксимумПустыхСтрок=25;//чтобы просмотреть все строки, но не зациклиться
СчетчикПустыхСтрок=0;//т.к. м.б. какие-либо строки оставлены пустыми для разделения и прочей красивости
НайденыйСтатус=»»;
Для index=НачСтр По КонСтр Цикл // обход по строкам
ЗначениеКолонки1 = НужныйЛист.Cells(index,1).Value;
Если ПустоеЗначение(ЗначениеКолонки1)=1 Тогда //чтобы побыстрее просмотреть
СчетчикПустыхСтрок=СчетчикПустыхСтрок+1;
Если СчетчикПустыхСтрок>МаксимумПустыхСтрок Тогда //хорош копать
СчетчикПустыхСтрок=0;
Прервать;
Иначе
Продолжить;
КонецЕсли;
Иначе //не пустое значение 1колонки
…………….
ну и т.д.
8 — 22.04.05 — 12:27
+5 и еще
//*******************************************
//проверяет нет ли всякой бяки на в ячейке
Функция ПроверкаБитыхСсылок(Ячейка)
БитаяСсылка=»»;
ТекстЯчейки=Ячейка.Text;
Если СписокОшибокЁкселя.НайтиЗначение(ТекстЯчейки)=0 Тогда
БитаяСсылка=0;
//Сообщить(Ячейка.Value);
Иначе
БитаяСсылка=1;
//Сообщить(ТекстЯчейки);
КонецЕсли;
Возврат БитаяСсылка;
КонецФункции // ПроверкаБитыхСсылок
———————————————
это основные операторы модуля
//Для исключения ошибок екселя
СписокОшибокЁкселя=СоздатьОбъект(«СписокЗначений»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ПУСТО!»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ДЕЛ/0!»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ЗНАЧ!»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ССЫЛКА!»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ИМЯ?»);
СписокОшибокЁкселя.ДобавитьЗначение(«#ЧИСЛО!»);
СписокОшибокЁкселя.ДобавитьЗначение(«#Н/Д»);
9 — 22.04.05 — 12:34
Ret(5)
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
вот ето место пожалуйста поподробнее.
как получить 1-й лист?
10 — 22.04.05 — 12:36
мне раньше показывали способ как
узнать количество непустых строк.
11 — 22.04.05 — 12:39
9 — Метод Sheets(НомерЛиста)
12 — 22.04.05 — 12:52
(9)
КоличествоЛистов=ВходExcel.Worksheets.Count;
Для i=1 По КоличествоЛистов Цикл
13 — 22.04.05 — 13:01
не сегодня чета нету умных…
14 — 22.04.05 — 13:02
(13)Предупреждение
15 — 22.04.05 — 13:05
Мля, итак уже все разжевал…
Ты чо?
КоличествоЛистов=ВходExcel.Worksheets.Count;
Для i=1 По КоличествоЛистов Цикл
НужныйЛист=ВходExcel.Worksheets.Item(i);
………и т.д.
16 — 22.04.05 — 13:07
Ret(15)
как узнать номер последней не пустой строки?
17 — 22.04.05 — 13:09
НужныйЛист=Книга.Sheets(1);
КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
Для поз=1 по КонСтрока Цикл
Строка=НужныйЛист.Cells(поз,1).Value;
Сообщить(«»+поз+»=»+Строка);
КонецЦикла;
=========================
нехочет работать
18 — 22.04.05 — 13:11
(13)
Я конечно привожу куски кода, который уже заточен под мои задачи, но из них вполне можно понять логику и использовать под себя.
Когда сам писал это, не мало пришлось покапаться в доках, а тебе выкладываешь на тарелочке, а ты разобраться не можешь.
За тебя-то никто не будет делать. Смотри, разбирайся и делай.
19 — 22.04.05 — 13:15
Может тебе надо:
РеальноЮзается=Лист.UsedRange;
КолонокРеальноЮзаемых=ИспользуемыйЛист.Columns.Count();
СтрокРеальноЮзаемых=ИспользуемыйЛист.Rows.Count();
20 — 22.04.05 — 13:15
Мля…. я тащусь….
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
КонСтр=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолб=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
Для index=НачСтр По КонСтр Цикл // обход по строкам
Для index2 = 1 По КонСтолб Цикл //обход по колонкам
Значение = НужныйЛист.Cells(index,index2).Value;
——далее работаешь со значением
———- и т.д. (шо тебе ящо конец цикла написать?)
21 — 22.04.05 — 13:16
короче ето делается так.
=====================
Процедура ЗагрузитьНажатие(Элемент)
Попытка
Прайс = Новый ComОбъект(«Excel.Application»);
Исключение
Предупреждение(«Не удалось создать COM-объект Excel.Application!!!»);
Возврат;
КонецПопытки;
Попытка
Книга = Прайс.WorkBooks().Open(ИмяФайла);
Исключение
Предупреждение(«» + ОписаниеОшибки());
Возврат;
КонецПопытки;
НужныйЛист=Книга.Sheets(1);
//НужныйЛист=Прайс.Worksheets.Item(1);
КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
Для поз=1 по КонСтрока Цикл
Строка=НужныйЛист.Cells(поз,1).Value;
Сообщить(«»+поз+»=»+Строка);
КонецЦикла;
Книга.Close();
КонецПроцедуры
============================
ето я чета туплю сегодня
спасибо за ответ Ret-у
Cells(1,1).SpecialCells(11).Row -последняя не пустая строка
Cells(1,1).SpecialCells(11).Column — последний не пустой столбец
и еще выше я привел процеДУРУ ПроверкаБитыхСсылок(Ячейка) привел.
Перед загрузкой если там ошибки, то на Значение = НужныйЛист.Cells(index,index2).Value 1С вылетает. Поэтому их надо обязательно отсечь!!!
Не помню где это описано, но это известная весчь.
| escritor |
|
||
|---|---|---|---|
|
|
Как при загрузке данных из Excel получить количество колонок и строк в файле? |
| Yandex |
|
||
|---|---|---|---|
|
|
| E_Migachev |
|
||
|---|---|---|---|
|
|
Например так:
Код 1C v 8.х
Посмотрите пример, в котором это используется |
| demiurg |
|
||
|---|---|---|---|
|
|
О, только вчера над этим же голову ломал, я получил так:
Код 1C v 8.х
|
| rasswet |
|
||
|---|---|---|---|
|
|
UsedRange -это заполненые? |
| demiurg |
|
||
|---|---|---|---|
|
|
UsedRange — это все ячейки содержащие значение на данный момент. |
| E_Migachev |
|
||
|---|---|---|---|
|
|
| Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или . |
Содержание
- Определение количества строк
- Способ 1: указатель в строке состояния
- Способ 2: использование функции
- Способ 3: применение фильтра и условного форматирования
- Вопросы и ответы
При работе в Excel иногда нужно подсчитать количество строк определенного диапазона. Сделать это можно несколькими способами. Разберем алгоритм выполнения этой процедуры, используя различные варианты.
Определение количества строк
Существует довольно большое количество способов определения количества строк. При их использовании применяются различные инструменты. Поэтому нужно смотреть конкретный случай, чтобы выбрать более подходящий вариант.
Способ 1: указатель в строке состояния
Самый простой способ решить поставленную задачу в выделенном диапазоне – это посмотреть количество в строке состояния. Для этого просто выделяем нужный диапазон. При этом важно учесть, что система считает каждую ячейку с данными за отдельную единицу. Поэтому, чтобы не произошло двойного подсчета, так как нам нужно узнать количество именно строк, выделяем только один столбец в исследуемой области. В строке состояния после слова «Количество» слева от кнопок переключения режимов отображения появится указание фактического количества заполненных элементов в выделенном диапазоне.
Правда, случается и такое, когда в таблице нет полностью заполненных столбцов, при этом в каждой строке имеются значения. В этом случае, если мы выделим только один столбец, то те элементы, у которых именно в той колонке нет значений, не попадут в расчет. Поэтому сразу выделяем полностью конкретный столбец, а затем, зажав кнопку Ctrl кликаем по заполненным ячейкам, в тех строчках, которые оказались пустыми в выделенной колонке. При этом выделяем не более одной ячейки на строку. Таким образом, в строке состояния будет отображено количество всех строчек в выделенном диапазоне, в которых хотя бы одна ячейка заполнена.
Но бывают и ситуации, когда вы выделяете заполненные ячейки в строках, а отображение количества на панели состояния так и не появляется. Это означает, что данная функция просто отключена. Для её включения кликаем правой кнопкой мыши по панели состояния и в появившемся меню устанавливаем галочку напротив значения «Количество». Теперь численность выделенных строк будет отображаться.
Способ 2: использование функции
Но, вышеуказанный способ не позволяет зафиксировать результаты подсчета в конкретной области на листе. К тому же, он предоставляет возможность посчитать только те строки, в которых присутствуют значения, а в некоторых случаях нужно произвести подсчет всех элементов в совокупности, включая и пустые. В этом случае на помощь придет функция ЧСТРОК. Её синтаксис выглядит следующим образом:
=ЧСТРОК(массив)
Её можно вбить в любую пустую ячейку на листе, а в качестве аргумента «Массив» подставить координаты диапазона, в котором нужно произвести подсчет.
Для вывода результата на экран достаточно будет нажать кнопку Enter.
Причем подсчитываться будут даже полностью пустые строки диапазона. Стоит заметить, что в отличие от предыдущего способа, если вы выделите область, включающую несколько столбцов, то оператор будет считать исключительно строчки.
Пользователям, у которых небольшой опыт работы с формулами в Экселе, проще работать с данным оператором через Мастер функций.
- Выделяем ячейку, в которую будет производиться вывод готового итога подсчета элементов. Жмем на кнопку «Вставить функцию». Она размещена сразу слева от строки формул.
- Запускается небольшое окно Мастера функций. В поле «Категории» устанавливаем позицию «Ссылки и массивы» или «Полный алфавитный перечень». Ищем значение «ЧСТРОК», выделяем его и жмем на кнопку «OK».
- Открывается окно аргументов функции. Ставим курсор в поле «Массив». Выделяем на листе тот диапазон, количество строк в котором нужно подсчитать. После того, как координаты этой области отобразились в поле окна аргументов, жмем на кнопку «OK».
- Программа обрабатывает данные и выводит результат подсчета строк в предварительно указанную ячейку. Теперь этот итог будет отображаться в данной области постоянно, если вы не решите удалить его вручную.
Урок: Мастер функций в Экселе
Способ 3: применение фильтра и условного форматирования
Но бывают случаи, когда нужно подсчитать не все строки диапазона, а только те, которые отвечают определенному заданному условию. В этом случае на помощь придет условное форматирование и последующая фильтрация
- Выделяем диапазон, по которому будет производиться проверка на выполнение условия.
- Переходим во вкладку «Главная». На ленте в блоке инструментов «Стили» жмем на кнопку «Условное форматирование». Выбираем пункт «Правила выделения ячеек». Далее открывается пункт различных правил. Для нашего примера мы выбираем пункт «Больше…», хотя для других случаев выбор может быть остановлен и на иной позиции.
- Открывается окно, в котором задается условие. В левом поле укажем число, ячейки, включающие в себя значение больше которого, окрасятся определенным цветом. В правом поле существует возможность этот цвет выбрать, но можно и оставить его по умолчанию. После того, как установка условия завершена, жмем на кнопку «OK».
- Как видим, после этих действий ячейки, удовлетворяющие условию, были залиты выбранным цветом. Выделяем весь диапазон значений. Находясь во все в той же вкладке «Главная», кликаем по кнопке «Сортировка и фильтр» в группе инструментов «Редактирование». В появившемся списке выбираем пункт «Фильтр».
- После этого в заглавиях столбцов появляется значок фильтра. Кликаем по нему в том столбце, где было проведено форматирование. В открывшемся меню выбираем пункт «Фильтр по цвету». Далее кликаем по тому цвету, которым залиты отформатированные ячейки, удовлетворяющие условию.
- Как видим, не отмеченные цветом ячейки после данных действий были спрятаны. Просто выделяем оставшийся диапазон ячеек и смотрим на показатель «Количество» в строке состояния, как и при решении проблемы первым способом. Именно это число и будет указывать на численность строк, которые удовлетворяют конкретному условию.
Урок: Условное форматирование в Эксель
Урок: Сортировка и фильтрация данных в Excel
Как видим, существует несколько способов узнать количество строчек в выделенном фрагменте. Каждый из этих способов уместно применять для определенных целей. Например, если нужно зафиксировать результат, то в этом случае подойдет вариант с функцией, а если задача стоит подсчитать строки, отвечающие определенному условию, то тут на помощь придет условное форматирование с последующей фильтрацией.
Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.
Размер ячейки
Размер ячейки по высоте и ширине определяется высотой строки и шириной столбца, на пересечении которых она находится. Если, в вашем случае, нежелательно изменять размеры всей строки или всего столбца, используйте объединенные ячейки нужной величины.
Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.
Высота строки и ширина столбца в Excel
Программно, без дополнительных макросов, можно изменять высоту строки только в пунктах, а ширину столбца только в символах.
На сайте поддержки офисных приложений Microsoft так написано об этих величинах:
- высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
- ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.
Смотрите, как сделать все ячейки рабочего листа квадратными.
Высота строки
Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.
Примеры изменения высоты строк:
Пример 1
Изменение высоты отдельной ячейки:
|
ActiveCell.RowHeight = 10 |
в результате, строка, в которой находится активная ячейка, приобретает высоту, равную 10 пунктам.
Пример 2
Изменение высоты строки:
в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.
Пример 3
Изменение высоты ячеек заданного диапазона:
|
Range(«A1:D6»).RowHeight = 20 |
в результате, каждой из первых шести строк рабочего листа будет задана высота, равная 20 пунктам.
Пример 4
Изменение высоты ячеек целого столбца:
|
Columns(5).RowHeight = 15 |
в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.
Ширина столбца
Для изменения ширины столбца используйте свойство ColumnWidth объекта Range. Как и в случае с высотой строки, не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — ширина всех столбцов, пересекающихся с объектом Range будет изменена после присвоения свойству ColumnWidth этого объекта нового значения.
Примеры изменения ширины столбцов:
Пример 1
Изменение ширины отдельной ячейки:
|
ActiveCell.ColumnWidth = 15 |
в результате, столбец, в котором находится активная ячейка, приобретает ширину, равную 15 символам.
Пример 2
Изменение ширины столбца:
|
Columns(3).ColumnWidth = 50 |
в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.
Пример 3
Изменение ширины ячеек заданного диапазона:
|
Range(«A1:D6»).ColumnWidth = 25 |
в результате, каждому из первых четырех столбцов рабочего листа будет задана ширина, равная 25 символам.
Пример 4
Изменение ширины ячеек целой строки:
в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.
Автоподбор ширины
Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:
|
‘запишем для примера в любую ячейку рабочего ‘листа какой-нибудь текст, например, такой: Cells(5, 5) = «Автоподбор ширины ячейки» ‘теперь подгоним ширину ячейки, а точнее ‘столбца, в котором эта ячейка находится: Cells(5, 5).EntireColumn.AutoFit |
Имейте в виду, что ширина столбца будет подогнана по расположенной в этом столбце ячейке с самым длинным содержимым. Например, если длина содержимого ячейки Cells(7, 5) будет превышать длину содержимого ячейки Cells(5, 5), то автоподбор ширины пятого столбца произойдет по содержимому ячейки Cells(7, 5), несмотря на то, что в строке кода указана другая ячейка.
Как осуществить автоподбор ширины объединенной ячейки, в которой метод AutoFit не работает, смотрите в следующей статье.
Решение, предложенное в этом ответе, устарело и может перестать работать.
Взглянув на исходный код OpenPyXL (IterableWorksheet) Я выяснил, как получить количество столбцов и строк из лист итератора:
wb = load_workbook(path, use_iterators=True)
sheet = wb.worksheets[0]
row_count = sheet.get_highest_row() - 1
column_count = letter_to_index(sheet.get_highest_column()) + 1
IterableWorksheet.get_highest_column возвращает строку с буквой столбца, которую вы можете видеть в Excel, например. «A», «B», «C» и т.д. Поэтому я также написал функцию для перевода буквы столбца к индексу на основе нуля:
def letter_to_index(letter):
"""Converts a column letter, e.g. "A", "B", "AA", "BC" etc. to a zero based
column index.
A becomes 0, B becomes 1, Z becomes 25, AA becomes 26 etc.
Args:
letter (str): The column index letter.
Returns:
The column index as an integer.
"""
letter = letter.upper()
result = 0
for index, char in enumerate(reversed(letter)):
# Get the ASCII number of the letter and subtract 64 so that A
# corresponds to 1.
num = ord(char) - 64
# Multiply the number with 26 to the power of `index` to get the correct
# value of the letter based on it index in the string.
final_num = (26 ** index) * num
result += final_num
# Subtract 1 from the result to make it zero-based before returning.
return result - 1
Я все еще не понял, как получить размеры столбцов, поэтому я решил использовать шрифт с фиксированной шириной и автоматически масштабированные столбцы в моем приложении.
Вопрос:
Я хочу программно извлекать данные из листа Excel и вставлять их в таблицу базы данных.
Как определить количество столбцов и строк на листе или иначе перебрать строки?
У меня
Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet;
Я пробовал worksheet.Range.Rows.Count
который выдает
Индексированное свойство “Microsoft.Office.Interop.Excel._Worksheet.Range” имеет необязательные аргументы, которые должны быть предоставлены
Что нужно сделать?
Лучший ответ:
Я предполагаю, что вы действительно ищете последнюю использованную строку. В этом случае вам нужно написать его следующим образом:
Range UsedRange = worksheet.UsedRange;
int lastUsedRow = UsedRange.Row + UsedRange.Rows.Count - 1;
Ответ №1
public void IterateRows(Excel.worksheet worksheet)
{
//Get the used Range
Excel.Range usedRange = worksheet.UsedRange;
//Iterate the rows in the used range
foreach(Excel.Range row in usedRange.Rows)
{
//Do something with the row.
//Ex. Iterate through the row data and put in a string array
String[] rowData = new String[row.Columns.Count];
for(int i = 0; i < row.Columns.Count; i++)
rowData[i] = row.Cells[1, i + 1].Value2.ToString();
}
}
Это компилируется и работает просто отлично для меня! Я использую его для извлечения строк с отсутствующими полями в журнал ошибок.
Ответ №2
Посмотрите на свойство UsedRange в Excel.



















