Skip to content

Commit d5dfa28

Browse files
Merge pull request #8470 from IgniteUI/ibarakov/fix-8466-9.1.x
fix(excel-export): save value as a string unless value type is number
2 parents dbc962b + 5ade2b5 commit d5dfa28

File tree

6 files changed

+99
-5
lines changed

6 files changed

+99
-5
lines changed

projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import { IgxExcelExporterService } from './excel-exporter';
99
import { IgxExcelExporterOptions } from './excel-exporter-options';
1010
import { JSZipWrapper } from './jszip-verification-wrapper.spec';
1111
import { FileContentData } from './test-data.service.spec';
12-
import { ReorderedColumnsComponent, GridIDNameJobTitleComponent, ProductsComponent } from '../../test-utils/grid-samples.spec';
12+
import { ReorderedColumnsComponent,
13+
GridIDNameJobTitleComponent,
14+
ProductsComponent,
15+
GridIDNameJobTitleHireDataPerformanceComponent } from '../../test-utils/grid-samples.spec';
1316
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
1417
import { first } from 'rxjs/operators';
1518
import { DefaultSortingStrategy } from '../../data-operations/sorting-strategy';
@@ -37,7 +40,8 @@ describe('Excel Exporter', () => {
3740
GridIDNameJobTitleComponent,
3841
IgxTreeGridPrimaryForeignKeyComponent,
3942
ProductsComponent,
40-
GridWithEmtpyColumnsComponent
43+
GridWithEmtpyColumnsComponent,
44+
GridIDNameJobTitleHireDataPerformanceComponent
4145
],
4246
imports: [IgxGridModule, IgxTreeGridModule, NoopAnimationsModule]
4347
}).compileComponents();
@@ -500,6 +504,16 @@ describe('Excel Exporter', () => {
500504
// Export and verify
501505
await exportAndVerify(grid, options, actualData.gridWithAdvancedFilters);
502506
});
507+
});
508+
509+
it('Should export arrays as strings.', async () => {
510+
const fix = TestBed.createComponent(GridIDNameJobTitleHireDataPerformanceComponent);
511+
fix.detectChanges();
512+
await wait();
513+
514+
const grid = fix.componentInstance.grid;
515+
516+
await exportAndVerify(grid, options, actualData.personJobHoursDataPerformance);
503517
});
504518

