在使用openpyxl从SQL数据库写入Excel文件时出现'文件不是zip文件'错误

0 投票
1 回答
75 浏览
提问于 2025-04-12 19:45

我正在使用Pandas这个工具,我想对数据库中的一系列表进行查询,并把每次查询的结果写到Excel的不同工作表里。但是我遇到了一个错误,提示“文件不是一个压缩文件”。你能帮我解决这个问题,让我的代码正常工作吗?也许你有其他的方法,不用openpyxl这个库?

我现在的代码是:

def create_workbook(path):
    workbook = Workbook()
    workbook.save(path)

create_workbook('result.xlsx')

def function_1(table, file):
    book = load_workbook(file)
    writer = pd.ExcelWriter(file, engine = 'openpyxl')
    writer.book = book
    query = f"select * from {table}"
    df = pd.read_sql_query(query , engine)
    df.to_excel(writer, sheet_name = table)
    writer.close()

for table in tables_list:
    function_1(table, 'result.xlsx')

相关问题:

1 个回答

1

你正在用Openpyxl打开新创建的Excel文件'results.xlsx',然后又用ExcelWriter把这个文件覆盖成一个新的空文件。
这样做其实没必要。
而且,writer.book = book可能会有问题,因为当你运行这段代码时,'result.xlsx'就不再是一个XLSX文件了,而是一个大小为0字节的空文件。

无论如何,正如前面提到的,使用Openpyxl打开文件是多余的,不应该这样做。
当ExcelWriter打开文件时,如果你指定了引擎为Openpyxl,它会自动使用Openpyxl来打开文件(否则默认使用Xlsxwriter或其他指定的模块)。所以没有必要先用引擎模块加载文件,这样反而可能会出问题。
在你的情况下,提前创建文件也是不必要的,因为ExcelWriter的默认模式是'写入',它会自己创建这个文件。因此,可以省略'create_workbook'这个函数。

你只需要下面的代码
'result.xlsx'会通过这一行writer = pd.ExcelWriter(file, engine='openpyxl')被创建。

import pandas as pd


def function_1(table, file):

    query = f"select * from {table}"
    df = pd.read_sql_query(query, engine)

    writer = pd.ExcelWriter(file, engine='openpyxl')
    df.to_excel(writer, sheet_name=table)

    writer.close()

function_1('Sheet1', 'result.xlsx')

如果你使用上下文管理器,也可以省去close()这个步骤。

import pandas as pd


def function_1(table, file):
    query = f"select * from {table}"
    df = pd.read_sql_query(query, engine)

    with pd.ExcelWriter(file, engine='openpyxl') as writer:
        df.to_excel(writer, sheet_name=table)

function_1('Sheet1', 'result.xlsx')

撰写回答