node.js - 代码错误:从 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 表。
解决方案
您可以删除重复项,返回 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);
推荐阅读
- python - 检查日期是否在熊猫合并的范围内
- javascript - 如果用户在 AWS Cognito TOTP AssociateSoftwareToken MFA 有效禁用后退出应用程序
- ruby-on-rails - 在rails中以单一形式更新表中的多个记录?
- kotlin - 2x NavHostFragments 在 LayoutInspector 中可见,但在我的布局中只有 1 个
- dependency-injection - 在 Yii2 中我应该在哪里设置 DI 容器?
- angular - 在 Angular 组件中使用外部 SVG 进行样式设置
- r - 在其他列表中搜索列表
- reactjs - 使用 immer 中的生产更新数组值
- javascript - 如何批处理行数据并发送单个 JSON 有效负载?
- javascript - 包含 json 括号的字符串?