Tool CLI và API đơn giản để chuyển file Excel thành ảnh PNG, mỗi sheet sẽ được xuất ra một ảnh riêng.
Mặc định tool dùng engine auto: ưu tiên render chất lượng cao bằng LibreOffice (giữ format gần với file gốc), nếu môi trường không có LibreOffice thì tự fallback về renderer đơn giản. File .xls cũ sẽ dùng LibreOffice nếu có; nếu không có LibreOffice, tool vẫn đọc dữ liệu bằng Python và render dạng bảng đơn giản.
pip install -r requirements.txtpython excel_to_image.py input.xlsxHỗ trợ .xls, .xlsx, .xlsm. Mặc định, ảnh sẽ được xuất vào thư mục output nằm cùng cấp với file Excel.
--outputđể chỉ định thư mục xuất ảnh--sheetđể chỉ convert một hoặc nhiều sheet cụ thể--font-sizeđể chỉnh kích thước chữ của ô--title-font-sizeđể chỉnh kích thước tiêu đề sheet--engine auto|libreoffice|simpleđể chọn engine render--dpiđể chỉnh chất lượng ảnh khi dùng LibreOffice (mặc định 220)
Ví dụ:
python excel_to_image.py report.xlsx --output images --sheet Sheet1 --sheet SummaryVí dụ ép dùng chất lượng cao:
python excel_to_image.py report.xlsx --engine libreoffice --dpi 300Chạy local:
uvicorn api:app --host 0.0.0.0 --port 8000Endpoint chính:
GET /healthđể kiểm tra serverPOST /convertđể upload file.xls,.xlsx,.xlsmhoặc.pdfvà nhận về một file ZIP chứa các ảnh PNG
Query tùy chọn cho POST /convert:
engine=auto|libreoffice|simpledpi=220(chỉ áp dụng cho LibreOffice)
Ví dụ n8n:
- Dùng node
HTTP Request - Method:
POST - Body Content Type:
Form-Data - Parameter Type:
n8n Binary File - Name:
file - Input Data Field Name:
data(hoặc tên binary property từ node trước) - URL:
http://your-server:8000/convert
Nếu muốn chỉ convert một số sheet, truyền query sheet=Sheet1 nhiều lần.
docker build -t excel2image .
docker run -p 8000:8000 excel2imageDocker image đã cài sẵn LibreOffice + pdftoppm để render chất lượng cao.
Nếu bạn cài qua giao diện Portainer, cách dễ nhất là dùng Stack:
- Vào Portainer ->
Stacks->Add stack. - Đặt tên stack, ví dụ
excel2image. - Chọn tab
Web editor. - Dán nội dung file
docker-compose.ymlvào. - Bấm
Deploy the stack.
Sau khi chạy xong, API sẽ lắng nghe ở port 8000.
Nếu bạn dùng node HTTP Request trong n8n, URL sẽ là:
http://<server-ip>:8000/convert
Kiểm tra nhanh:
GET http://<server-ip>:8000/health