0
A
回答
3
如果你在Python 3.x的工作,你會發現很多使用xlrd
/xlwt
/xlutils
家庭的麻煩,因爲他們是模塊的Python 2.
你可能會考慮openpyxl用於在Excel 3中使用Excel 2007 .xlsx文件。
如果您只是需要將值更改(不考慮格式等),則可以使用這種方法。你可以建立在此:
from openpyxl import load_workbook
from openpyxl.cell import column_index_from_string as col_index
from openpyxl.cell import get_column_letter as col_letter
def del_col(s, col, cmax=None, rmax=None):
col_num = col_index(col) - 1
cols = s.columns
if isinstance(cmax, str):
cmax = col_index(cmax)
cmax = cmax or s.get_highest_column()
rmax = rmax or s.get_highest_row()
for c in range(col_num, cmax - 1):
# print("working on column %i" % c)
for r in range(0, rmax):
cols[c][r].value = cols[c+1][r].value
for r in range(0, rmax):
cols[c+1][r].value = ''
return s
if __name__ == '__main__':
wb = load_workbook('input_book.xlsx')
ws = wb.active
# or by name: ws = wb['SheetName']
col = 'D'
del_col(ws, col)
wb.save('output_book.xlsx')
0
此使用openpyxl 2.3.3的XLSX工作表中刪除列。您可以指定一列數字或字母:
import openpyxl.cell
def delete_column(ws, delete_column):
if isinstance(delete_column, str):
delete_column = openpyxl.cell.column_index_from_string(delete_column)
assert delete_column >= 1, "Column numbers must be 1 or greater"
for column in range(delete_column, ws.max_column + 1):
for row in range(1, ws.max_row + 1):
ws.cell(row=row, column=column).value = \
ws.cell(row=row, column=column+1).value
在其最後一次迭代這份來自ws.max_column+1
列None
值ws.max_column
柱,消滅曾經是那裏的值。雖然單元格中的值是正確的,但不幸的是ws.max_column
不會減少。
在其他答案有談話使用Worksheet.garbage_collect()
重置ws.max_column
,但我只能找到私有方法Worksheet._garbage_collect()
,所以我沒有使用它。
更新: 最後我發現刪除很多列效率不高。隱藏它們是一個優秀的解決方案。這保留了格式化,甚至更重要的是保持了引用隱藏單元的公式的完整性:
def hide_column(ws, column_id):
if isinstance(column_id, int):
assert column_id >= 1, "Column numbers must be 1 or greater"
column_id = openpyxl.cell.get_column_letter(column_id)
column_dimension = ws.column_dimensions[column_id]
column_dimension.hidden = True
+0
無法刪除多個文件 – MiNdFrEaK
相關問題
- 1. 刪除xls文件中的重複
- 2. 從文件第二列中刪除0.0
- 3. SWFUpload + jQuery.SWFUpload - 從隊列中刪除文件
- 4. Python-如何從文件中刪除列
- 5. 從列表中刪除文件名python
- 6. 從plupload隊列中刪除文件?
- 7. 從txt文件中刪除列
- 8. 自動從csv文件中刪除列
- 9. 從表中刪除,並刪除文件
- 10. 刪除文件並從列表中刪除它的名字
- 11. 從文件中刪除行
- 12. 從TortoiseHG中刪除文件
- 13. 從URL中刪除文件
- 14. 從Jlist中刪除文件
- 15. 從Request.Files中刪除文件
- 16. 從git中刪除文件
- 17. 從文件中刪除行
- 18. 從文件中刪除行
- 19. PHP從文件中刪除
- 20. 從文件中刪除
- 21. 從Bazaar中刪除文件
- 22. 從shell中刪除文件
- 23. 在Java中,從文件列表中刪除重複的文件
- 24. 從文件夾中刪除文件
- 25. Yii2從文件夾中刪除文件
- 26. 從文件中刪除文件版本
- 27. 從.app文件中刪除文件
- 28. 從bash文件中刪除文件名
- 29. 從文件夾中刪除文件[Windows]
- 30. 從Git歷史中刪除文件而不刪除文件
這對我沒有用;我得到錯誤:'UnboundLocalError:在賦值之前引用的局部變量'c'。 –
我得到了同樣的錯誤,對此有任何修復? – MiNdFrEaK
可能會晚到晚會,但是當col_num <= cmax - 1時可能會引發錯誤,因此循環的第一個循環永遠不會進入,並且c永遠不會獲得值。第二個for循環使用c,所以錯誤被拋出。我很確定第一個for循環應該有range(col_num,cmax + 1)。 –