Excel 使用 panda 批量处理数据后文件损坏

Excel file gets corrupted after bulking data with panda

好吧,显然这是一个非常简单的任务,但出于某种原因,它给我带来了麻烦。

代码如下:

    marcacoes = pd.read_excel(file_loc, sheet_name="MONITORAMENTO", index_col=None, na_values=['NA'], usecols ="AN")
    x=0
    while x < len(statusclientes):
        if (statusclientes.iloc[x][0] == "Offline"):
            p=marcacoes.iloc[x][0]
            p=p+1
            marcacoes.iat[x,0]= p
            tel_off.append(telclientes.iloc[x][0])
        if (statusclientes.iloc[x][0] == "Indefinido"):
            tel_off.append(telclientes.iloc[x][0])
        x=x+1
    y=0
    with pd.ExcelWriter(file_loc,mode='a',if_sheet_exists='replace') as writer:  
        marcacoes.to_excel(writer, sheet_name='MONITORAMENTO',startcol=37,startrow=5)
        writer.save()

但有问题的部分是:

with pd.ExcelWriter(file_loc,mode='a',if_sheet_exists='replace') as writer:  
        marcacoes.to_excel(writer, sheet_name='MONITORAMENTO',startcol=37,startrow=5)
        writer.save()

因为代码 运行 没有它也很好。 这些特定的行应该将数据框“marcacoes”转储到现有的 excel 文件中,替换文件中的另一个现有列,但是每当我 运行 这段代码时,现有的 excel 文件就会变成已损坏。

我很确定我在这里缺少 pandas 的一些基础知识,但我找不到解决此问题的文档。

编辑:

我试过以下代码:

wb = openpyxl.load_workbook(file_loc)
        ws = wb['MONITORAMENTO']
        startcol = 37
        startrow = 5
        k=0
        while k < len(marcacoes):
            ws.cell(startrow, startcol).value = marcacoes.iloc[k][0]
            startrow +=1
            k+=1
wb.save(file_loc)

但同样的事情发生了,现在它是由“wb.save(file_loc)”行引起的。

您可以尝试使用 openpyxl,例如:

from openpyxl import load_workbook

book = load_workbook(file_loc)
writer = pd.ExcelWriter(file_loc, engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

marcacoes.to_excel(writer, sheet_name='MONITORAMENTO', startcol=37, startrow=5)
writer.save()

我已经用过几次这种方法,总的来说效果不错。

还要确保您的起始文件没有损坏。损坏错误也可能是由图片、数据透视表、数据验证或外部连接引起的。

好的,我明白了。

实际问题来自加载工作簿。 documentation 说如果你想加载带有宏的 xlsm 文件,你必须在函数参数上指定。

wb = load_workbook(filename=file_loc, read_only=False, keep_vba=True)

现在可以正确保存,不会损坏。