, 나는 엑셀 2007 통합 문서에 다음과 같은 작업을 수행 할 수 있어야 XLS 파일에서 열 삭제 :파이썬을 사용하여
1.delete의 colums
내가 xlrd로 찾고 있어요; 하나.
아무도 말해 줄 수 있습니까?
, 나는 엑셀 2007 통합 문서에 다음과 같은 작업을 수행 할 수 있어야 XLS 파일에서 열 삭제 :파이썬을 사용하여
1.delete의 colums
내가 xlrd로 찾고 있어요; 하나.
아무도 말해 줄 수 있습니까?
파이썬 3.x의에서 작업하는 경우가
이당신은 openpyxl을 고려해 볼 수 있습니다 파이썬 2에 대한 모듈을있는 한, 당신의 xlrd
/xlwt
/xlutils
제품군을 사용하여 문제를 많이 찾을 수 있습니다을 사용하여 Python 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')
이것은 openpyxl 2.3.3를 사용하여 XLSX 워크 시트에서 열을 삭제합니다. 거기에 사용되는 값을 닦아 열 ws.max_column
이 사본을 최종 반복에 열 ws.max_column+1
에서 None
값을
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
은 감소하지 않습니다.
다른 대답은 ws.max_column
을 재설정하기 위해 Worksheet.garbage_collect()
을 사용하는 이야기가 있지만 개인적인 방법 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
여러 파일을 삭제할 수 없습니다. – MiNdFrEaK
이것은 나를 위해 작동하지 않습니다. 'UnboundLocalError : 할당 전에 참조 된 로컬 변수 'c'오류가 발생했습니다. –
동일한 오류가 발생했습니다. 수정 사항이 있습니까? – MiNdFrEaK
파티에 늦을 지 모르지만 col_num <= cmax - 1 일 때 오류가 발생하기 때문에 첫 번째 for 루프는 입력되지 않고 c는 결코 값을 갖지 않습니다. 두 번째 for 루프는 c를 사용하므로 오류가 발생합니다. 나는 첫 번째 for 루프가 range (col_num, cmax + 1)를 가져야한다고 확신한다. –