36 lines
1021 B
JavaScript
36 lines
1021 B
JavaScript
import XLSX from 'xlsx'
|
|
import { buildWorkbookSheets } from './signalTableBuilder'
|
|
import { saveBlob } from './filePicker'
|
|
|
|
export function createSignalTableWorkbook(data) {
|
|
const workbook = XLSX.utils.book_new()
|
|
|
|
buildWorkbookSheets(data).forEach(sheet => {
|
|
const worksheet = XLSX.utils.aoa_to_sheet(sheet.rows)
|
|
worksheet['!cols'] = (sheet.cols || []).map(wch => ({ wch }))
|
|
XLSX.utils.book_append_sheet(workbook, worksheet, sheet.name)
|
|
})
|
|
|
|
return workbook
|
|
}
|
|
|
|
export async function exportSignalTable(data, filename = 'SignalTable.xlsx') {
|
|
const workbook = createSignalTableWorkbook(data)
|
|
const content = XLSX.write(workbook, {
|
|
bookType: 'xlsx',
|
|
type: 'array'
|
|
})
|
|
const blob = new Blob([content], {
|
|
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
})
|
|
|
|
return saveBlob(blob, filename, [
|
|
{
|
|
description: 'Excel 工作簿',
|
|
accept: {
|
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx']
|
|
}
|
|
}
|
|
])
|
|
}
|