fix: excel with commas getting wrapped in quotes
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 15s
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 15s
This commit is contained in:
parent
dc3a6ae6a1
commit
38601346a5
@ -940,13 +940,30 @@ export class EditorComponent implements OnInit, AfterViewInit {
|
|||||||
return row.map((col: any, index: number) => {
|
return row.map((col: any, index: number) => {
|
||||||
if (!col && col !== 0) col = ''
|
if (!col && col !== 0) col = ''
|
||||||
|
|
||||||
if (isNaN(col)) {
|
/**
|
||||||
col = col.replace(/"/g, '""')
|
* Keeping this for the reference
|
||||||
|
* Code below used to convert JSON to CSV
|
||||||
|
* now the XLSX is converting to CSV
|
||||||
|
*/
|
||||||
|
// if (isNaN(col)) {
|
||||||
|
// // Match and replace the double quotes, ignore the first and last char
|
||||||
|
// // in case they are double quotes already
|
||||||
|
// col = col.replace(/(?<!^)"(?!$)/g, '""')
|
||||||
|
|
||||||
if (col.search(/,/g) > -1) {
|
// if (col.search(/,/g) > -1 ||
|
||||||
col = '"' + col + '"'
|
// col.search(/\r|\n/g) > -1
|
||||||
}
|
// ) {
|
||||||
}
|
// // Missing quotes at the end
|
||||||
|
// if (col.search(/"$/g) < 0) {
|
||||||
|
// col = col + '"' // So we add them
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Missing quotes at the start
|
||||||
|
// if (col.search(/^"/g) < 0) {
|
||||||
|
// col = '"' + col // So we add them
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
const colName = this.headerShow[index]
|
const colName = this.headerShow[index]
|
||||||
const colRule = this.dcValidator?.getRule(colName)
|
const colRule = this.dcValidator?.getRule(colName)
|
||||||
@ -961,20 +978,27 @@ export class EditorComponent implements OnInit, AfterViewInit {
|
|||||||
|
|
||||||
this.data = csvArrayData
|
this.data = csvArrayData
|
||||||
|
|
||||||
let csvContent = csvArrayHeaders.join(',') + '\n'
|
// Apply licence rows limitation if exists, it is only affecting data
|
||||||
// Apply licence rows limitation if exists
|
// which will be send to SAS
|
||||||
csvContent += csvArrayData
|
const strippedCsvArrayData = csvArrayData.slice(0, this.licenceState.value.submit_rows_limit)
|
||||||
.slice(0, this.licenceState.value.submit_rows_limit)
|
// To submit to sas service, we need clean version of CSV of file
|
||||||
.map((e) => e.join(','))
|
// attached. XLSX will do the parsing and heavy lifting
|
||||||
.join('\n')
|
// First we create worksheet of json (data we extracted)
|
||||||
|
let ws = XLSX.utils.json_to_sheet(strippedCsvArrayData, {
|
||||||
|
skipHeader: true
|
||||||
|
});
|
||||||
|
// create CSV to be uploaded from worksheet
|
||||||
|
let csvContentClean = XLSX.utils.sheet_to_csv(ws);
|
||||||
|
// Prepend headers
|
||||||
|
csvContentClean = csvArrayHeaders.join(',') + '\n' + csvContentClean
|
||||||
|
|
||||||
if (this.encoding === 'WLATIN1') {
|
if (this.encoding === 'WLATIN1') {
|
||||||
let encoded = iconv.decode(Buffer.from(csvContent), 'CP-1252')
|
let encoded = iconv.decode(Buffer.from(csvContentClean), 'CP-1252')
|
||||||
let blob = new Blob([encoded], { type: 'application/csv' })
|
let blob = new Blob([encoded], { type: 'application/csv' })
|
||||||
let newCSVFile: File = this.blobToFile(blob, this.filename + '.csv')
|
let newCSVFile: File = this.blobToFile(blob, this.filename + '.csv')
|
||||||
this.uploader.addToQueue([newCSVFile])
|
this.uploader.addToQueue([newCSVFile])
|
||||||
} else {
|
} else {
|
||||||
let blob = new Blob([csvContent], { type: 'application/csv' })
|
let blob = new Blob([csvContentClean], { type: 'application/csv' })
|
||||||
let newCSVFile: File = this.blobToFile(blob, this.filename + '.csv')
|
let newCSVFile: File = this.blobToFile(blob, this.filename + '.csv')
|
||||||
this.uploader.addToQueue([newCSVFile])
|
this.uploader.addToQueue([newCSVFile])
|
||||||
}
|
}
|
||||||
|
@ -18,4 +18,4 @@ In any case, you must not make any such use of this software as to develop softw
|
|||||||
UNLESS EXPRESSLY AGREED OTHERWISE, 4GL APPS PROVIDES THIS SOFTWARE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO LEGAL THEORY, SHALL 4GL APPS BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM USE OR INABILITY TO USE THIS SOFTWARE.
|
UNLESS EXPRESSLY AGREED OTHERWISE, 4GL APPS PROVIDES THIS SOFTWARE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO LEGAL THEORY, SHALL 4GL APPS BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM USE OR INABILITY TO USE THIS SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
`
|
`
|
Loading…
Reference in New Issue
Block a user