如何使用python pywin32删除excel中的行

时间:2017-08-09 01:10:29

标签: excel python-3.6 pywin32

亲爱的,全部。

如果单元格(i,5)没有值,我想在python 3.6中使用python pywin32删除excel中的行。

这是我的代码。

def qms(self):
    fname = QtWidgets.QFileDialog.getOpenFileName(self)

    if fname[0]:
        self.Filename.setText(fname[0])
        excel = win32com.client.Dispatch("Excel.Application")
        excel.Visible = True
        f = excel.Workbooks.Open(fname[0])
        fs = f.ActiveSheet
        lastrow = fs.UsedRange.Rows.Count

        for i in range(3, lastrow):
            if not fs.Cells(i,5).Value :
               fs.getCells().deleteRows(i-1,1,True)

        excel.Workbooks.save()
        excel.Quit()

我认为fs.getCells()中存在问题.deleteRow(i-1,1,True)。 我不明白。你能救我吗?

2 个答案:

答案 0 :(得分:1)

for i in range(lastrow, 2, -1):
    if fs.Cells(i,5).Value != ""
        fs.Rows(i).EntireRow.Delete()

或者您可以一次删除所有内容:

fs.UsedRange.Offset(2).Columns(5).SpecialCells(4).EntireRow.Delete()

https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-specialcells-method-excel

答案 1 :(得分:0)

def qms(self):
    fname = QtWidgets.QFileDialog.getOpenFileName(self)

    if fname[0]:
        self.Filename.setText(fname[0])
        excel = win32com.client.Dispatch("Excel.Application")
        excel.Visible = True
        f = excel.Workbooks.Open(fname[0])
        fs = f.ActiveSheet
        lastrow = fs.UsedRange.Rows.Count

        for i in range(lastrow, 2, -1):
            if fs.Cells(i,5).Value == None or fs.Cells(i,5).Value == "":
                fs.Rows(i).EntireRow.Delete()