From b03337307e29f4632959b758d21c2a313df0c822 Mon Sep 17 00:00:00 2001 From: Shammamah Hossain Date: Mon, 30 Sep 2019 12:11:11 -0400 Subject: [PATCH 1/2] Ensure that only the visible columns are exported. --- src/dash-table/components/Export/index.tsx | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/dash-table/components/Export/index.tsx b/src/dash-table/components/Export/index.tsx index 4e8bf1f24..c5cccf4bc 100644 --- a/src/dash-table/components/Export/index.tsx +++ b/src/dash-table/components/Export/index.tsx @@ -1,6 +1,6 @@ import XLSX from 'xlsx'; import React from 'react'; -import { IDerivedData, Columns } from 'dash-table/components/Table/props'; +import { IDerivedData, Columns, Data, Datum } from 'dash-table/components/Table/props'; import { createWorkbook, createHeadings, createWorksheet } from './utils'; import getHeaderRows from 'dash-table/derived/header/headerRows'; @@ -13,6 +13,21 @@ interface IExportButtonProps { merge_duplicate_headers: boolean; } +export function filterData(data: Data, columnID: string[]) { + + var filteredData: Datum[] = []; + + data.forEach(data_row => { + var filtered_row: Datum = {}; + columnID.forEach(column => { + filtered_row[column] = data_row[column]; + }); + filteredData.push(filtered_row); + }); + + return filteredData; +} + export default React.memo((props: IExportButtonProps) => { const { columns, export_format, virtual_data, export_headers, visibleColumns, merge_duplicate_headers } = props; @@ -23,12 +38,12 @@ export default React.memo((props: IExportButtonProps) => { const columnHeaders = visibleColumns.map(column => column.name); const maxLength = getHeaderRows(columns); const heading = (export_headers !== 'none') ? createHeadings(columnHeaders, maxLength) : []; - const ws = createWorksheet(heading, virtual_data.data, columnID, export_headers, merge_duplicate_headers); + const ws = createWorksheet(heading, filterData(virtual_data.data, columnID), columnID, export_headers, merge_duplicate_headers); const wb = createWorkbook(ws); if (export_format === 'xlsx') { - XLSX.writeFile(wb, 'Data.xlsx', {bookType: 'xlsx', type: 'buffer'}); + XLSX.writeFile(wb, 'Data.xlsx', { bookType: 'xlsx', type: 'buffer' }); } else if (export_format === 'csv') { - XLSX.writeFile(wb, 'Data.csv', {bookType: 'csv', type: 'buffer'}); + XLSX.writeFile(wb, 'Data.csv', { bookType: 'csv', type: 'buffer' }); } }; From e09da5921291fe1f72edab5ea241e3c86501efce Mon Sep 17 00:00:00 2001 From: Shammamah Hossain Date: Mon, 30 Sep 2019 12:21:16 -0400 Subject: [PATCH 2/2] Add back changes. --- src/dash-table/components/Export/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dash-table/components/Export/index.tsx b/src/dash-table/components/Export/index.tsx index cc97ccc8f..32b7adca3 100644 --- a/src/dash-table/components/Export/index.tsx +++ b/src/dash-table/components/Export/index.tsx @@ -1,6 +1,6 @@ import XLSX from 'xlsx'; import React from 'react'; -import { IDerivedData, Columns, ExportHeaders, ExportFormat, ExportColumns } from 'dash-table/components/Table/props'; +import { IDerivedData, Columns, Data, Datum, ExportHeaders, ExportFormat, ExportColumns } from 'dash-table/components/Table/props'; import { createWorkbook, createHeadings, createWorksheet } from './utils'; import getHeaderRows from 'dash-table/derived/header/headerRows'; @@ -16,10 +16,10 @@ interface IExportButtonProps { export function filterData(data: Data, columnID: string[]) { - var filteredData: Datum[] = []; + let filteredData: Data = []; data.forEach(data_row => { - var filtered_row: Datum = {}; + let filtered_row: Datum = {}; columnID.forEach(column => { filtered_row[column] = data_row[column]; }); @@ -42,7 +42,7 @@ export default React.memo((props: IExportButtonProps) => { const maxLength = getHeaderRows(columns); const heading = (export_headers !== ExportHeaders.None) ? createHeadings(columnHeaders, maxLength) : []; - const ws = createWorksheet(heading, virtual_data.data, columnID, export_headers, merge_duplicate_headers); + const ws = createWorksheet(heading, filterData(virtual_data.data, columnID), columnID, export_headers, merge_duplicate_headers); const wb = createWorkbook(ws); if (export_format === ExportFormat.Xlsx) { XLSX.writeFile(wb, 'Data.xlsx', { bookType: 'xlsx', type: 'buffer' });