2013-05-17 150 views
1

大家好,並且提前感謝您。在python中使用xlrd,xlwt和xlutils從excel文件中刪除行

我有一個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中刪除行?感謝大家!

回答

1

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) 

這樣可以讓您跳過一次打開兩個電子表格副本。

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) 
相關問題