xlwings: удалить столбец | строка из Excel

Как удалить строку в Excel?

wb = xw.Book('Shipment.xlsx')
wb.sheets['Page1_1'].range('1:1').clear()

.clear() удаляет содержимое. Я хочу удалить строку. Я удивлен, что функция .clear() работает, но не .delete()

Любой совет поможет! Спасибо


person NinjaWarrior    schedule 22.06.2017    source источник
comment
Возможный дубликат stackoverflow.com/a/35994514/7889129   -  person Maddy    schedule 22.06.2017
comment
Я пробовал следующее, и это не работает для меня. wb.sheets['Page1_1'].range('1:1').xl_range.Delete()   -  person NinjaWarrior    schedule 26.06.2017


Ответы (3)


Я использую xlwings 0.11.7 с Python 3.6.0 на моей Windows7. Я делаю это, и это может работать очень хорошо:

import xlwings as xw
from xlwings.constants import DeleteShiftDirection

app = xw.App()
wb = app.books.open('name.xlsx')
sht = wb.sheets['Sheet1']

# Delete row 2
sht.range('2:2').api.Delete(DeleteShiftDirection.xlShiftUp) 

# Delete row 2, 3 and 4 
sht.range('2:4').api.Delete(DeleteShiftDirection.xlShiftUp) 

# Delete Column A
sht.range('A:A').api.Delete(DeleteShiftDirection.xlShiftToLeft)

# Delete Column A, B and C
sht.range('A:C').api.Delete(DeleteShiftDirection.xlShiftToLeft)

wb.save()
app.kill()
person Jack Cao    schedule 01.03.2018
comment
Вы также можете сделать sht.range('A:A').api.Delete() (без аргументов для Delete()) - person pianoJames; 22.03.2019

Попробуйте использовать .Rows, например:

wb.sheets("Page1_1").Rows(1).Delete

Точно так же вы можете использовать .Columns для удаления столбцов:

wb.sheets("Page1_1").Columns(1).Delete
person Prebsus    schedule 22.06.2017
comment
Он показывает сообщение об ошибке: объект листа не имеет атрибута «Строки». - person NinjaWarrior; 25.06.2017
comment
Вы объявляете свою wb-переменную как WorkBook в начале вашего макроса/скрипта? Попробуйте Dim wb As Workbook в верхней части вашего скрипта. Тогда вместо вашего: wb = xw.Book('Shipment.xlsx') используйте Set wb = xw.Book('Shipment.xlsx) - person Prebsus; 26.06.2017
comment
Недопонимание? Похоже, что Prebsus использует VBA напрямую, а NinjaWarrior использует xlwings. - person rudolfbyker; 07.10.2020
comment
@rudolfbyker Действительно, я использую VBA напрямую. Поскольку я ответил более 3 лет назад, я, честно говоря, не могу вспомнить, были ли теги xlwings и python-3.x, когда я отвечал, или нет... - person Prebsus; 07.10.2020

for i in range(end+1, max_col):

        workbook.sheets[sheet_name].api.Columns(end+1).Delete()

Я сделал это, чтобы удалить определенный диапазон столбцов, он должен работать и со строками, вам просто нужно помнить, что столбцы/строки сдвигаются, поэтому я просто остаюсь в том же столбце.

person Jakob Mitterauer    schedule 06.08.2019