Skip to content

Commit 6500185

Browse files
committed
feat(lots): fixed the column width issue on passing of xStep, and autofilter
It supports auto filter for all columns in the table header fix #7, fix #8
1 parent 8db1c9a commit 6500185

File tree

10 files changed

+103
-6
lines changed

10 files changed

+103
-6
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ changes may not be included if they are not expected to break existing code.
66

77
* Export `NaN` values to `#NUM!` and infinite values to `#DIV/0!`
88

9+
## v2.6.0
10+
11+
* Stable Version. Fixed Column Width bugs on xStep Parameter
12+
* Added New feature to handle auto filter support on the headers. Just add autoFilterForAllColumn to `true`.
13+
* Reduced the size of the package. Trying to improve more.
14+
15+
## v2.5.0
16+
17+
* It does support bigHeading properly. From v2.0.9 - v2.4.0 was not stable due to continues work on BigHeading Feature,
18+
* It does have good default Styling even if you don't pass it.
19+
20+
921
## v2.0.8
1022

1123
* Stable Version. Older all the version from 2.0.0 has bugs. Please do not use.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ yarn add react-xlsx-wrapper@latest
4444
| :------- | :---------------------- | :------ | :------- | :----------------- |
4545
| name | `string` | `""` | `true` | Sheet name in file |
4646
| bigHeading | ` ExcelSheetCol` |`undefined`|`false`| Big Merged Cell Heading
47+
| autoFilterForAllColumn | `boolean` | `false` | `false` | Auto Filter Generated Based on Colums
4748
| data | `any[]` | `null` | `false` | Excel Sheet data |
4849
| dataSet | `ExcelSheetData[]` | `null` | `false` | Excel Sheet data |
4950
| children | `ExcelColumn` | `null` | `false` | ExcelColumns |

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, sheet.props.bigHeading);
69+
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet, sheet.props.bigHeading, sheet.props.autoFilterForAllColumn);
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: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,17 @@ 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, bigHeading) {
53+
/**
54+
* This returns the worksheet object for the given dataSet, also accept bigHeading.
55+
*
56+
* @param dataSet - The ExcelSheetData array is required
57+
* @param bigHeading - ExcelSheetCol (Optional)
58+
* @returns WorkSheet Object
59+
*
60+
* @author Susanta Chakraborty
61+
* @date 2023-06-14
62+
*/
63+
var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet, bigHeading, autoFilterForAllColumn) {
5464
/*
5565
Assuming the structure of dataset
5666
{
@@ -108,6 +118,14 @@ var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet, bigHeading)
108118
rowCount += 1;
109119
}
110120
var columnsInfo = [];
121+
// if xStep has value then we need to skip some columns
122+
if (xSteps > 0) {
123+
for (var i = 0; i < xSteps; i++) {
124+
columnsInfo.push({
125+
wpx: 100
126+
});
127+
}
128+
}
111129
if (columns.length >= 0) {
112130
columns.forEach(function (col, index) {
113131
var cellRef = xlsx_js_style_1.utils.encode_cell({
@@ -126,6 +144,23 @@ var excelSheetFromDataSet = function excelSheetFromDataSet(dataSet, bigHeading)
126144

127145
getHeaderCell(colTitle, cellRef, ws);
128146
});
147+
if (autoFilterForAllColumn) {
148+
var filterRange = {
149+
s: {
150+
c: xSteps,
151+
r: rowCount
152+
},
153+
e: {
154+
c: xSteps + dataSetItem.columns.length - 1,
155+
r: rowCount
156+
}
157+
};
158+
var filterRef = xlsx_js_style_1.utils.encode_range(filterRange);
159+
console.log(filterRef);
160+
ws['!autofilter'] = {
161+
ref: filterRef
162+
};
163+
}
129164
rowCount += 1;
130165
}
131166
if (columnsInfo.length > 0) {

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, sheet.props.bigHeading);
63+
ws = (0, DataUtil_1.excelSheetFromDataSet)(sheet.props.dataSet, sheet.props.bigHeading, sheet.props.autoFilterForAllColumn);
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: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,17 @@ 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, bigHeading) => {
48+
/**
49+
* This returns the worksheet object for the given dataSet, also accept bigHeading.
50+
*
51+
* @param dataSet - The ExcelSheetData array is required
52+
* @param bigHeading - ExcelSheetCol (Optional)
53+
* @returns WorkSheet Object
54+
*
55+
* @author Susanta Chakraborty
56+
* @date 2023-06-14
57+
*/
58+
const excelSheetFromDataSet = (dataSet, bigHeading, autoFilterForAllColumn) => {
4959
/*
5060
Assuming the structure of dataset
5161
{
@@ -82,6 +92,12 @@ const excelSheetFromDataSet = (dataSet, bigHeading) => {
8292
rowCount += 1;
8393
}
8494
let columnsInfo = [];
95+
// if xStep has value then we need to skip some columns
96+
if (xSteps > 0) {
97+
for (let i = 0; i < xSteps; i++) {
98+
columnsInfo.push({ wpx: 100 });
99+
}
100+
}
85101
if (columns.length >= 0) {
86102
columns.forEach((col, index) => {
87103
let cellRef = xlsx_js_style_1.utils.encode_cell({ c: xSteps + index, r: rowCount });
@@ -93,6 +109,12 @@ const excelSheetFromDataSet = (dataSet, bigHeading) => {
93109
}
94110
getHeaderCell(colTitle, cellRef, ws);
95111
});
112+
if (autoFilterForAllColumn) {
113+
const filterRange = { s: { c: xSteps, r: rowCount }, e: { c: xSteps + dataSetItem.columns.length - 1, r: rowCount } };
114+
const filterRef = xlsx_js_style_1.utils.encode_range(filterRange);
115+
console.log(filterRef);
116+
ws['!autofilter'] = { ref: filterRef };
117+
}
96118
rowCount += 1;
97119
}
98120
if (columnsInfo.length > 0) {

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, sheet.props.bigHeading);
83+
ws = excelSheetFromDataSet(sheet.props.dataSet, sheet.props.bigHeading, sheet.props.autoFilterForAllColumn);
8484
}
8585
// add worksheet to workbook
8686
utils.book_append_sheet(wb, ws, wsName);

src/ExcelPlugin/utils/DataUtil.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,17 @@ 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[], bigHeading?: ExcelSheetCol): WorkSheet => {
51+
/**
52+
* This returns the worksheet object for the given dataSet, also accept bigHeading.
53+
*
54+
* @param dataSet - The ExcelSheetData array is required
55+
* @param bigHeading - ExcelSheetCol (Optional)
56+
* @returns WorkSheet Object
57+
*
58+
* @author Susanta Chakraborty
59+
* @date 2023-06-14
60+
*/
61+
const excelSheetFromDataSet = (dataSet: ExcelSheetData[], bigHeading?: ExcelSheetCol, autoFilterForAllColumn?: boolean): WorkSheet => {
5262
/*
5363
Assuming the structure of dataset
5464
{
@@ -91,6 +101,13 @@ const excelSheetFromDataSet = (dataSet: ExcelSheetData[], bigHeading?: ExcelShee
91101
}
92102

93103
let columnsInfo: ColInfo[] = [];
104+
// if xStep has value then we need to skip some columns
105+
if (xSteps > 0) {
106+
for (let i = 0; i < xSteps; i++) {
107+
columnsInfo.push({ wpx: 100 });
108+
}
109+
}
110+
94111
if (columns.length >= 0) {
95112
columns.forEach((col, index) => {
96113
let cellRef = utils.encode_cell({ c: xSteps + index, r: rowCount });
@@ -103,6 +120,13 @@ const excelSheetFromDataSet = (dataSet: ExcelSheetData[], bigHeading?: ExcelShee
103120
getHeaderCell(colTitle, cellRef, ws);
104121
});
105122

123+
if(autoFilterForAllColumn){
124+
const filterRange: Range = { s: { c: xSteps, r: rowCount }, e: { c: xSteps + dataSetItem.columns.length - 1, r: rowCount } };
125+
const filterRef = utils.encode_range(filterRange);
126+
console.log(filterRef);
127+
ws['!autofilter'] = { ref: filterRef };
128+
}
129+
106130
rowCount += 1;
107131
}
108132

types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ declare module 'react-xlsx-wrapper' {
1616
dataSet?: ExcelSheetData[];
1717
value?: ExcelValue[] | (() => void);
1818
children?: React.ReactElement | Array<React.ReactElement>;
19+
autoFilterForAllColumn?: boolean;
1920
}
2021

2122
export interface ExcelSheetData {

types/types.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ interface ExcelFileProps {
1010

1111
interface ExcelSheetProps {
1212
name: string;
13+
bigHeading?: ExcelSheetCol;
1314
data?: any[];
1415
dataSet?: ExcelSheetData[];
1516
value?: ExcelValue[] | (() => void);
1617
children?: React.ReactElement | Array<React.ReactElement>;
18+
autoFilterForAllColumn?: boolean;
1719
}
1820

1921
interface ExcelSheetData {

0 commit comments

Comments
 (0)