Каков синтаксис в Python модуле Win32com.Client для Select-Case (Excel)? - PullRequest
0 голосов
/ 01 апреля 2019

Поэтому я пытаюсь эффективно удалять строки в таблицах Excel, которые соответствуют определенным критериям. Тем не менее, я думаю, что, возможно, было бы быстрее, если бы я мог использовать некоторые встроенные функции VBA, которые бы выбирали все строки, которые я хочу удалить, а затем удаляли бы их все сразу.

Следующая ссылка является эквивалентом VBA того, что я хотел бы сделать с помощью модуля python win32com.client: https://stackoverflow.com/a/31390697/9453718

В настоящее время я просто перебираю и удаляю строки, когда иду. Я просматриваю все строки в Excel, и если это соответствует некоторым критериям, я вызываю: Sheet.Rows (r) .EntireRow.Delete ()

Есть предложения?

Редактировать: вот пример того, что у меня сейчас есть, которое удаляет каждую строку одну за другой

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
book = excel.Workbooks.Open("ExcelWith200000Lines.xlsm")
sheet = book.Worksheets(0) #gets first sheet

nrows = sheet.UsedRange.Row + sheet.UsedRange.Rows.Count-1 # number of rows
ncols = sheet.UsedRange.Column + sheet.UsedRange.Columns.Count-1 # num of cols

data = sheet.Range('A1:'+NumToLetter(ncols) + str(nrows)).Value #loads all the data on the sheet into the python script

RELEVANT_COL_INDEX=0
for r in range(nrows-1, -1, -1): #starts at last row and goes to first row
    if data[r][RELEVANT_COL_INDEX] == "delete_me":
        sheet.Rows(r+1).EntireRow.Delete() #deletes the row here

book.SaveAs("myOutput.xlsm")

1 Ответ

0 голосов
/ 01 апреля 2019

Оператор SELECT CASE не является частью библиотеки объектов Excel, но является частью языка VBA.Когда вы подключаете Python как COM-интерфейс к Excel, используя win32com, вы подключаетесь только к Excel и его библиотеке объектов, включая ее объекты (рабочие книги, таблицы, диаграммы и т. Д.), Их свойства и методы.

InФактически, VBA делает именно то, что вы делаете в Python: интерфейс COM к библиотеке объектов Excel.См. Раздел «Инструменты \ Ссылки» и найдите, что VBA обычно является первой выбранной библиотекой, на которую ссылаются.Следовательно, это не часть Excel.Само Выбрать дело документов нигде не указывает, что является методом Excel.Таким образом, вы можете использовать SELECT CASE в MS Access VBA, Word VBA, Outlook VBA и т. Д.

Поэтому используйте аналогичную версию VBA SELECT CASE в Python, которая, вероятно, будет многострочной ifи elif заявления.В то время как другие языки, такие как Java, PHP и R, поддерживают метод switch, в Python его нет.См. Замены для оператора switch в Python .

Рассмотрите приведенный ниже пример, используя связанный вопрос Excel:

if not (xlwsh.Cells(i, 2) in [0.4, 0.045, 0.05, 0.056, 0.063, 0.071, 0.08, 0.09]
        or xlwsh.Cells(i, 2) < 0):

    xlwsh.Rows(i).EntireRow.Delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...