#javascript #node.js #arrays #excel #xlsx
#javascript #node.js #массивы #excel #xlsx
Вопрос:
Я читаю лист, используя расширение SheetJS (xlsx) для чтения из файла Excel, например:
var workbook = XLSX.readFile(req.file.path);
var sheet_name_list = workbook.SheetNames;
let sheet_json = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
Когда я запускаю console.log(sheet_json)
, я получаю:
[
{
'Question*': 'Question 1',
'Number of Choices*': 2,
'Choice A*': 'Apple',
'Choice B*': 'Pineapple',
'Answer (A/B/C/D)*': 'A',
'Correct Marking*': 1,
'Negative marking*': 0
},
{
'Question*': 'Question 2',
'Number of Choices*': 3,
'Choice A*': 'Car',
'Choice B*': 'Bike',
'Choice C': 'Truck',
'Answer (A/B/C/D)*': 'C',
'Correct Marking*': 1,
'Negative marking*': 1
}
]
Теперь я перебираю массив sheet_json и не могу проверить свойства, результат такой:
// i is the index of iterator. o is the object iterated
let sn = ["Question*", "Number of Choices*"]
let props = Object.keys(sheet_json[i]);
console.log(props); //===> false
console.log(props.findIndex(o=>o==sn[1])) //===> false
console.log(o.hasOwnProperty(sn[1])); //===> false
console.log("Number of Choices*" in o); //===> false
console.log(sn[1] in sheet_json[i]); //===> false
console.log(props.includes(sn[1].trim().toString())); //===> false
console.log(o["Number of Choices*"]); //===> undefined
console.log(o[sn[1]]!==undefined); //===> false
Почему все отображается как неопределенное или ложное? Пожалуйста, помогите.
node -v
: версия 13.14.0
npm -v
: 6.14.4
xlsx
: 0.16
Вот также файл Excel: СКАЧАТЬ
Ответ №1:
Я попытался воспроизвести его здесь https://jsfiddle.net/t4ocdw67 /.
sheet_json=[{...},{...}];
for(i in sheet_json)
{
let o = sheet_json[i];
let sn = ["Question*", "Number of Choices*"]
.... //more code here
}
Кажется, все работает нормально, возможно, проблема с итерационной частью
Комментарии:
1. Вы не реплицировали его полностью. Пожалуйста, попробуйте прочитать его через зависимость sheetjs, тогда он будет полностью реплицирован. Кроме того, использование простого объекта JSON не создает проблемы, преобразование листа в json создает проблему.
2. Я попробовал это с помощью зависимости sheetjs. Преобразование листа в JSON — это не совсем проблема, я считаю, что проблема в кодировании . Наш обычный символ пробела (UTF8: x20) не равен символу пробела (UTF8: xc2xa0) в строке с помощью преобразования sheetjs. Чтобы воспроизвести это, вы можете скопировать текст из консоли терминала и использовать ссылку , чтобы проверить и найти другую кодировку UTF8. Также именно поэтому вы можете сделать все это для любого свойства без пробелов. Вы можете использовать массив props, полученный из sheet_json, с той же кодировкой.
3. Хорошо! Это имеет смысл. Но использование toString() при создании массива ключей также не помогает. Я попробую пару модулей кодировки utf-8, а затем сообщу. Между тем, если вы знаете решение, вы можете опубликовать его здесь!
4. Создал новый лист (проблема заключалась в пробелах), исправил проблему, проверил ее на упомянутом вами веб-сайте, и вы были правы! Пробелы между словами имели разные символы Юникода.