pandas 在转换为Dataframe之前,使用openpyxl在Python中格式化和操作多个Excel工作表中的数据

o8x7eapl  于 2022-12-09  发布在  Python
关注(0)|答案(1)|浏览(227)

在使用pd.concat()堆叠数据之前,我需要一些帮助来编辑我的Excel工作簿中的工作表。我的Excel工作簿中的每个工作表(~100)的结构都是相同的,每个工作表的唯一标识符是一个6位数的代码,位于工作表的第一行。x1c 0d1x
我已经完成了以下步骤来导入文件,取消合并行1-4,并插入一个新列“C”:

import openpyxl
import pandas as pd

wb = openpyxl.load_workbook('data_sheets.xlsx')

for sheet in wb.worksheets:
    sheet.merged_cells
    for merge in list(sheet.merged_cells):
        sheet.unmerge_cells(range_string=str(merge))
    sheet.insert_cols(3, 1)
    print(sheet)

wb.save('workbook_test.xlsx')

#concat once worksheets have been edited
df= pd.concat(pd.read_excel('workbook_test.xlsx, sheet_name= None), ignore_index= True)

然而,在堆叠数据之前,我想对每张图纸进行以下附加(顺序)更改:
1.从第1行中提取右侧的8个字符(在excel中,相当于=RIGHT(A1,8)-这是为了从每张工作表中提取唯一的代码,看起来像“(000000)”。
1.用唯一代码填充C列的第6-282行。
1.删除第1-5行
最终结果将使工作簿中的每个工作表如下所示:

这是可能的做与openpyxl,如果是这样,如何?任何方向或援助,这将是非常感谢-谢谢!

1qczuiv0

1qczuiv01#

以下是一种 100%openpyxl方法,可实现您的目标:

from openpyxl import load_workbook

wb = load_workbook("workbook_test.xlsx")

for ws in wb:
    ws.unmerge_cells("A1:O1") #unmerge first row till O
    ws_uid = ws.cell(row=1, column=1).value[-8:] #get the sheet's UID
    for num_row in range(6, 282):
        ws.cell(row=num_row, column=3).value = '="{}"'.format(ws_uid) #write UID in Column C
    ws.delete_rows(1, 5) #delete first 5 rows
    
wb.save("workbook_test.xlsx")

注意:这假设已经有一个空列(C)。

相关问题