Skip to content

Commit e1e75b2

Browse files
committed
feat(datautil): big Heading attribute added
#6
1 parent 8a02e56 commit e1e75b2

9 files changed

Lines changed: 41 additions & 19 deletions

File tree

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,16 @@ yarn add react-xlsx-wrapper@latest
3636
| filename | `string` | Download | `false` | Excel file name to be downloaded |
3737
| fileExtension | `string` | xlsx | `false` | Download file extension [xlsx] |
3838
| element | `HTMLElement` | `<button>` | `false` | Element to download excel file |
39-
| children | `Array<ExcelSheet>` | `null` | `true` | ExcelSheet Represents data |
39+
| children | `React.ReactElement<ExcelSheetProps>` | `null` | `true` | ExcelSheet Represents data |
4040

4141
### ExcelSheet Props
4242

4343
| Prop | Type | Default | Required | Description |
4444
| :------- | :---------------------- | :------ | :------- | :----------------- |
4545
| name | `string` | `""` | `true` | Sheet name in file |
46-
| data | `array<object>` | `null` | `false` | Excel Sheet data |
47-
| dataSet | `array<ExcelSheetData>` | `null` | `false` | Excel Sheet data |
46+
| bigHeading | ` ExcelSheetCol` |`undefined`|`false`| Big Merged Cell Heading
47+
| data | `any[]` | `null` | `false` | Excel Sheet data |
48+
| dataSet | `ExcelSheetData[]` | `null` | `false` | Excel Sheet data |
4849
| children | `ExcelColumn` | `null` | `false` | ExcelColumns |
4950

5051
**Note:** In ExcelSheet props `dataSet` has `precedence` over `data` and `children` props.
@@ -62,7 +63,7 @@ top-level attributes: `fill`, `font`, `numFmt`, `alignment`, and `border`.
6263
| | fgColor | `COLOR_SPEC` |
6364
| | bgColor | `COLOR_SPEC` |
6465
| font | name | `"Calibri"` // default |
65-
| | sz | `"11"` // font size in points |
66+
| | sz | `11` // font size in points |
6667
| | color | `COLOR_SPEC` |
6768
| | bold | `true` or `false` |
6869
| | underline | `true` or `false` |

dist/ExcelPlugin/components/ExcelFile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ var ExcelFile = /*#__PURE__*/function (_react_1$default$Comp) {
6666
if (typeof sheet.props.dataSet === "undefined" || sheet.props.dataSet.length === 0) {
6767
ws = (0, DataUtil_1.excelSheetFromAoA)(_this.createSheetData(sheet));
6868
} else {
69-
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet);
69+
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet, sheet.props.bigHeading);
7070
}
7171
// add worksheet to workbook
7272
xlsx_js_style_1.utils.book_append_sheet(wb, ws, wsName);

