背景:
打开df_0 如图所示
新建sht
打开sht1
提取sht1的行数n 列数m
提取df_0的列数M
将sht1的内容sht1_used复制到sht, 即sht_左表
位于第1列~第1+(m-1)列
下面生成sht_右表
将df_0的标题行复制到sht 位于sht_左表的右侧 空一列 即右移m+1列
即位于第m+2列~第m+2+(M-1)列
for i in [1,n]:
for j in [1, M]:
生成公式, 其中i来源于sht1的行数n, j来源于df_0的列数M, 公式内的字母列来自sht1
sht.cells(行, 列).formula = 公式, 其中列=j+右移列数
app = xw.App(visible= True, add_book= False)
app.display_alerts = True,
app.screen_updating = True
wb = app.books.add()
sht = wb.sheets[0]
sht.name = '内部核对-2030'
wb_1 = app.books.open(wj_1)
sht_1 = wb_1.sheets[0]
sht_1.used_range.copy(sht.range('A1'))
n = sht.used_range.last_cell.row
m = sht.used_range.last_cell.column
M = df_0.shape[1]
sht.cells(1, m+2).value = df_0.columns.tolist()
for i in range(2, n+1):
for j in range(1, M+1):
str_form = df_0.iloc[0, j-1]
str_form = str_form.replace('{}', str(i))
str_form = '=' + str_form
sht.cells(i,j+m+1).formula = str_form
'''这种公式法会有两个问题'''
# 源数据行列变化 就会错位 比如sap导出的列是否完整
# 公式行列变化 就会错位 比如两个表之间空一列还是两列
# 所以还是老实用pandas明确指定列吧
wb.save('save.xlsx')
wb.close()
wb_1.close()
app.kill()