Missing data in csv file after export data from JSON response #3273

Closed
opened 2025-01-16 06:10:15 +00:00 by Aiman1017 · 8 comments

NOTE: This is a bug in the Chromium engine (powering Chrome and Edge). SheetJS team members have reported the issue to the Chromium project: https://issues.chromium.org/issues/390568195 . It will take time for the browser vendors to roll out a patch. Some mitigation strategies have been mentioned in this issue thread and in the SheetJS Chat


Hi everyone,

Currently I am having missing data issue after I export the json data into the csv file.

This is the first time it happens. Please refer to picture below:
image

And the JSON response looks like below:
{"response":"Success","message":[{"HERO_CASE_ID":"H-2501156207","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653341432","TT_NUM":"1-26653341432","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:11:15.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:44:50.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:44:50.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T02:57:14.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"},{"HERO_CASE_ID":"H-2501151185","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653468021","TT_NUM":"1-26653468021","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:09:54.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:22:24.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:22:24.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T01:06:34.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"}]

My logic looks like below:

JSON - Excel data mapping and manipulation:

function DataForReport2(apiData) {
    let reportData = apiData.map(data => ({
        HERO_CASE_ID: data.HERO_CASE_ID,
        CUSTOMER_NAME: data.CUST_NAME,
        DESCRIPTION: (data?.DESCRIPTION ?? '').replaceAll('\n', '<br>').replace(/^[-]/, "'-"),
        HERO_LOGGER: data.HERO_LOGGER,
        HERO_LOGGER_ID: data.HERO_LOGGER_ID,
        HERO_STATE: data.HERO_STATE,
        AREA_LOCATION: data.AREA_LOCATION,
        CASE_STATUS: data.CASE_STATUS,
        CASE_TYPE: data.CASE_TYPE,
        VIP: data.VIP,
        PACKAGE_NAME: data.PACKAGE_NAME,
        PRODUCT: data.PRODUCT,
        SEGMENT: data.SEGMENT,
        CASE_OWNER: data.CASE_OWNER,
        GROUP: data.GROUP_,
        SR_NUM: data.SR_NUM,
        TT_NUM: data.TT_NUM,
        UPDATE_REMARKS: (data?.UPDATE_REMARKS ?? '').replaceAll('\n', '<br>').replace(/^[-]/, "'-"),
        CLOSURE_TYPE: data.CLOSURE_TYPE,
        CREATED_DATE: (data?.CREATED_DATE == null) ? moment(data.CREATED_DATE).format('DD/MM/YYYY h:mm:ss a') : null,
        MONTH_YEAR: data.MONTH_YEAR,
        AGING_CLOSED: data.AGING_CLOSED,
        CLOSED_DATE: (data?.CLOSED_DATE == null) ? moment(data.CLOSED_DATE).format('DD/MM/YYYY h:mm:ss a') : null,
        AGING_UNASSIGNED: data.AGING_UNASSIGNED,
        DATE_UNASSIGNED: (data?.DATE_UNASSIGNED == null) ? moment(data.DATE_UNASSIGNED).format('DD/MM/YYYY h:mm:ss a') : null,
        AGING_ASSIGNED: data.AGING_ASSIGNED,
        ASSIGNED_DATE: (data?.ASSIGNED_DATE == null) ? moment(data.ASSIGNED_DATE).format('DD/MM/YYYY h:mm:ss a') : null,
        AGING_INPROGRESS: data.AGING_INPROGRESS,
        INPROGRESS_DATE: (data?.INPROGRESS_DATE == null) ? moment(data.INPROGRESS_DATE).format('DD/MM/YYYY h:mm:ss a') : null,
        AGING_CANCELLED: data.AGING_CANCELLED,
        CANCELLED_DATE: (data?.CANCELLED_DATE == null) ? moment(data.CANCELLED_DATE).format('DD/MM/YYYY h:mm:ss a') : null,
        AGING: data.AGING,
        RATING: data.RATING,
        FLAG: data.FLAG,
        CKC: data.CKC,
        CKC_NUM: data.CKC_NUM,
        EXT_SYS_REF: data.EXT_SYS_REF,
        STAKEHOLDER_REF: data.STAKEHOLDER_REF
    }));

    return reportData;
}

UI Logic

`const getReport = async (type) => {
await DashboardService.dailyReport(enqueueSnackbar, closeSnackbar, token, type).then(res => {
console.log(res.data.message);

        if (res.status !== 200) return;
        let getFilename = (type) => {
            if (type === 'daily') return 'HERO-DAILY-REPORT.csv'
            if (type === 'weekly') return 'HERO-WEEKLY-REPORT.csv'
            if (type === 'current-month') return `HERO-MONTHLY-REPORT(${moment().format('MMMM')}).csv`
            if (type === 'last-month') return `HERO-MONTHLY-REPORT(${moment().subtract(1, 'months').format('MMMM')}).csv`
            if (type === 'last-3-month') return `HERO-MONTHLY-REPORT(${moment().subtract(3, 'months').format('MMMM')} - ${moment().format('MMMM')}).csv`
            if (type === 'last-6-month') return `HERO-MONTHLY-REPORT(${moment().subtract(5, 'months').format('MMMM')} - ${moment().format('MMMM')}).csv`
            else return 'HERO-REPORT.csv'
        }
        // const rows = DataForReport(res.data.message);
        const rows = DataForReport2(res.data.message);
        const fileName = getFilename(type);

        // create workbook and worksheet
        const workbook = XLSX.utils.book_new();
        const worksheet = XLSX.utils.json_to_sheet(rows, {range:1});

        XLSX.utils.book_append_sheet(workbook, worksheet, "Reporting");

        XLSX.writeFile(workbook, fileName)
    })
}`

Please not that this logic is in React JS project.

NOTE: **This is a bug in the Chromium engine (powering Chrome and Edge)**. SheetJS team members have reported the issue to the Chromium project: https://issues.chromium.org/issues/390568195 . It will take time for the browser vendors to roll out a patch. Some mitigation strategies have been mentioned in this issue thread and in the [SheetJS Chat](https://sheetjs.com/chat) --- Hi everyone, Currently I am having missing data issue after I export the json data into the csv file. This is the first time it happens. Please refer to picture below: ![image](/attachments/c46896b1-2f7b-49bc-b6e4-95a16666d257) And the JSON response looks like below: `{"response":"Success","message":[{"HERO_CASE_ID":"H-2501156207","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653341432","TT_NUM":"1-26653341432","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:11:15.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:44:50.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:44:50.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T02:57:14.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"},{"HERO_CASE_ID":"H-2501151185","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653468021","TT_NUM":"1-26653468021","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:09:54.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:22:24.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:22:24.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T01:06:34.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"}]` My logic looks like below: JSON - Excel data mapping and manipulation: ``` function DataForReport2(apiData) { let reportData = apiData.map(data => ({ HERO_CASE_ID: data.HERO_CASE_ID, CUSTOMER_NAME: data.CUST_NAME, DESCRIPTION: (data?.DESCRIPTION ?? '').replaceAll('\n', '<br>').replace(/^[-]/, "'-"), HERO_LOGGER: data.HERO_LOGGER, HERO_LOGGER_ID: data.HERO_LOGGER_ID, HERO_STATE: data.HERO_STATE, AREA_LOCATION: data.AREA_LOCATION, CASE_STATUS: data.CASE_STATUS, CASE_TYPE: data.CASE_TYPE, VIP: data.VIP, PACKAGE_NAME: data.PACKAGE_NAME, PRODUCT: data.PRODUCT, SEGMENT: data.SEGMENT, CASE_OWNER: data.CASE_OWNER, GROUP: data.GROUP_, SR_NUM: data.SR_NUM, TT_NUM: data.TT_NUM, UPDATE_REMARKS: (data?.UPDATE_REMARKS ?? '').replaceAll('\n', '<br>').replace(/^[-]/, "'-"), CLOSURE_TYPE: data.CLOSURE_TYPE, CREATED_DATE: (data?.CREATED_DATE == null) ? moment(data.CREATED_DATE).format('DD/MM/YYYY h:mm:ss a') : null, MONTH_YEAR: data.MONTH_YEAR, AGING_CLOSED: data.AGING_CLOSED, CLOSED_DATE: (data?.CLOSED_DATE == null) ? moment(data.CLOSED_DATE).format('DD/MM/YYYY h:mm:ss a') : null, AGING_UNASSIGNED: data.AGING_UNASSIGNED, DATE_UNASSIGNED: (data?.DATE_UNASSIGNED == null) ? moment(data.DATE_UNASSIGNED).format('DD/MM/YYYY h:mm:ss a') : null, AGING_ASSIGNED: data.AGING_ASSIGNED, ASSIGNED_DATE: (data?.ASSIGNED_DATE == null) ? moment(data.ASSIGNED_DATE).format('DD/MM/YYYY h:mm:ss a') : null, AGING_INPROGRESS: data.AGING_INPROGRESS, INPROGRESS_DATE: (data?.INPROGRESS_DATE == null) ? moment(data.INPROGRESS_DATE).format('DD/MM/YYYY h:mm:ss a') : null, AGING_CANCELLED: data.AGING_CANCELLED, CANCELLED_DATE: (data?.CANCELLED_DATE == null) ? moment(data.CANCELLED_DATE).format('DD/MM/YYYY h:mm:ss a') : null, AGING: data.AGING, RATING: data.RATING, FLAG: data.FLAG, CKC: data.CKC, CKC_NUM: data.CKC_NUM, EXT_SYS_REF: data.EXT_SYS_REF, STAKEHOLDER_REF: data.STAKEHOLDER_REF })); return reportData; } ``` UI Logic `const getReport = async (type) => { await DashboardService.dailyReport(enqueueSnackbar, closeSnackbar, token, type).then(res => { console.log(res.data.message); if (res.status !== 200) return; let getFilename = (type) => { if (type === 'daily') return 'HERO-DAILY-REPORT.csv' if (type === 'weekly') return 'HERO-WEEKLY-REPORT.csv' if (type === 'current-month') return `HERO-MONTHLY-REPORT(${moment().format('MMMM')}).csv` if (type === 'last-month') return `HERO-MONTHLY-REPORT(${moment().subtract(1, 'months').format('MMMM')}).csv` if (type === 'last-3-month') return `HERO-MONTHLY-REPORT(${moment().subtract(3, 'months').format('MMMM')} - ${moment().format('MMMM')}).csv` if (type === 'last-6-month') return `HERO-MONTHLY-REPORT(${moment().subtract(5, 'months').format('MMMM')} - ${moment().format('MMMM')}).csv` else return 'HERO-REPORT.csv' } // const rows = DataForReport(res.data.message); const rows = DataForReport2(res.data.message); const fileName = getFilename(type); // create workbook and worksheet const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.json_to_sheet(rows, {range:1}); XLSX.utils.book_append_sheet(workbook, worksheet, "Reporting"); XLSX.writeFile(workbook, fileName) }) }` Please not that this logic is in React JS project.

@Aiman1017 we have exeactly the same problem, also with exporting to xlsx workbooks. Is it also for you that this error is only happening since a few days/ hours?

@Aiman1017 we have exeactly the same problem, also with exporting to xlsx workbooks. Is it also for you that this error is only happening since a few days/ hours?
Owner

Here is a simple smoke test using your data which seems to work correctly (it generates 2 data rows and the header row): https://jsfiddle.net/6v08fyz7/

Code (click to show)
var data = {"response":"Success","message":[{"HERO_CASE_ID":"H-2501156207","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653341432","TT_NUM":"1-26653341432","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:11:15.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:44:50.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:44:50.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T02:57:14.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"},{"HERO_CASE_ID":"H-2501151185","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653468021","TT_NUM":"1-26653468021","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:09:54.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:22:24.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:22:24.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T01:06:34.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"}]}
var ws = XLSX.utils.json_to_sheet(data.message);
var csv = XLSX.utils.sheet_to_csv(ws);
console.log(csv)

To be sure, data.message.length is 2 so the expected number of rows is 3. The actual output is shown below:

Result (click to show)
HERO_CASE_ID,CUST_NAME,DESCRIPTION,HERO_LOGGER,HERO_LOGGER_ID,HERO_STATE,AREA_LOCATION,CASE_STATUS,CASE_TYPE,VIP,PACKAGE_NAME,PRODUCT,SEGMENT,CASE_OWNER,GROUP_,SR_NUM,TT_NUM,UPDATE_REMARKS,CLOSURE_TYPE,CREATED_DATE,MONTH_YEAR,AGING_CLOSED,CLOSED_DATE,AGING_UNASSIGNED,DATE_UNASSIGNED,AGING_ASSIGNED,ASSIGNED_DATE,AGING_INPROGRESS,INPROGRESS_DATE,AGING_CANCELLED,CANCELLED_DATE,AGING,RATING,FLAG,CKC,CKC_NUM,EXT_SYS_REF,STAKEHOLDER_REF
H-2501156207,Khairul Fahmi Bin Mohd Faudzi,Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ,KHAIRUL FAHMI BIN MOHD FAUDZI,TM37246,Johor,Johor,IN-PROGRESS,Caution Report,,,Others,,,CSM HQ,1-26653341432,1-26653341432,,,2025-01-15T15:11:15.000Z,January 2025,,,1,2025-01-16T00:44:50.000Z,0,2025-01-16T00:44:50.000Z,0,2025-01-16T02:57:14.000Z,,,1,0,COMPLAINT,N,,,PRODUCT
H-2501151185,Khairul Fahmi Bin Mohd Faudzi,Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ,KHAIRUL FAHMI BIN MOHD FAUDZI,TM37246,Johor,Johor,IN-PROGRESS,Caution Report,,,Others,,,CSM HQ,1-26653468021,1-26653468021,,,2025-01-15T15:09:54.000Z,January 2025,,,1,2025-01-16T00:22:24.000Z,0,2025-01-16T00:22:24.000Z,0,2025-01-16T01:06:34.000Z,,,1,0,COMPLAINT,N,,,PRODUCT

@Aiman1017 @patriksimms At this point, we need more details to determine if there is an issue on the SheetJS side. Please join the SheetJS Chat

Here is a simple smoke test using your data which seems to work correctly (it generates 2 data rows and the header row): https://jsfiddle.net/6v08fyz7/ <details><summary><b>Code</b> (click to show)</summary> ```js var data = {"response":"Success","message":[{"HERO_CASE_ID":"H-2501156207","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653341432","TT_NUM":"1-26653341432","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:11:15.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:44:50.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:44:50.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T02:57:14.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"},{"HERO_CASE_ID":"H-2501151185","CUST_NAME":"Khairul Fahmi Bin Mohd Faudzi","DESCRIPTION":"Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ","HERO_LOGGER":"KHAIRUL FAHMI BIN MOHD FAUDZI","HERO_LOGGER_ID":"TM37246","HERO_STATE":"Johor","AREA_LOCATION":"Johor","CASE_STATUS":"IN-PROGRESS","CASE_TYPE":"Caution Report","VIP":null,"PACKAGE_NAME":"","PRODUCT":"Others","SEGMENT":null,"CASE_OWNER":null,"GROUP_":"CSM HQ","SR_NUM":"1-26653468021","TT_NUM":"1-26653468021","UPDATE_REMARKS":null,"CLOSURE_TYPE":null,"CREATED_DATE":"2025-01-15T15:09:54.000Z","MONTH_YEAR":"January 2025","AGING_CLOSED":null,"CLOSED_DATE":null,"AGING_UNASSIGNED":1,"DATE_UNASSIGNED":"2025-01-16T00:22:24.000Z","AGING_ASSIGNED":0,"ASSIGNED_DATE":"2025-01-16T00:22:24.000Z","AGING_INPROGRESS":0,"INPROGRESS_DATE":"2025-01-16T01:06:34.000Z","AGING_CANCELLED":null,"CANCELLED_DATE":null,"AGING":1,"RATING":0,"FLAG":"COMPLAINT","CKC":"N","CKC_NUM":"","EXT_SYS_REF":"","STAKEHOLDER_REF":"PRODUCT"}]} var ws = XLSX.utils.json_to_sheet(data.message); var csv = XLSX.utils.sheet_to_csv(ws); console.log(csv) ``` </details> To be sure, `data.message.length` is 2 so the expected number of rows is 3. The actual output is shown below: <details><summary><b>Result</b> (click to show)</summary> ```csv HERO_CASE_ID,CUST_NAME,DESCRIPTION,HERO_LOGGER,HERO_LOGGER_ID,HERO_STATE,AREA_LOCATION,CASE_STATUS,CASE_TYPE,VIP,PACKAGE_NAME,PRODUCT,SEGMENT,CASE_OWNER,GROUP_,SR_NUM,TT_NUM,UPDATE_REMARKS,CLOSURE_TYPE,CREATED_DATE,MONTH_YEAR,AGING_CLOSED,CLOSED_DATE,AGING_UNASSIGNED,DATE_UNASSIGNED,AGING_ASSIGNED,ASSIGNED_DATE,AGING_INPROGRESS,INPROGRESS_DATE,AGING_CANCELLED,CANCELLED_DATE,AGING,RATING,FLAG,CKC,CKC_NUM,EXT_SYS_REF,STAKEHOLDER_REF H-2501156207,Khairul Fahmi Bin Mohd Faudzi,Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.0220670909450544 br>GPS Longitude: 103.3060880871612 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Jalan tengku mariam kluang. ,KHAIRUL FAHMI BIN MOHD FAUDZI,TM37246,Johor,Johor,IN-PROGRESS,Caution Report,,,Others,,,CSM HQ,1-26653341432,1-26653341432,,,2025-01-15T15:11:15.000Z,January 2025,,,1,2025-01-16T00:44:50.000Z,0,2025-01-16T00:44:50.000Z,0,2025-01-16T02:57:14.000Z,,,1,0,COMPLAINT,N,,,PRODUCT H-2501151185,Khairul Fahmi Bin Mohd Faudzi,Caution Report: br>Issue To Report: Cable Sagging br> br>------Location Information------ br> br>State: Johor br>GPS Latitude: 2.04460423390855 br>GPS Longitude: 103.35164082829212 br> br>------Problem(s) reported------ br> br>Tegangkan kabel kendur. Kem batu 3 jalan mersing. ,KHAIRUL FAHMI BIN MOHD FAUDZI,TM37246,Johor,Johor,IN-PROGRESS,Caution Report,,,Others,,,CSM HQ,1-26653468021,1-26653468021,,,2025-01-15T15:09:54.000Z,January 2025,,,1,2025-01-16T00:22:24.000Z,0,2025-01-16T00:22:24.000Z,0,2025-01-16T01:06:34.000Z,,,1,0,COMPLAINT,N,,,PRODUCT ``` </details> @Aiman1017 @patriksimms At this point, we need more details to determine if there is an issue on the SheetJS side. Please join the [SheetJS Chat](https://sheetjs.com/chat)

@Aiman1017 are you using macOS & chromium based browser by any chance? weirdly it works for us in Safari/ Firefox and also chromium based on linux

@Aiman1017 are you using macOS & chromium based browser by any chance? weirdly it works for us in Safari/ Firefox and also chromium based on linux
Owner

@patriksimms Please join the SheetJS Chat and we can try to dig into the details

@patriksimms Please join the [SheetJS Chat](https://sheetjs.com/chat) and we can try to dig into the details
Owner

Thank you for joining the chat and helping diagnose the issue!

This is a Chromium bug.

Reproduction:

function make_obj() {
  var obj = ({});
  for(var i = 0; i < 4000000; ++i) obj[i + " " + i] = {idx: i};
  obj["!ref"] = 3;
  console.log(obj["!ref"]);
  return obj
}

var data = { Sheets: {}}; data.Sheets["abc"] = make_obj(); console.log(data.Sheets.abc["!ref"]);

This issue seems to be sensitive to the number of properties in the object

We will reopen this issue and re-close once Google fixes the bug.

Thank you for joining the chat and helping diagnose the issue! **This is a Chromium bug.** Reproduction: ```js function make_obj() { var obj = ({}); for(var i = 0; i < 4000000; ++i) obj[i + " " + i] = {idx: i}; obj["!ref"] = 3; console.log(obj["!ref"]); return obj } var data = { Sheets: {}}; data.Sheets["abc"] = make_obj(); console.log(data.Sheets.abc["!ref"]); ``` This issue seems to be sensitive to the number of properties in the object We will reopen this issue and re-close once Google fixes the bug.
sheetjs reopened this issue 2025-01-17 17:49:41 +00:00
Owner

This issue has been reported to Chromium: https://issues.chromium.org/issues/390568195

In the interim, force dense-mode worksheets by passing dense: true to json_to_sheet or read or other methods.

This issue has been reported to Chromium: https://issues.chromium.org/issues/390568195 In the interim, [force dense-mode worksheets](https://docs.sheetjs.com/docs/csf/sheet#dense-mode) by passing `dense: true` to `json_to_sheet` or `read` or other methods.
sheetjs pinned this 2025-01-17 18:27:35 +00:00
Author

Hello there Sheetjs Team,

Noted but I have solved the issue by moving the logic from Front-end portal to the Back-end server to resolved this issue as a temporary workaround.

When I am free, I'll try to add the "dense" property in my testing.

Hello there Sheetjs Team, Noted but I have solved the issue by moving the logic from Front-end portal to the Back-end server to resolved this issue as a temporary workaround. When I am free, I'll try to add the "dense" property in my testing.
Owner

It appears that this issue has been resolved on the Chrome side and there have been multiple releases since the bug was fixed. If this issue reappears, we can reopen the issue.

It appears that this issue has been resolved on the Chrome side and there have been multiple releases since the bug was fixed. If this issue reappears, we can reopen the issue.
Sign in to join this conversation.
No Milestone
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sheetjs/sheetjs#3273
No description provided.