Lambdaで作成したエクセルファイルのプロパティを確認する
作成者がopenpyxlになっていました。
2025.02.04
Lambdaでエクセルを作成したとき、エクセルのプロパティがどうなっているのか気になったので、確認してみました。
おすすめの方
- LambdaでExcelを操作したい方
- Lambdaで作成したエクセルファイルのプロパティを知りたい方
S3バケットやLambdaを作成する
sam init
sam init \
--runtime python3.11 \
--name lambda-excel-sample \
--app-template hello-world \
--no-tracing \
--no-application-insights \
--structured-logging \
--package-type Zip
requirements.txt
にopenpyxlを記載する
requirements
openpyxl
SAMテンプレート
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: lambda-excel-sample
Globals:
Function:
Timeout: 3
LoggingConfig:
LogFormat: JSON
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: blog-lambda-excel-sample-bucket
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: blog-lambda-excel-sample-function
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.11
Policies:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
Environment:
Variables:
BUCKET_NAME: !Ref Bucket
Architectures:
- x86_64
HelloWorldFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${HelloWorldFunction}
Lambdaコード
エクセルファイルを適当に作成し、S3バケットに保存します。
import os
import boto3
from openpyxl import Workbook
# DynamoDBなどから取得したデータを想定しています
DATA = [
{"timestamp": 1690188000000, "temperature": 32.9, "humidity": 64},
{"timestamp": 1690191000000, "temperature": 30.7, "humidity": 58},
{"timestamp": 1690194000000, "temperature": 34.1, "humidity": 54},
{"timestamp": 1690197000000, "temperature": 36.5, "humidity": 59},
{"timestamp": 1690200000000, "temperature": 33.3, "humidity": 66},
{"timestamp": 1690203000000, "temperature": 29.8, "humidity": 49},
]
BUCKET_NAME = os.getenv("BUCKET_NAME")
OUTPUT_FILE_NAME = "output.xlsx"
s3 = boto3.client("s3")
def lambda_handler(event, context):
wb = Workbook()
ws = wb.active
ws.cell(row=1, column=1, value="timestamp")
ws.cell(row=1, column=2, value="temperature")
ws.cell(row=1, column=3, value="humidity")
for i, row in enumerate(DATA, start=1):
ws.cell(row=i, column=1, value=row["timestamp"])
ws.cell(row=i, column=2, value=row["temperature"])
ws.cell(row=i, column=3, value=row["humidity"])
output_file_path = os.path.join("/tmp", OUTPUT_FILE_NAME)
wb.save(output_file_path)
s3.upload_file(output_file_path, BUCKET_NAME, OUTPUT_FILE_NAME)
デプロイ
sam build --use-container
sam deploy \
--guided \
--region ap-northeast-1 \
--stack-name lambda-excel-sample-stack
Lambdaを実行する
aws lambda invoke \
--function-name blog-lambda-excel-sample-function \
output.txt
S3バケットからエクセルファイルを取得する
aws s3 cp s3://blog-lambda-excel-sample-bucket/output.xlsx output.xlsx
エクセルファイルのプロパティを確認する
エクセルを開いてプロパティを確認すると、作成者がopenpyxlになっていました。作成者以外は空白でした。
最終保存者は記載がありませんでした。