Ошибка в коде: удаление повторяющегося значения из листа xlsx в node.js - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь удалить дублирующиеся значения из листа xlsx, для которого я написал функцию «removeDuplicate», которая принимает лист xlsx в качестве аргумента;

Ниже приведен мой код для removeDuplicate. Я пробовал этот код на консолидля массива Json, и он дает правильное значение, но когда я пытаюсь поместить результат в лист xlsx, он все еще сохраняет повторяющиеся значения.

const XLSX = require('xlsx')
var json2xls = require('json2xls');
var removeDuplicate=((worksheet)=>{




var xlsxJson = XLSX.utils.sheet_to_json(worksheet);
var jsonString = JSON.stringify(xlsxJson);
var xlsxJson1 = JSON.parse(jsonString);
console.log(xlsxJson1[0]['Report Status'])
var i;
for (let i = 0; i < xlsxJson1.length; i++) {
{
  for(let j=i+1;j<xlsxJson1.length; j++){
    if(xlsxJson1[i]['TicketName']===xlsxJson1[j]['TicketName'] 
    && xlsxJson1[i]['Date']==xlsxJson1[j]['Date'] 
    && xlsxJson1[i]['In_Input']===xlsxJson1[j]['In_Input']
    && xlsxJson1[i]['In_Result']===xlsxJson1[j]['In_Result']
    &&xlsxJson1[i]['Call_Api']===xlsxJson1[j]['Call_Api']
    && xlsxJson1[i]['Report Status']===xlsxJson1[i]['Report Status']){
      xlsxJson1[j]=" ";
      console.log(xlsxJson1[j])
    }
    else if((xlsxJson1[i]['TicketName']===xlsxJson1[j]['TicketName']
    && xlsxJson1[i]['Date']==xlsxJson1[j]['Date']) 
    && (xlsxJson1[i]['In_Input']===xlsxJson1[j]['In_Input']
    || xlsxJson1[i]['In_Result']===xlsxJson1[j]['In_Result']
    || xlsxJson1[i]['Call_Api']===xlsxJson1[j]['Call_Api']
    || xlsxJson1[i]['Report Status']===xlsxJson1[i]['Report Status'])){
      xlsxJson1[i]=xlsxJson1[j]
      xlsxJson1[j]=" ";
      console.log(xlsxJson1[j])
    }
    else{
      console.log(xlsxJson1[j])
      continue;

    }
  }
}
}
return xlsxJson;
//
return json2xls(xlsxJson1)
})

module.exports=removeDuplicate;

Ниже приведен мой код, где эта функция вызывается вapp.js: aap.js

ws = XLSX.utils.sheet_add_json(ws, ticketNameArr,{origin:-1, skipHeader:true});


removeDuplicate(ws)
                    // XLSX.utils.book_append_sheet(wb, ws) // sheetAName is name of Worksheet

                    XLSX.writeFile(wb, 'DailyTicketSatus.xlsx')
                    // XLSX.writeFile(wb, 'DT.xlsx')

[{Дата: 10.09.2019, TicketName: 'ABC', In_Input: 'TRUE', Input_Time: 20:08, In_Result: 'FALSE', Call_Api:«Ложь», «Состояние отчета»: «Нет файлов журнала», Комментарий: «Билет не был обработан», Статус: «Частичный сбой»}, {Дата: 11.10.19, Имя тикета: «BCD», In_Input: «ЛОЖЬ», In_Result: «FALSE», Call_Api: «False», «Статус отчета»: «Нет файлов журнала», Комментарий: «Билет не был выбран», Статус: «Ошибка»}, {Дата: 11.10.19, TicketName: 'BCD ', In_Input:' TRUE ', Input_Time: 43743.37598236111, In_Result:' FALSE ', Call_Api: «Ложь», «Статус отчета»: «Нет файлов журнала», Комментарий: «Билет не был обработан», Статус: «Частичная ошибка»}]

Теперь ожидаемый результат: {Дата: 10.09.2019, TicketName: «ABC», In_Input: «TRUE», Input_Time: 20:08, In_Result: «FALSE», Call_Api: «False», «Состояние отчета»: «Нет файлов журнала»,Комментарий: «Билет не был обработан», Статус: «Частичная ошибка»}, {Дата: 11.10.19, TicketName: «BCD», In_Input: «FALSE», In_Result: «FALSE», Call_Api: «False», «Report»Статус »:« Нет файлов журнала », Комментарий:« Билет не был выбран », Статус:« Ошибка »}, {" "}. Что я получаю в консоли. Но я не могу записать это в файл xlsx. Я попытался json2xlsx, но это не сработало. Как я могу записать измененные данные в свой лист xlxs.

1 Ответ

0 голосов
/ 18 октября 2019

Вы можете удалить дубликаты, вернуть данные JSON, а затем заменить существующий лист. Приведенный ниже код сделает это для входного файла, а затем запишет в выходной файл.

Если вы хотите изменить файл на месте, просто задайте имя выходного файла, совпадающее с именем входного файла. Убедитесь, что файл не заблокирован!

var removeDuplicate=((worksheet)=> {

    var xlsxJson = XLSX.utils.sheet_to_json(worksheet);

    for (let i = 0; i < xlsxJson.length; i++) {
        for(let j=i+1;j<xlsxJson.length; j++) {
            if(xlsxJson[i]['TicketName']===xlsxJson[j]['TicketName'] 
                && xlsxJson[i]['Date']==xlsxJson[j]['Date'] 
                && xlsxJson[i]['In_Input']===xlsxJson[j]['In_Input']
                && xlsxJson[i]['In_Result']===xlsxJson[j]['In_Result']
                && xlsxJson[i]['Call_Api']===xlsxJson[j]['Call_Api']
                && xlsxJson[i]['Report Status']===xlsxJson[i]['Report Status']) {
                xlsxJson[j]=" "; // Mark row as duplicate
            }
            else if((xlsxJson[i]['TicketName']===xlsxJson[j]['TicketName']
            && xlsxJson[i]['Date']==xlsxJson[j]['Date']) 
            && (xlsxJson[i]['In_Input']===xlsxJson[j]['In_Input']
            || xlsxJson[i]['In_Result']===xlsxJson[j]['In_Result']
            || xlsxJson[i]['Call_Api']===xlsxJson[j]['Call_Api']
            || xlsxJson[i]['Report Status']===xlsxJson[i]['Report Status'])) {
                xlsxJson[i]=xlsxJson[j]
                xlsxJson[j]=" "; // Mark row as duplicate
            }
            else {
                continue;
            }
        }

    }

    // Filter out duplicate rows.
    xlsxJson = xlsxJson.filter(row => (row + "").trim());
    return xlsxJson;    
})

const inputFile = "tickets.xlsx";
const outputFile = "output.xlsx";
const sheetName = "Sheet1" // <-- Change to the actual sheet name.
const workbook = XLSX.readFile(inputFile);
let sheetJson = removeDuplicate(workbook.Sheets[sheetName]);

// Overwrite worksheet
workbook.Sheets[sheetName] = XLSX.utils.json_to_sheet(sheetJson);

XLSX.writeFile(workbook, outputFile); 
...