---
title: Frappe 的 Excel 匯出格式設定
---
# Frappe 的 Excel 匯出格式設定
在使用 Frappe 內建的匯出下載報表時,若為數值(Number)或幣值(Currency)資料,在 Excel 中便會自動靠右,不過因客戶需求的關係,我們需要將某些數字格式化 XX,XXX NTS 這種格式,此時資料型態已經是 String,在 Excel 中便不會靠右,因此需要針對 Frappe 的 make_excel 進行修改([Source Code](https://github.com/frappe/frappe/blob/version-13/frappe/utils/xlsxutils.py#L18))
```python=
import openpyxl
from openpyxl.styles import Font, Alignment
from openpyxl.utils import get_column_letter
from frappe.utils.xlsxutils import handle_html
def make_xlsx(data, sheet_name, wb=None, column_widths=None):
column_widths = column_widths or []
if wb is None:
wb = openpyxl.Workbook(write_only=True)
ws = wb.create_sheet(sheet_name, 0)
for i, column_width in enumerate(column_widths):
if column_width:
ws.column_dimensions[get_column_letter(i + 1)].width = column_width
row1 = ws.row_dimensions[1]
row1.font = Font(name='Calibri', bold=True)
for row in data:
clean_row = []
for item in row:
if isinstance(item, str) and (sheet_name not in ['Data Import Template', 'Data Export']):
value = handle_html(item)
else:
value = item
if isinstance(item, str) and next(ILLEGAL_CHARACTERS_RE.finditer(value), None):
# Remove illegal characters from the string
value = re.sub(ILLEGAL_CHARACTERS_RE, '', value)
clean_row.append(value)
ws.append(clean_row)
# 置右特定欄位
alignment_right_columns = ['field_1', 'field_2']
for col in ws.columns:
for idx, cell in enumerate(col):
if idx == 0 and cell.value not in alignment_right_columns:
break
cell.alignment = Alignment(horizontal='right')
xlsx_file = BytesIO()
wb.save(xlsx_file)
return xlsx_file
```
make_excel 的主要 Code 都不用修改,只需要在跑完 ```for row in data ``` 這個迴圈後,依照 ws.columns 的去跑迴圈,由於第一列的第一個 cell 都是欄位名稱(我們的使用情境不會有特殊的報表),因此若第一列的第一個 cell 為需要置右的欄位,就將該 col 的每一個欄位都透過 openpyxl 的 Alignment 去設定靠右,若為不需要靠右的欄位,就跳過該欄即可。之後透過該方法所產的 Excel,特定欄位便都會是靠右顯示。