505519
describe('', () => {

projects/igniteui-angular/src/lib/services/excel/test-data.service.spec.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,28 @@ export class ExportTestDataService {
122122
{ ID: 9, Name: 'Leslie Hansen', JobTitle: 'Associate Software Developer', HireDate: '2013-10-10T11:23:17.714Z' },
123123
{ ID: 10, Name: 'Eduardo Ramirez', JobTitle: 'Manager', HireDate: '2011-11-28T11:23:17.714Z' }
124124
];
125+
126+
private _personJobHoursDataPerformance = [
127+
{ ID: 1, Name: 'Casey Houston', JobTitle: 'Vice President', WorkingHours: 4, HireDate: '2017-06-19T11:43:07.714Z', Performance: [
128+
{Points: 3, Week: 1},
129+
{Points: 6, Week: 2},
130+
{Points: 1, Week: 3},
131+
{Points: 12, Week: 4},
132+
] },
133+
{ ID: 2, Name: 'Gilberto Todd', JobTitle: 'Director', WorkingHours: 6, HireDate: '2015-12-18T11:23:17.714Z', Performance: [
134+
{Points: 8, Week: 1},
135+
{Points: 7, Week: 2},
136+
{Points: 4, Week: 3},
137+
{Points: 9, Week: 4},
138+
] },
139+
{ ID: 3, Name: 'Tanya Bennett', JobTitle: 'Director', WorkingHours: 8, HireDate: '2005-11-18T11:23:17.714Z', Performance: [
140+
{Points: 1, Week: 1},
141+
{Points: 3, Week: 2},
142+
{Points: 14, Week: 3},
143+
{Points: 29, Week: 4},
144+
] }
145+
];
146+
125147
constructor() { }
126148

127149
get differentTypesData() {
@@ -163,6 +185,10 @@ export class ExportTestDataService {
163185
return this._simpleGridDataFull;
164186
}
165187

188+
get personJobHoursDataPerformance() {
189+
return this._personJobHoursDataPerformance;
190+
}
191+
166192
public getContactsFunkyData(delimiter) {
167193
return [{
168194
name: 'Terrance Mc\'Orta',
@@ -917,5 +943,21 @@ export class FileContentData {
917943

918944
return this.createData();
919945
}
946+
947+
get personJobHoursDataPerformance() {
948+
this._sharedStringsData =
949+
`count="18" uniqueCount="15"><si><t>ID</t></si><si><t>Name</t></si><si><t>JobTitle</t></si><si><t>WorkingHours</t></si><si><t>HireDate</t></si><si><t>Performance</t></si><si><t>Casey Houston</t></si><si><t>Vice President</t></si><si><t>2017-06-19T11:43:07.714Z</t></si><si><t>[object Object],[object Object],[object Object],[object Object]</t></si><si><t>Gilberto Todd</t></si><si><t>Director</t></si><si><t>2015-12-18T11:23:17.714Z</t></si><si><t>Tanya Bennett</t></si><si><t>2005-11-18T11:23:17.714Z</t></si>`;
950+
951+
this._tableData = `ref="A1:F4" totalsRowShown="0">
952+
<autoFilter ref="A1:F4"/><tableColumns count="6"><tableColumn id="1" name="ID"/><tableColumn id="2" name="Name"/><tableColumn id="3" name="JobTitle"/><tableColumn id="4" name="WorkingHours"/><tableColumn id="5" name="HireDate"/><tableColumn id="6" name="Performance"/></tableColumns>`;
953+
954+
this._worksheetData = `<dimension ref="A1:F4"/>
955+
<sheetViews><sheetView tabSelected="1" workbookViewId="0"></sheetView></sheetViews>
956+
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
957+
<cols><col min="1" max="1" width="50" customWidth="1"/><col min="2" max="2" width="50" customWidth="1"/><col min="3" max="3" width="50" customWidth="1"/><col min="4" max="4" width="50" customWidth="1"/><col min="5" max="5" width="50" customWidth="1"/><col min="6" max="6" width="50" customWidth="1"/></cols>
958+
<sheetData><row r="1"><c r="A1" t="s"><v>0</v></c><c r="B1" t="s"><v>1</v></c><c r="C1" t="s"><v>2</v></c><c r="D1" t="s"><v>3</v></c><c r="E1" t="s"><v>4</v></c><c r="F1" t="s"><v>5</v></c></row><row r="2"><c r="A2" s="1"><v>1</v></c><c r="B2" t="s"><v>6</v></c><c r="C2" t="s"><v>7</v></c><c r="D2" s="1"><v>4</v></c><c r="E2" t="s"><v>8</v></c><c r="F2" t="s"><v>9</v></c></row><row r="3"><c r="A3" s="1"><v>2</v></c><c r="B3" t="s"><v>10</v></c><c r="C3" t="s"><v>11</v></c><c r="D3" s="1"><v>6</v></c><c r="E3" t="s"><v>12</v></c><c r="F3" t="s"><v>9</v></c></row><row r="4"><c r="A4" s="1"><v>3</v></c><c r="B4" t="s"><v>13</v></c><c r="C4" t="s"><v>11</v></c><c r="D4" s="1"><v>8</v></c><c r="E4" t="s"><v>14</v></c><c r="F4" t="s"><v>9</v></c></row></sheetData>`;
959+
960+
return this.createData();
961+
}
920962
/* tslint:enable max-line-length */
921963
}

projects/igniteui-angular/src/lib/services/excel/worksheet-data-dictionary.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ export class WorksheetDataDictionary {
4747

4848
public saveValue(value: any, column: number, isHeader: boolean): number {
4949
if (this._columnTypeInfo[column] === undefined && isHeader === false) {
50-
this._columnTypeInfo[column] = typeof value === 'string' ||
51-
typeof value === 'boolean' ||
52-
value instanceof Date;
50+
this._columnTypeInfo[column] = typeof value !== 'number' && value !== Number(value) && !Number.isFinite(value);
5351
}
5452

5553
let sanitizedValue = '';

projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,13 @@ export class GridIDNameJobTitleComponent extends PagingComponent {
725725
height = '100%';
726726
}
727727

728+
@Component({
729+
template: GridTemplateStrings.declareBasicGridWithColumns(ColumnDefinitions.idNameJobHoursHireDatePerformance)
730+
})
731+
export class GridIDNameJobTitleHireDataPerformanceComponent extends BasicGridComponent {
732+
data = SampleTestData.personJobHoursDataPerformance();
733+
}
734+
728735
@Component({
729736
template: `<div style="margin: 50px;">
730737
${GridTemplateStrings.declareGrid(

projects/igniteui-angular/src/lib/test-utils/sample-test-data.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,30 @@ export class SampleTestData {
173173
{ ID: 10, Name: "Eduardo Ramirez", JobTitle: "Manager", HireDate: "2011-11-28T11:23:17.714Z" }
174174
])
175175

176+
/* Data fields: ID: number, Name: string, JobTitle: string, WokingHours: number, HireDate: string, Performance: array;
177+
3 items, sorted by ID. */
178+
public static personJobHoursDataPerformance = () => ([
179+
{ ID: 1, Name: "Casey Houston", JobTitle: "Vice President", WorkingHours: 4, HireDate: "2017-06-19T11:43:07.714Z", Performance: [
180+
{Points: 3, Week: 1},
181+
{Points: 6, Week: 2},
182+
{Points: 1, Week: 3},
183+
{Points: 12, Week: 4},
184+
] },
185+
{ ID: 2, Name: "Gilberto Todd", JobTitle: "Director", WorkingHours: 6, HireDate: "2015-12-18T11:23:17.714Z", Performance: [
186+
{Points: 8, Week: 1},
187+
{Points: 7, Week: 2},
188+
{Points: 4, Week: 3},
189+
{Points: 9, Week: 4},
190+
] },
191+
{ ID: 3, Name: "Tanya Bennett", JobTitle: "Director", WorkingHours: 8, HireDate: "2005-11-18T11:23:17.714Z", Performance: [
192+
{Points: 1, Week: 1},
193+
{Points: 3, Week: 2},
194+
{Points: 14, Week: 3},
195+
{Points: 29, Week: 4},
196+
] },
197+
])
198+
199+
176200
/* Data fields: ID: number, Name: string, JobTitle: string; 10 items, sorted by ID. */
177201
public static personJobData = () => ([
178202
{ ID: 1, Name: "Casey Houston", JobTitle: "Vice President" },

projects/igniteui-angular/src/lib/test-utils/template-strings.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ export class ColumnDefinitions {
7575
<igx-column field="HireDate" pinned="true"></igx-column>
7676
`;
7777

78+
public static idNameJobHoursHireDatePerformance = `
79+
<igx-column field="ID"></igx-column>
80+
<igx-column field="Name"></igx-column>
81+
<igx-column field="JobTitle"></igx-column>
82+
<igx-column field="WorkingHours"></igx-column>
83+
<igx-column field="HireDate"></igx-column>
84+
<igx-column field="Performance"></igx-column>
85+
`;
86+
7887
public static nameJobTitleId = `
7988
<igx-column field="Name"></igx-column>
8089
<igx-column field="JobTitle"></igx-column>

0 commit comments

Comments
 (0)