Найдите, сколько непустых строк на листе, используя VBA - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть простая книга с поддержкой макросов, и я ввел в нее следующие данные :

    A    B    C
1   A1   B1   C1
2   A2   B2   C2
3   A3   B3   C3

Я включил в свой Python библиотеку с именем win32com скрипт, который интерпретирует код VBA.Мой код :

import os
import win32com.client

xl = win32com.client.Dispatch('Excel.Application')
wb = xl.Workbooks.Open(os.path.abspath('spreadsheet.xlsm'). ReadOnly=1)
wb.Worksheets('Main').Activate()
numRows = wb.Worksheets('Main').Rows.Count
print(numRows)

Выход для этого:

1048576

желаемый результат :

3

Кто-нибудь знает правильный VBA, чтобы найти фактическое количество непустых ячеек в моей рабочей таблице?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы задаете пару разных вопросов в своем вопросе и названии.

Нижняя строка в столбце A:

numRow= wb.Worksheets(1).Cells(wb.Worksheets(1).Rows.Count,1).End(-4162).Row
print(numRow)

Начинается в самом низу столбца AПервый лист, затем использует End(xlUp), чтобы найти первую последнюю непустую запись.Проблемы: вернет 1, если КАЖДАЯ строка содержит данные, 65536 строк в файле .xls или 1048576 строк в файле .xlsx или .xlsm

Непустые ячейкив столбце A:

numRow = xl.WorksheetFunction.CountA(wb.Sheets(1).Columns(1))
print(numRow)

Использует функцию Excel COUNTA для подсчета непустых ячеек в первом столбце первого рабочего листа

Непустое Строка , независимо от того, какой столбец непустой:

numRow = 0
For RangeArea In Union(wb.Sheets(1).UsedRange.SpecialCells(xlCellTypeConstants, 23), wb.Sheets(1).UsedRange.SpecialCells(xlCellTypeFormulas, 23)).EntireRow.Areas:
    numRow = numRow + RangeArea.Rows.Count

print(numRow)

Сначала находит все ячейки со значениями и все ячейки с формулой, затем получаетстроки, в которых они находятся.
Если есть какие-либо пустые строки, то это создает диапазон нескольких областей, поэтому нам нужно сложить количество строк в каждой области, чтобы получить общее количество непустых строк вРабочий лист.

0 голосов
/ 06 декабря 2018
numrows=Sheets("Sheet1").Range("A1").End(xlDown).Row

Попробуйте приведенный выше код, если он работает для вас

...