在使用openpyxl从SQL数据库写入Excel文件时出现'文件不是zip文件'错误
我正在使用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')