|
|
|
@ -103,13 +103,11 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
|
|
|
|
} |
|
|
|
|
columnNamePrefixRef[cn] = 0 |
|
|
|
|
|
|
|
|
|
const column: Record<string, any> = { |
|
|
|
|
let column: Record<string, any> = { |
|
|
|
|
column_name: cn, |
|
|
|
|
ref_column_name: cn, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
table.columns.push(column) |
|
|
|
|
|
|
|
|
|
// const cellId = `${col.toString(26).split('').map(s => (parseInt(s, 26) + 10).toString(36).toUpperCase())}2`;
|
|
|
|
|
const cellId = XLSX.utils.encode_cell({ |
|
|
|
|
c: range.s.c + col, |
|
|
|
@ -118,6 +116,11 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
|
|
|
|
const cellProps = ws[cellId] || {} |
|
|
|
|
column.uidt = excelTypeToUidt[cellProps.t] || UITypes.SingleLineText |
|
|
|
|
|
|
|
|
|
const { sqlUi } = useProject() |
|
|
|
|
|
|
|
|
|
// enrich data type for Template Editor to process
|
|
|
|
|
column = { ...column, ...sqlUi?.value?.getDataTypeForUiType({ uidt: column.uidt }) } |
|
|
|
|
|
|
|
|
|
// todo: optimize
|
|
|
|
|
if (column.uidt === UITypes.SingleLineText) { |
|
|
|
|
// check for long text
|
|
|
|
@ -148,18 +151,26 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
|
|
|
|
const uniqueVals = (flattenedVals = flattenedVals.filter( |
|
|
|
|
(v: any, i: any, arr: any) => i === arr.findIndex((v1: any) => v.toLowerCase() === v1.toLowerCase()), |
|
|
|
|
)) |
|
|
|
|
// assume the column type is multiple select if there are repeated values
|
|
|
|
|
if (flattenedVals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(flattenedVals.length / 2)) { |
|
|
|
|
column.uidt = UITypes.MultiSelect |
|
|
|
|
column.dtxp = `'${uniqueVals.join("','")}'` |
|
|
|
|
} |
|
|
|
|
// set dtxp here so that users can have the options even they switch the type from other types to MultiSelect
|
|
|
|
|
// once it's set, dtxp needs to be reset if the final column type is not MultiSelect
|
|
|
|
|
column.dtxp = `'${uniqueVals.join("','")}'` |
|
|
|
|
} else { |
|
|
|
|
// assume the column type is single select if there are repeated values
|
|
|
|
|
// once it's set, dtxp needs to be reset if the final column type is not Single Select
|
|
|
|
|
const uniqueVals = vals |
|
|
|
|
.map((v: any) => v.toString().trim()) |
|
|
|
|
.filter((v: any, i: any, arr: any) => i === arr.findIndex((v1: any) => v.toLowerCase() === v1.toLowerCase())) |
|
|
|
|
|
|
|
|
|
if (vals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(vals.length / 2)) { |
|
|
|
|
column.uidt = UITypes.SingleSelect |
|
|
|
|
column.dtxp = `'${uniqueVals.join("','")}'` |
|
|
|
|
} |
|
|
|
|
// set dtxp here so that users can have the options even they switch the type from other types to SingleSelect
|
|
|
|
|
// once it's set, dtxp needs to be reset if the final column type is not MultiSelect
|
|
|
|
|
column.dtxp = `'${uniqueVals.join("','")}'` |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -200,6 +211,7 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
|
|
|
|
column.uidt = UITypes.Date |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
table.columns.push(column) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let rowIndex = 0 |
|
|
|
|