dist/ExcelPlugin/utils/DataUtil.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ var dateToNumber = function dateToNumber(v, date1904) {
5050
return (epoch - Number(new Date(Date.UTC(1899, 11, 30)))) / (24 * 60 * 60 * 1000);
5151
};
5252
exports.dateToNumber = dateToNumber;
53-
var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet) {
53+
var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet, bigHeading) {
5454
/*
5555
Assuming the structure of dataset
5656
{
@@ -85,6 +85,14 @@ var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet) {
8585
return;
8686
}
8787
rowCount += ySteps;
88+
if (bigHeading !== null && bigHeading !== void 0 && bigHeading.title) {
89+
var cellRef = xlsx_js_style_1.utils.encode_cell({
90+
c: xSteps,
91+
r: rowCount
92+
});
93+
getHeaderCell(bigHeading, cellRef, ws);
94+
rowCount += 1;
95+
}
8896
var columnsInfo = [];
8997
if (columns.length >= 0) {
9098
columns.forEach(function (col, index) {
@@ -111,12 +119,12 @@ var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet) {
111119
}
112120
for (var R = 0; R !== data.length; ++R, rowCount++) {
113121
for (var C = 0; C !== data[R].length; ++C) {
114-
var cellRef = xlsx_js_style_1.utils.encode_cell({
122+
var _cellRef = xlsx_js_style_1.utils.encode_cell({
115123
c: C + xSteps,
116124
r: rowCount
117125
});
118126
fixRange(range, R, C, rowCount, xSteps, ySteps);
119-
getCell(data[R][C], cellRef, ws);
127+
getCell(data[R][C], _cellRef, ws);
120128
}
121129
}
122130
});

src-js/ExcelPlugin/components/ExcelFile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class ExcelFile extends react_1.default.Component {
6060
ws = (0, DataUtil_1.excelSheetFromAoA)(this.createSheetData(sheet));
6161
}
6262
else {
63-
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet);
63+
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet, sheet.props.bigHeading);
6464
}
6565
// add worksheet to workbook
6666
xlsx_js_style_1.utils.book_append_sheet(wb, ws, wsName);

src-js/ExcelPlugin/utils/DataUtil.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const dateToNumber = (v, date1904) => {
4545
return (epoch - Number(new Date(Date.UTC(1899, 11, 30)))) / (24 * 60 * 60 * 1000);
4646
};
4747
exports.dateToNumber = dateToNumber;
48-
const excelSheetFromDataSet = (dataSet) => {
48+
const excelSheetFromDataSet = (dataSet, bigHeading) => {
4949
/*
5050
Assuming the structure of dataset
5151
{
@@ -71,6 +71,11 @@ const excelSheetFromDataSet = (dataSet) => {
7171
return;
7272
}
7373
rowCount += ySteps;
74+
if (bigHeading?.title) {
75+
let cellRef = xlsx_js_style_1.utils.encode_cell({ c: xSteps, r: rowCount });
76+
getHeaderCell(bigHeading, cellRef, ws);
77+
rowCount += 1;
78+
}
7479
var columnsInfo = [];
7580
if (columns.length >= 0) {
7681
columns.forEach((col, index) => {

src/ExcelPlugin/components/ExcelFile.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class ExcelFile extends React.Component<ExcelFileProps> {
8080
) {
8181
ws = excelSheetFromAoA(this.createSheetData(sheet));
8282
} else {
83-
ws = excelSheetFromDataSet(sheet.props.dataSet);
83+
ws = excelSheetFromDataSet(sheet.props.dataSet, sheet.props.bigHeading);
8484
}
8585
// add worksheet to workbook
8686
utils.book_append_sheet(wb, ws, wsName);

src/ExcelPlugin/utils/DataUtil.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const dateToNumber = (v: string, date1904?: boolean): number => {
4848
return (epoch - Number(new Date(Date.UTC(1899, 11, 30)))) / (24 * 60 * 60 * 1000);
4949
};
5050

51-
const excelSheetFromDataSet = (dataSet: ExcelSheetData[]): WorkSheet => {
51+
const excelSheetFromDataSet = (dataSet: ExcelSheetData[], bigHeading?: ExcelSheetCol): WorkSheet => {
5252
/*
5353
Assuming the structure of dataset
5454
{
@@ -62,7 +62,7 @@ const excelSheetFromDataSet = (dataSet: ExcelSheetData[]): WorkSheet => {
6262
if (dataSet === undefined || dataSet.length === 0) {
6363
return {};
6464
}
65-
65+
6666
let ws: WorkSheet = {};
6767
let range: Range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };
6868
let rowCount = 0;
@@ -78,6 +78,12 @@ const excelSheetFromDataSet = (dataSet: ExcelSheetData[]): WorkSheet => {
7878

7979
rowCount += ySteps;
8080

81+
if(bigHeading?.title) {
82+
let cellRef = utils.encode_cell({ c: xSteps, r: rowCount });
83+
getHeaderCell(bigHeading, cellRef, ws);
84+
rowCount += 1;
85+
}
86+
8187
var columnsInfo: ColInfo[] = [];
8288
if (columns.length >= 0) {
8389
columns.forEach((col, index) => {

types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ declare module 'react-xlsx-wrapper' {
1111

1212
export interface ExcelSheetProps {
1313
name: string;
14+
bigHeading?: ExcelSheetCol;
1415
data?: any[];
1516
dataSet?: ExcelSheetData[];
1617
value?: ExcelValue[] | (() => void);

types/types.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
```ts
22

33
interface ExcelFileProps {
4+
hideElement?: boolean; //Hide download element
45
filename?: string;
56
fileExtension?: string;
67
element?: React.ReactElement; //Download Element
7-
children?: Array<React.ReactElement> | React.ReactElement;
8+
children: Array<React.ReactElement<ExcelSheetProps>> | React.ReactElement<ExcelSheetProps>;
89
}
910

10-
interface ExcelSheetProps<D, DS> {
11+
interface ExcelSheetProps {
1112
name: string;
12-
data?: D[]; // generic DataProps
13-
dataSet?: DS[]; //generic DataSheetProps
14-
value: ExcelValue[] | (() => void);
15-
children: React.ReactElement | Array<React.ReactElement>;
13+
data?: any[];
14+
dataSet?: ExcelSheetData[];
15+
value?: ExcelValue[] | (() => void);
16+
children?: React.ReactElement | Array<React.ReactElement>;
1617
}
1718

1819
interface ExcelSheetData {

0 commit comments

Comments
 (0)