本文实现的Demo本身为付费资源,请选择使用。如有需要可以联系我QQ3508551694,同时提供定制
上面的基本概念是完全仿照Excel本身结构的(如果你用VB脚本操作过Excel就知道了),下面的部分会用代码段来展示这些概念的具体内涵(如果你对JavaScript的对象结构了解的话,你就会知道JavaScript操作数据结构是多么方便了,远远比C++方便,因为成员是动态的,动态的,动态的。。。。。)
对于懂JavaScript语言的人来说,只要一给你结构,剩下的怎么操作基本就不用案例介绍了(但是对我这样的初学者来说最好还是有Demo直接点,呵呵)
{
v: 'C7SKY',
w: 'C7SKY',
t: 's',
....
}
第一种是字符串形式的索引:worksheet['A1']返回Excel第一行第一列的内容
第二种是JavaScript Object对象作为索引:这种对象只有行列两个成员,每个成员赋值为整数
const cell = wb['C7'];
const cell = wb[XLSX.utils.encode_cell({ r: 7, c: 2 })]; // 等同于 wb['C7']
cell.v = '小影志';delete cell.w;
import XLSX from 'xlsx';const wb = XLSX.readFile('path/to/file.xlsx'); // 返回 workbook
{
SheetNames: ['Sheet1', 'Sheet2'],
Sheets: {
'Sheet1': { ... },
'Sheet2': { ... }
},
Props: { ... },
....
}
const ws = wb.Sheets[workbook.SheetNames[0]]; // 返回 worksheet
{ '!ref': 'A1:C7', A1: { ... }, B1: { ... }, ....}
//range
const range = xlsx.utils.decode_range(worksheet['!ref']);//将A1:C7转换为json格式
console.log('' + JSON.stringify(range));//{"s":{"c":0,"r":0},"e":{"c":3,"r":13}}
const range = xlsx.utils.decode_range(worksheet['!ref']);
console.log('range:' + JSON.stringify(range));//{"s":{"c":0,"r":0},"e":{"c":3,"r":13}}
console.log('sheet_to_json:' + JSON.stringify(xlsx.utils.sheet_to_json(worksheet)));
XLSX.writeFile(wb, 'output.xlsx');
下面的例子就是一个典型的例子:
Node.js服务端app.js代码
var http = require("http");
var fs = require("fs");
var xlsx = require("xlsx");
function onRequest(request, response){
console.log("Request received.");
response.writeHead(200,{"Content-Type":'text/plain','charset':'utf-8','Access-Control-Allow-Origin':'*','Access-Control-Allow-Methods':'PUT,POST,GET,DELETE,OPTIONS'});//可以解决跨域的请求
//如果是xls这种老版本的Excel2007文件,要记得另存为xlsx类型再使用!否则报错!
var workbook = xlsx.readFile("柱状图-数据.xlsx");
var first_sheet_name = workbook.SheetNames[0];
console.log('' + first_sheet_name);
//worksheet
var worksheet = workbook.Sheets[first_sheet_name];
//range
const range = xlsx.utils.decode_range(worksheet['!ref']);
console.log('range:' + JSON.stringify(range));//{"s":{"c":0,"r":0},"e":{"c":3,"r":13}}
console.log('sheet_to_json:' + JSON.stringify(xlsx.utils.sheet_to_json(worksheet)));
var sheet_to_json = xlsx.utils.sheet_to_json(worksheet);
console.log('sheet_to_json:' + JSON.stringify(sheet_to_json));
console.log('sheet_to_json length:' + sheet_to_json.length);
console.log('typeof sheet_to_json[0]:' + JSON.stringify(sheet_to_json[0]));
//下面的这个结构是百度EChart给的标准Demo的结构,我们拿过来把数据替换成我们从Excel中读取到的数据
var option = {
"title": {
"text": "销量分布直方图"
},
"tooltip": {},
"legend": {
"data": ["销量"]
},
"xAxis": { "data": ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] },
"yAxis": {},
"series": [{
"name": "销量1",
"type": "bar",
"data": [5, 20, 36, 10, 10, 20, 100]
}]
};
for (let i = 0; i < sheet_to_json.length ; ++i) {
console.log(sheet_to_json[i].date);
option.xAxis.data[i] = sheet_to_json[i].date;
option.series[0].data[i] = sheet_to_json[i].count1;
}
console.log('option:' + JSON.stringify(option));
response.write(JSON.stringify(option));
response.end();
}
http.createServer(onRequest).listen(8080);
console.log("Server has started.port on 8080\n");
Excel数据文件
全部代码:
有需要的可以联系我QQ3508551694