from openpyxl import Workbook
import openpyxl
import os
# pip install openpyxl==2.6.4
# Copy range of cells as a nested list
# Takes: start cell, end cell, and sheet you want to copy from.
def copy_range(start_col, start_row, end_col, end_row, sheet):
range_selected = []
# Loops through selected Rows
for i in range(start_row, end_row + 1, 1):
# Appends the row to a RowSelected list
row_selected = []
for j in range(start_col, end_col + 1, 1):
row_selected.append(sheet.cell(row=i, column=j).value)
# Adds the RowSelected List and nests inside the rangeSelected
range_selected.append(row_selected)
return range_selected
# Paste range
# Paste data from copy_range into template sheet
def paste_range(start_col, start_row, end_col, end_row,
sheet_receiving, copied_data):
count_row = 0
for i in range(start_row, end_row + 1, 1):
count_col = 0
for j in range(start_col, end_col + 1, 1):
sheet_receiving.cell(row=i, column=j).value = \
copied_data[count_row][count_col]
count_col += 1
count_row += 1
def main():
# output sheet
output = Workbook()
output.save("result.xlsx")
output = openpyxl.load_workbook("result.xlsx") # Add file name
output_sheet = output.active
for i in range(2, 13):
input = openpyxl.load_workbook("{}.xlsx".format(str(i)),
data_only=True,
read_only=True)
sheets = input.sheetnames
sheet = input[sheets[1]] # select second sheet
# ==========================
# name
# ==========================
name_col_offset = 2
name_row_offset = 18
selected_range = copy_range(start_col=2,
start_row=3,
end_col=2 + name_col_offset,
end_row=3 + name_row_offset,
sheet=sheet)
paste_range(start_col=1,
start_row=-50 + 30 * i,
end_col=1 + name_col_offset,
end_row=-50 + 30 * i + name_row_offset,
sheet_receiving=output_sheet,
copied_data=selected_range)
# ==========================
# data
# ==========================
data_col_offset = 13
data_row_offset = 20
# handle month >=5 excel
if i >= 5:
start_col = 8
else:
start_col = 7
selected_range = copy_range(start_col=start_col,
start_row=3,
end_col=start_col + data_col_offset,
end_row=3 + data_row_offset,
sheet=sheet)
paste_range(start_col=4,
start_row=-50 + 30 * i,
end_col=4 + data_col_offset,
end_row=-50 + 30 * i + data_row_offset,
sheet_receiving=output_sheet,
copied_data=selected_range)
output.save("result.xlsx")
print str(i) + " is done"
if __name__ == '__main__':
myfile = "result.xlsx"
if os.path.isfile(myfile):
os.remove(myfile)
main()
批量提取excel固定行列到一個excel中去
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。