AWS Lambda 会在导出 Excel 文件时遇到编码问题,这通常是因为缺乏相应的本地库和字体。通过在 Lambda 函数中安装 openpyxl 和 xlwt 库,并在函数中添加字体路径,可以解决此问题。
确保在 AWS Lambda 环境中安装了以下 Python 包:
在 Lambda 函数的代码中,可以通过设置以下字体路径解决编码问题:
import os import openpyxl from openpyxl.utils import get_column_letter from openpyxl.styles import Font
FONT_NAME = 'Droid Sans Fallback'
FONT_PATH = os.path.exists('/usr/share/fonts/truetype') and '/usr/share/fonts/truetype' or
os.path.abspath(os.path.join(os.path.dirname(file), 'fonts'))
if not os.path.exists(FONT_PATH):
FONT_PATH = None
def create_excel_file(data): # 创建 Excel 文件 try: wb = openpyxl.Workbook() # 添加一个工作表 ws = wb.active
# 设置表头
headers = ['ID', 'Name', 'Email']
for col_num, column_title in enumerate(headers, 1):
column_letter = get_column_letter(col_num)
ws['{}1'.format(column_letter)].font = Font(size=14, bold=True)
ws['{}1'.format(column_letter)] = column_title
# 添加数据
for row_num, row_data in enumerate(data, 2):
ws.cell(row=row_num, column=1).value = row_data.get('id')
ws.cell(row=row_num, column=2).value = row_data.get('name')
ws.cell(row=row_num, column=3).value = row_data.get('email')
# 保存文件
file_path = '/tmp/my_excel_file.xlsx'
wb.save(file_path)
return file_path
except Exception as e:
print(e)
return None
请注意:如果您需要在 Lambda 函数中处理某些非 ASCII 字符,例如中文字符,还需要将字符编码为 UTF-8。例如:
ws.cell(row=row_num, column=2).value = row_data.get('name').encode('utf-8')
上一篇:AWSLambda:Cannotuseimportstatementoutsideamodule
下一篇:AWSLambda:调用端点时出现“ValueError:couldnotconvertstringtofloat:''错误