用Python从BytesIO创建Excel文件

7

我正在使用pandas库将Excel存储到bytesIO内存中。稍后,我将这个bytesIO对象按照以下方式存储到SQL Server中 -

    df = pandas.DataFrame(data1, columns=['col1', 'col2', 'col3'])
    output = BytesIO()
    writer = pandas.ExcelWriter(output,engine='xlsxwriter')
    df.to_excel(writer)
    writer.save()
    output.seek(0)
    workbook = output.read()

    #store into table
    Query = '''
            INSERT INTO [TABLE]([file]) VALUES(?)
            '''
    values = (workbook)
    cursor = conn.cursor()
    cursor.execute(Query, values)
    cursor.close()
    conn.commit()

   #Create excel file.
   Query1 = "select [file] from [TABLE] where [id] = 1"
   result = conn.cursor().execute(Query1).fetchall()
   print(result[0])

现在,我想从表格中取回BytesIO对象并创建一个Excel文件,并将其存储在本地。我该如何做?

你有具体的问题吗?你已经尝试过什么了吗? - AMC
通过我的上述代码,我可以在控制台中看到bytesIO数据。但是我不知道如何将其写入Excel文件。 - user2961127
好的,但你说你已经在数据库中得到了它,对吧? - AMC
是的,在数据库中,文件以 varbinary 格式存储。现在,我正在尝试将 varbinary 数据导出回 Excel,以确保我的代码正常工作。 - user2961127
我不熟悉BytesIO,你能解释一下它是用来做什么的吗?在这里它被用来做什么? - AMC
我找到了解决办法。 - user2961127
1个回答

6

最终,我找到了解决方案。以下是所执行的步骤:

  1. 将DataFrame转换为Excel,并以BytesIO格式存储在内存中。
  2. 将BytesIO对象存储在包含varbinary(max)的数据库列中。
  3. 提取存储的BytesIO对象并在本地创建Excel文件。

Python代码:

#Get Required data in DataFrame:
df = pandas.DataFrame(data1, columns=['col1', 'col2', 'col3'])

#Convert the data frame to Excel and store it in BytesIO object `workbook`:
output = BytesIO()
writer = pandas.ExcelWriter(output,engine='xlsxwriter')
df.to_excel(writer)
writer.save()
output.seek(0)
workbook = output.read()

#store into Database table
Query = '''
        INSERT INTO [TABLE]([file]) VALUES(?)
        '''
values = (workbook)
cursor = conn.cursor()
cursor.execute(Query, values)
cursor.close()
conn.commit()

#Retrieve the BytesIO object from Database
Query1 = "select [file] from [TABLE] where [id] = 1"
result = conn.cursor().execute(Query1).fetchall()

WriteObj = BytesIO()
WriteObj.write(result[0][0])  
WriteObj.seek(0)  
df = pandas.read_excel(WriteObj)
df.to_excel("outputFile.xlsx") 

你可能不需要使用BytesIO和Pandas的最后几步骤。你可以使用类似with open('outputFile.xlsx', 'wb') as xlsxfile: xlsxfile.write(result[0][0])的方式直接将查询结果写入文件。 - jmcnamara
好的,我想利用 pandas 进行文件生成,因此使用了它。但是方向不错。 - user2961127

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接