You are here

用nodejs + xlsx操作excel,合并单元格

作者:亚艾元技术部

 客户提供了很多的数据,word格式的,里面数据格式都是表格,wojiang 数据拷贝到excel表里面以后,有的数据占3行,有的占据1行。实际占据3行的数据,应该占据1行才对。

   我以前是用手工给客户处理的,当时有几万条数据,手工给他们合并了,花了1星期多的时间,很是费力,中间还不休息。

   这次客户又把数据给了我word的格式,数据量也有几千条需要我手工的合并整理。手工整理合并了1000条以后,我决定写个程序,都说python处理excel表很方便。可惜我不会啊。

   我选择了熟悉的nodejs, 还有xlsx库。来完成我要做的操作。这是关键的代码:

let filePath = `D:\\nodejs\\opexcel\\public\\excel\\bcsb.xlsx`;
let workbook = xlsx.readFile(filePath); //workbook就是xls文档对象

let sheetNames = workbook.SheetNames; //获取表明

let sheet = workbook.Sheets[sheetNames[0]]; //通过表明得到表对象

var data =xlsx.utils.sheet_to_json(sheet);  

let last_item = null;
let newdata = [];
let i = 0;
for(let j = 0,len=data.length; j < len; j++) {
    let item = data[j];

	// 清除空格。
	let xuhao = item["序号"] || "";
	xuhao = xuhao.toString().trim();

	if(xuhao != ""){
		item["序号"] = xuhao;
		if(last_item){
			newdata.push(last_item);
		}
		last_item = item;
	 }else{
		let mincheng = item["名称"] || "";
		let fangfa = item["方法"] || "";
		let shuoming = item["说明"] || "";
		if(mincheng != ""){
			last_item["名称"]   = last_item["名称"] + " "  + mincheng;
		}
		if(fangfa != ""){
		   last_item["方法"]   = last_item["方法"] + ";\n "  + fangfa;
		}  
		if(shuoming != ""){
			last_item["说明"]   = last_item["说明"] + " "  + shuoming;
		}                  
	}
	 //console.log(typeof index) 
}
if(last_item){
	newdata.push(last_item);
}

const ws = xlsx.utils.json_to_sheet(newdata);
const wb = xlsx.utils.book_new();
xlsx.utils.book_append_sheet(wb, ws, "Sheet1");     

xlsx.writeFile(wb, `D:\\nodejs\\opexcel\\public\\excel\\new_bcsb.xlsx`)

      

 

   我先用xlsx库读取我给定的excel文件,将其转为json格式,使用js的数组循环操作。当序号一列跨行的时候,后续几行数据,追加过来,这样就合并了单元格。

   重新合并好的数据,再以excel的格式输出。保存到一个新的文件上面来。

   当然,我这里使用了koa,在浏览器上面,每次访问这个页面,这个操作就会执行一次。几十个这样的文件,一个一个的放过来,执行,生成新的文件,虽然有点笨,但是与原来的方式相比,节省了大量的手工整理的时间。


论坛: