如何用Python在Excel文件中导出二维码图片?代码修复求助
解决Python导出二维码图片到Excel的问题
原代码的核心问题是直接将PIL Image对象存入DataFrame后导出,Excel无法识别这些对象,只会输出对象的字符串描述(比如<PIL.Image.Image ...>)。要实现把二维码图片插入Excel,得用xlsxwriter的图片插入API手动处理,以下是修复后的完整代码:
import pandas as pd import qrcode import xlsxwriter from io import BytesIO def create_qr_code(product_code, product_name): # 生成二维码 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(f"{product_code}, {product_name}") qr.make(fit=True) # 将图片存入字节流,避免生成本地临时文件 img = qr.make_image(fill_color="black", back_color="white") img_stream = BytesIO() img.save(img_stream, format='PNG') img_stream.seek(0) return img_stream # 读取源Excel数据 source_path = r'C:\Users\DELL\Documents\project\PMS-231116-BME-code.xlsx' data = pd.read_excel(source_path, skiprows=2) # 整理要导出的文本数据 output_df = data[['Asset no.', 'Equipment name']].rename(columns={ 'Asset no.': 'Product Code', 'Equipment name': 'Product Name' }) # 导出Excel并插入二维码 output_path = 'C:/Users/DELL/Documents/project/output_data.xlsx' with pd.ExcelWriter(output_path, engine='xlsxwriter') as writer: # 写入文本数据,表头默认在第1行,数据从第2行开始 output_df.to_excel(writer, index=False) worksheet = writer.sheets['Sheet1'] # 设置列宽适配内容 worksheet.set_column('A:A', 15) worksheet.set_column('B:B', 30) worksheet.set_column('C:C', 20) # 遍历每行插入二维码到C列 for row_idx, row in output_df.iterrows(): qr_stream = create_qr_code(row['Product Code'], row['Product Name']) # Excel行号从1开始,row_idx从0开始,所以对应行号是row_idx+2(数据行从第2行开始) worksheet.insert_image( row_idx + 2, 2, # 目标单元格:C(row_idx+2) f'qr_{row["Product Code"]}.png', {'image_data': qr_stream, 'x_scale': 0.2, 'y_scale': 0.2} ) # 设置行高适配缩放后的二维码 worksheet.set_row(row_idx + 2, 50)
关键修复点说明:
- 用字节流存储图片:通过
BytesIO把二维码图片存在内存里,不用生成本地临时文件,更高效。 - 指定xlsxwriter引擎:只有这个引擎支持
insert_imageAPI,能直接把图片插入Excel单元格。 - 手动插入图片:先写入文本数据,再遍历每行把二维码插入对应单元格,同时调整列宽和行高保证显示效果。
- 缩放图片:通过
x_scale和y_scale控制二维码大小,避免单元格放不下。
依赖安装
确保已安装所有需要的库:
pip install pandas qrcode xlsxwriter pillow
内容的提问来源于stack exchange,提问作者Nguyễn Ngọc Nghiêm
相关产品推荐
相关产品推荐

