Я пытаюсь получить данные json из файла xlsx, но наткнулся на странное поведение js-xlsx. Если у меня есть таблица с объединенными ячейками в заголовке, я получаю только первую строку данных на выходе из таблицы. Если я удалю эту строку вручную (в EXCEL) - то все данные получатся как надо. Если я разъединю эту ячейку вручную - еще раз: все данные в json.
Итак, проблема с объединенными ячейками, и задача состоит в том, чтобы пропустить его\избежать его при экспорте\удалить его\сделать что-то еще...
Я попытался удалить эту строку через «js-xlsx», получил некоторый код из принятого ответа SO, но это не помогает и кажется немного странным при работе с объединенными ячейками:
const XLSX = require('xlsx');
let workbook = XLSX.readFile('./downloads/wb_sales.xlsx');
var worksheet = workbook.Sheets[workbook.SheetNames[0]];
function ec(r, c){
return XLSX.utils.encode_cell({r:r,c:c});
}
function delete_row(ws, row_index){
var variable = XLSX.utils.decode_range(ws["!ref"])
for(var R = row_index; R < variable.e.r; ++R){
for(var C = variable.s.c; C <= variable.e.c; ++C){
ws[ec(R,C)] = ws[ec(R+1,C)];
}
}
variable.e.r--
ws['!ref'] = XLSX.utils.encode_range(variable.s, variable.e);
}
// trying to delete first row
delete_row(worksheet,0)
// here I get just the first row of data
console.log(XLSX.utils.sheet_to_json(worksheet));
Пробовал worksheet[!'merged']=''
- очищает ячейку, но статус слияния остается.
Пытался
var range = XLSX.utils.decode_range(worksheet['!ref']);
range.s.r = 1; // <-- skipping first row with merged cell, but not working either.
worksheet['!ref'] = XLSX.utils.encode_range(range);
Не хорошо. Тот же вывод.
Пробовал worksheet['A1']=worksheet['A2']
, он копирует содержимое, но слияние остается.
Относительно выше сказанного:
- Как удалить первую строку в этой задаче (не очищая содержимое ячеек, а удаляя)?
- Как разъединить объединенные ячейки?
- Как удалить объединенные ячейки (не очищая ячейку, а удаляя ее).
Лучи благодарности всем :)