会有多个具有相同字段的excel文件,但它们的对齐方式可能不同。例如,在第一个excel文件中,“价格”列可能在第一个序列中,但是在第二个文件中,它可能在第三个序列中。
因此,如果我要让用户在字段名称下输入序列(这样我就知道字段的顺序),我是否只能按照要使用Javascript或Node.js进行JSON转换的顺序来转换这些字段? 如果可以,怎么办?
示例:
这是客户编号。 1的数据: 以此方向存储 https://imgur.com/yIgOF8w
这是客户编号。 2的数据: 以此方向存储。我不会使用1个额外的数据,这些数据与第一个数据不同。 https://imgur.com/lY96c7J
我想完全按照客户端编号解析它。 1个已存储。但是我有很多品种。因此,如上所述,如果要获取某些字段的列号,可以使用第一个客户端以确切的格式获取它,然后像这样转换为JSON。
答案 0 :(得分:1)
您可以为此目的使用模块excel js,它具有很多不错的功能。
我已进行了更新,可以将列顺序传递给readValues函数。
例如:
var excel = require('exceljs');
var wb = new excel.Workbook();
var path = require('path');
var client1Path = path.resolve(__dirname, 'client1_data.xlsx');
var client2Path = path.resolve(__dirname, 'client2_data.xlsx');
function readValues(filePath, columnNumbers) {
let columnNames = Object.entries(columnNumbers).reduce((a, [key,value]) => {
a[value] = key;
return a;
}, []);
return wb.xlsx.readFile(filePath).then( () => {
var worksheet = wb.getWorksheet("Sheet1");
var values = [];
worksheet.eachRow((row) => {
let obj = row.values.reduce((o, v, index) => {
if (columnNames[index]) o[columnNames[index]] = v;
return o;
}, {});
values.push(obj);
});
return values;
});
}
async function testReadData() {
try {
let client1Data = await readValues(client1Path, { price: 1, name: 2, country: 3});
console.log('testReadData: Client 1 data: ', client1Data);
let client2Data = await readValues(client2Path, { price: 2, name: 1, country: 4});
console.log('testReadData: Client 2 data: ', client2Data);
} catch (error) {
console.error('testReadData: Error occurred: ', error);
}
}
testReadData();
我使用的数据与您的示例中的数据相同(现已更正)。
例如
客户端1数据:
$50 Jack USA
$30 Harold USA
客户端2数据:
Jack $50 Florida USA
Harold $30 California USA
输出将类似于:
testReadData:客户端1数据:
[ { price: '$50', name: 'Jack', country: 'USA' },
{ price: '$30', name: 'Harold', country: 'USA' } ]
testReadData:客户端2数据:
[ { name: 'Jack', price: '$50', country: 'USA' },
{ name: 'Harold', price: '$30', country: 'USA' } ]