diff options
Diffstat (limited to 'lib/items-ship/table/item-excel-template.tsx')
| -rw-r--r-- | lib/items-ship/table/item-excel-template.tsx | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/lib/items-ship/table/item-excel-template.tsx b/lib/items-ship/table/item-excel-template.tsx deleted file mode 100644 index 127a1dea..00000000 --- a/lib/items-ship/table/item-excel-template.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import * as ExcelJS from 'exceljs'; -import { saveAs } from "file-saver"; - -const SHIP_TYPES = ['A-MAX', 'S-MAX', 'LNGC', 'VLCC', 'CONT'] as const; - -/** - * 조선 아이템 데이터 가져오기를 위한 Excel 템플릿 파일 생성 및 다운로드 - */ -export async function exportItemTemplate() { - // 워크북 생성 - const workbook = new ExcelJS.Workbook(); - workbook.creator = 'Shipbuilding Item Management System'; - workbook.created = new Date(); - - // 워크시트 생성 - const worksheet = workbook.addWorksheet('조선 아이템'); - - // 컬럼 헤더 정의 및 스타일 적용 - worksheet.columns = [ - { header: '아이템 코드', key: 'itemCode', width: 15 }, - { header: '아이템 명', key: 'itemName', width: 30 }, - { header: '기능(공종)', key: 'workType', width: 15 }, - { header: '설명', key: 'description', width: 50 }, - ...SHIP_TYPES.map(type => ({ - header: type, - key: type, - width: 10 - })) - ]; - - // 헤더 스타일 적용 - const headerRow = worksheet.getRow(1); - headerRow.font = { bold: true }; - headerRow.fill = { - type: 'pattern', - pattern: 'solid', - fgColor: { argb: 'FFE0E0E0' } - }; - headerRow.alignment = { vertical: 'middle', horizontal: 'center' }; - - // 테두리 스타일 적용 - headerRow.eachCell((cell) => { - cell.border = { - top: { style: 'thin' }, - left: { style: 'thin' }, - bottom: { style: 'thin' }, - right: { style: 'thin' } - }; - }); - - // 샘플 데이터 추가 - const sampleData = [ - { - itemCode: 'BG0001', - itemName: '샘플 아이템 1', - workType: '기장', - description: '이것은 샘플 아이템 1의 설명입니다.', - 'A-MAX': 'O', - 'S-MAX': 'O', - 'LNGC': 'O', - 'VLCC': 'X', - 'CONT': 'X' - }, - { - itemCode: 'BG0002', - itemName: '샘플 아이템 2', - workType: '전장', - description: '이것은 샘플 아이템 2의 설명입니다.', - 'A-MAX': 'O', - 'S-MAX': 'X', - 'LNGC': 'O', - 'VLCC': 'O', - 'CONT': 'X' - } - ]; - - // 데이터 행 추가 - sampleData.forEach(item => { - worksheet.addRow(item); - }); - - // 데이터 행 스타일 적용 - worksheet.eachRow((row, rowNumber) => { - if (rowNumber > 1) { // 헤더를 제외한 데이터 행 - row.eachCell((cell) => { - cell.border = { - top: { style: 'thin' }, - left: { style: 'thin' }, - bottom: { style: 'thin' }, - right: { style: 'thin' } - }; - }); - } - }); - - // 워크시트 보호 (선택적) - worksheet.protect('', { - selectLockedCells: true, - selectUnlockedCells: true, - formatColumns: true, - formatRows: true, - insertColumns: false, - insertRows: true, - insertHyperlinks: false, - deleteColumns: false, - deleteRows: true, - sort: true, - autoFilter: true, - pivotTables: false - }); - - try { - // 워크북을 Blob으로 변환 - const buffer = await workbook.xlsx.writeBuffer(); - const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); - saveAs(blob, 'shipbuilding-item-template.xlsx'); - return true; - } catch (error) { - console.error('Excel 템플릿 생성 오류:', error); - throw error; - } -}
\ No newline at end of file |
