- updated;
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import * as XLSX from 'xlsx';
|
||||
|
||||
export function xlsxToWorkbookData(arrayBuffer) {
|
||||
const wb = XLSX.read(arrayBuffer, { type: 'array', cellStyles: true, sheetStubs: true });
|
||||
|
||||
const sheets = {};
|
||||
const sheetOrder = [];
|
||||
|
||||
wb.SheetNames.forEach((sheetName, sheetIndex) => {
|
||||
const ws = wb.Sheets[sheetName];
|
||||
const sheetId = `sheet_${sheetIndex}`;
|
||||
sheetOrder.push(sheetId);
|
||||
|
||||
const cellData = {};
|
||||
const ref = ws['!ref'];
|
||||
if (!ref) {
|
||||
sheets[sheetId] = { id: sheetId, name: sheetName, cellData };
|
||||
return;
|
||||
}
|
||||
|
||||
const range = XLSX.utils.decode_range(ref);
|
||||
for (let r = range.s.r; r <= range.e.r; r++) {
|
||||
for (let c = range.s.c; c <= range.e.c; c++) {
|
||||
const cellAddress = XLSX.utils.encode_cell({ r, c });
|
||||
const cell = ws[cellAddress];
|
||||
if (!cell) continue;
|
||||
|
||||
// CellValueType: 1=STRING, 2=NUMBER, 3=BOOLEAN
|
||||
let t;
|
||||
if (cell.t === 'n') t = 2;
|
||||
else if (cell.t === 'b') t = 3;
|
||||
else t = 1;
|
||||
|
||||
if (!cellData[r]) cellData[r] = {};
|
||||
cellData[r][c] = { v: cell.v !== undefined ? cell.v : (cell.w || ''), t };
|
||||
}
|
||||
}
|
||||
|
||||
const mergeData = (ws['!merges'] || []).map(m => ({
|
||||
startRow: m.s.r,
|
||||
startColumn: m.s.c,
|
||||
endRow: m.e.r,
|
||||
endColumn: m.e.c,
|
||||
}));
|
||||
|
||||
sheets[sheetId] = { id: sheetId, name: sheetName, cellData, mergeData };
|
||||
});
|
||||
|
||||
return {
|
||||
id: 'imported-workbook',
|
||||
name: wb.SheetNames[0] || 'Sheet',
|
||||
appVersion: '0.18.0',
|
||||
locale: 'enUS',
|
||||
styles: {},
|
||||
sheetOrder,
|
||||
sheets,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user