首页 > 解决方案 > 代码错误:从 node.js 中的 xlsx 表中删除重复值

问题描述

我正在尝试从 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')

[{ Date: 10.09.2019, TicketName: 'ABC', In_Input: 'TRUE', Input_Time: 20:08, In_Result: 'FALSE', Call_Api: 'False', 'Report Status': 'No log files', Comment :'票证未处理',状态:'部分失败'},{日期:11.10.19,票证名称:'BCD',In_Input:'FALSE',In_Result:'FALSE',Call_Api:'False','报告状态':'没有日志文件',评论:'票未被拾取',状态:'失败'},{日期:11.10.19,票名:'BCD',In_Input:'TRUE',Input_Time:43743.37598236111,In_Result:' FALSE',Call_Api:'False','报告状态':'无日志文件',评论:'票证未处理',状态:'部分失败'}]

现在预期的输出是: { Date: 10.09.2019, TicketName: 'ABC', In_Input: 'TRUE', Input_Time: 20:08, In_Result: 'FALSE', Call_Api: 'False', 'Report Status': 'No日志文件',评论:'票证未处理',状态:'部分失败'},{日期:11.10.19,票证名称:'BCD',In_Input:'FALSE',In_Result:'FALSE',Call_Api:'False ', '报告状态': '无日志文件', 评论: '票未被拾取', 状态: '失败' }, { "" }。我在控制台得到的。但我无法在 xlsx 文件中写入。我尝试了 json2xlsx,但它没有工作。我怎样才能将修改后的数据写入我的 xlxs 表。

标签: node.jsnpmxlsx

解决方案


您可以删除重复项,返回 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); 

推荐阅读