table-xlsx
Version:
Based on SheetJS encapsulation, the function of exporting files and parsing files to generate table data is realized
90 lines (89 loc) • 2.23 kB
TypeScript
export type DefaultValueType = Record<string, any>;
export type DataIndex = string | number | undefined | readonly (string | number)[];
export interface MergesArrType {
s: {
c: number;
r: number;
};
e: {
c: number;
r: number;
};
}
export interface MergesObjType {
[key: string]: {
colSpan?: number;
rowSpan?: number;
};
}
export interface ColumnType {
key?: string;
title?: string;
dataIndex?: string;
mergesObj?: MergesObjType;
render?: (value: any, row: DefaultValueType, rowIndex: number) => any;
xlsxRender?: (value: any, row: DefaultValueType, rowIndex: number) => any;
onTxBodyCell?: (row: DefaultValueType, rowIndex: number) => {
style: CellStyleType;
};
children?: ColumnType[];
[key: string]: any;
}
export interface DataType {
[key: string]: any;
}
export interface TableType {
sheetName?: string;
dataSource?: DataType[];
columns?: ColumnType[];
}
export interface CellStyleType {
fontBold?: boolean;
fontName?: string;
fontColorRgb?: string;
fillFgColorRgb?: string;
borderStyle?: string;
borderColorRgb?: string;
alignmentHorizontal?: string;
alignmentVertical?: string;
}
export interface SheetType {
'!ref'?: string;
'!cols'?: {
wpx?: number;
}[];
'!rows'?: {
hpx?: number;
}[];
'!merges'?: MergesArrType[];
[key: string]: {
t?: string;
v?: string | number;
s?: DefaultValueType;
} | undefined | string | {
wpx?: number;
}[] | {
hpx?: number;
}[] | MergesArrType[];
}
export interface HeaderCellType {
title?: string;
merges?: MergesArrType;
txHeaderCellStyle?: CellStyleType;
}
export interface ExportFilePropsType {
fileName?: string;
sheetNames?: (string | number)[];
columns: ColumnType[][];
dataSource: DataType[][];
showHeader?: boolean;
raw?: boolean;
rowHpx?: number;
cellStyle?: CellStyleType;
headerCellStyle?: CellStyleType;
bodyCellStyle?: CellStyleType;
useRender?: boolean;
onTxBodyRow?: (row: DefaultValueType, rowIndex: number) => {
style: CellStyleType;
};
}