openpyxl 采用 ‘data:image/png;base64,’ + base64.b64encode(image_data.getvalue()).decode()插入Excel单元格后,打开文件显示的是字符串,如何确保打开后还原为图像
时间: 2024-09-21 20:12:19 浏览: 40
python将图片转base64,实现前端显示
OpenPyXL是一个Python库,用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。当你将图片数据作为`base64`编码的字符串插入到单元格中,然后直接查看Excel文件时,确实会显示为文本形式的字符串。
为了确保在打开文件时能正常显示图片,而不是作为文本,你需要按照以下步骤操作:
1. 首先,保存图片数据到临时文件,而不是直接使用Base64编码。例如,你可以使用`tempfile`模块创建一个临时文件,并写入图片数据。
```python
import io
import tempfile
from PIL import Image
# 图片数据
image_data = ... # 这里假设你有一个Image对象或其BytesIO版本
# 创建一个临时文件
with tempfile.NamedTemporaryFile(suffix='.png') as temp_file:
img_io = io.BytesIO()
image.save(img_io, 'PNG')
temp_file.write(img_io.getvalue())
temp_file.flush()
# 使用OpenPyXL写入文件
wb = openpyxl.load_workbook(...) # 加载工作簿
ws = wb.active # 或者指定工作表
cell = ws['A1'] # 要写入图片的单元格
cell.value = temp_file.name
```
2. 写入时使用单元格的`hyperlink`属性,这样Excel会识别它是一个图片链接而不是纯文本。不过这通常需要用户双击才能预览,而不会自动在打开时显示。
```python
cell.hyperlink.target = temp_file.name
cell.hyperlink.address = temp_file.name
```
3. 最后,保存并关闭工作簿:
```python
wb.save('output.xlsx') # 保存修改后的文件
```
阅读全文