在Python从一个excel文件删除行使用xlrd,xlwt和xlutils(In python

2019-09-04 03:31发布

大家好,感谢您提前。

我有一个python脚本在那里我打开模板excel文件,添加数据(同时保留风格),并重新保存。 我希望能够删除,我没有拯救出来的新的XLS文件之前编辑的行。 我的模板XLS文件有一个页脚,所以我想在页脚之前删除多余的行。

这里是我正在加载XLS模板:

self.inBook = xlrd.open_workbook(file_path, formatting_info=True)
self.outBook = xlutils.copy.copy(self.inBook)
self.outBookCopy = xlutils.copy.copy(self.inBook)

然后我写的信息,以outBook同时抓住从outBookCopy风格并将其应用到我在outbook修改的每一行。

让我怎么写之前删除outBook行? 感谢大家!

Answer 1:

我实现用熊猫包....

import pandas as pd

#Read from Excel
xl= pd.ExcelFile("test.xls")

#Parsing Excel Sheet to DataFrame
dfs = xl.parse(xl.sheet_names[0])

#Update DataFrame as per requirement
#(Here Removing the row from DataFrame having blank value in "Name" column)

dfs = dfs[dfs['Name'] != '']

#Updating the excel sheet with the updated DataFrame

dfs.to_excel("test.xls",sheet_name='Sheet1',index=False)


Answer 2:

xlwt不这样做提供了一个简单的界面,但我已经成功了有点类似问题,通过直接改变工作表的列属性和行号的行和单元格(插入的行的多个拷贝到复制的工作簿)对象。

由于要删除的行数,你想保持第一行的起始号,这样的事情可能工作:

rows_to_move = worksheet.rows[first_kept_row:]
for row in rows_to_move:
    new_row_number = row._Row__idx - number_to_delete
    row._Row__idx = new_row_number
    for cell in row._Row__cells.values():
        if cell:
            cell.rowx = new_row_number
    worksheet.rows[new_row_number] = row
# now delete any remaining rows
del worksheet.rows[new_row_number + 1:]

你有没有在您要删除,或它们下面的行合并范围? 如果是的话,你还需要为他们贯穿在工作表的属性merged_ranges和更新的行。 另外,如果您有更多的行删除比你的尾行,你需要

作为一个方面说明 - 我能这样写文本到我的工作表,并保留预定义的样式:

def write_with_style(ws, row, col, value):
    if ws.rows[row]._Row__cells[col]:
        old_xf_idx = ws.rows[row]._Row__cells[col].xf_idx
        ws.write(row, col, value)
        ws.rows[row]._Row__cells[col].xf_idx = old_xf_idx
    else:
        ws.write(row, col, value)

这可能让你跳过对电子表格的两个副本同时打开。



文章来源: In python removing rows from a excel file using xlrd, xlwt, and xlutils