xlwings:从Excel中删除一列或一行

4

如何在Excel中删除一行?

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

.clear() 函数可以清除内容,但我想要删除这一行。我很惊讶 .clear() 可以使用,但是 .delete() 不能。

有什么建议吗?谢谢。


可能是 https://dev59.com/HZXfa4cB1Zd3GeqPZQ_k#35994514 的重复问题。 - Maddy
我尝试了以下代码,但它对我不起作用。 wb.sheets['Page1_1'].range('1:1').xl_range.Delete() - NinjaWarrior
4个回答

6

我在Windows7上使用Python 3.6.0和xlwings 0.11.7。我执行以下操作,它可以很好地工作:

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()

1
你也可以使用sht.range('A:A').api.Delete()(没有参数传递给Delete())来执行删除操作。 - pianoJames

5
现在可以直接删除内容,而不需要使用 api 属性:
wb.sheets['Page1_1'].range('1:1').delete()

2
尝试使用 .Rows,例如:
wb.sheets("Page1_1").Rows(1).Delete

同样地,你可以使用 .Columns 来删除列:

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

它显示错误消息:“Sheet”对象没有属性“Rows”。 - NinjaWarrior
你是否在宏/脚本的开头将"wb"变量声明为工作簿?请尝试在脚本顶部添加Dim wb As Workbook。然后,用Set wb = xw.Book('Shipment.xlsx')代替wb = xw.Book('Shipment.xlsx') - Prebsus
出现了沟通问题吗?听起来Prebsus正在直接使用VBA,而NinjaWarrior正在使用xlwings。 - rudolfbyker
@rudolfbyker,确实,我直接使用VBA。由于我在3年前回答这个问题,老实说我不记得当时是否有xlwingspython-3.x标签了... - Prebsus

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

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

我已经完成了删除一定范围的列的操作,同样适用于行,你只需要记住列/行会发生移动,所以我只需保持在相同的列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接