批量导入人员个人属性
由 0x400 发布于
引入excel工具类
```
var _self = this;
if (!FileReader.prototype.readAsBinaryString) {
FileReader.prototype.readAsBinaryString = function (fileData) {
var binary = "";
var pt = this;
var reader = new FileReader();
reader.onload = function (e) {
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
//pt.result - readonly so assign binary
pt.content = binary;
pt.onload();
};
reader.readAsArrayBuffer(fileData);
}
}
window.ExcelUtils = {
_loadResource : function( callback ){
var uri = "/x_component_Template/framework/xlsx/xlsx.full.js";
var uri2 = "/x_component_Template/framework/xlsx/xlsxUtils.js";
COMMON.AjaxModule.load(uri, function(){
COMMON.AjaxModule.load(uri2, function(){
callback();
}.bind(this))
}.bind(this))
},
_openDownloadDialog: function(url, saveName){
/**
* 通用的打开下载对话框方法,没有测试过具体兼容性
* @param url 下载地址,也可以是一个blob对象,必选
* @param saveName 保存文件名,可选
*/
if( Browser.name !== 'ie' ){
if(typeof url == 'object' && url instanceof Blob){
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if(window.MouseEvent && typeOf( window.MouseEvent ) == "function" ) event = new MouseEvent('click');
else
{
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}else{
window.navigator.msSaveBlob( url, saveName);
}
},
export : function(array, fileName){
ExcelUtils._loadResource( function(){
data = xlsxUtils.format2Sheet(array, 0, 0, null);//偏移3行按keyMap顺序转换
var wb = xlsxUtils.format2WB(data, "sheet1", undefined);
var wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' };
var dataInfo = wb.Sheets[wb.SheetNames[0]];
var widthArray = [];
array[0].each( function( v, i ){
widthArray.push( {wpx: 100} );
var at = String.fromCharCode(97 + i).toUpperCase();
var di = dataInfo[at+"1"];
// di.v = v;
// di.t = "s";
di.s = { //设置副标题样式
font: {
//name: '宋体',
sz: 12,
color: {rgb: "#FFFF0000"},
bold: true,
italic: false,
underline: false
},
alignment: {
horizontal: "center" ,
vertical: "center"
}
};
}.bind(this));
dataInfo['!cols'] = widthArray,
ExcelUtils._openDownloadDialog(xlsxUtils.format2Blob(wb), fileName +".xlsx");
})
},
import : function( file, callback, dateColArray ){
ExcelUtils._loadResource( function(){
var reader = new FileReader();
var workbook, data;
reader.onload = function (e) {
//var data = data.content;
if (!e) {
data = reader.content;
}else {
data = e.target.result;
}
workbook = XLSX.read(data, { type: 'binary' });
//wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
//wb.Sheets[Sheet名]获取第一个Sheet的数据
var sheet = workbook.SheetNames[0];
if (workbook.Sheets.hasOwnProperty(sheet)) {
// fromTo = workbook.Sheets[sheet]['!ref'];
// console.log(fromTo);
debugger;
var worksheet = workbook.Sheets[sheet];
if( dateColArray && typeOf(dateColArray) == "array" ){
var rowCount = worksheet['!range'].e.r;
for( var i=0; i<dateColArray.length; i++ ){
for( var j=1; j<=rowCount; j++ ){
var cell = worksheet[ dateColArray[i]+j ];
if( cell ){
delete cell.w; // remove old formatted text
cell.z = 'yyyy-mm-dd'; // set cell format
XLSX.utils.format_cell(cell); // this refreshes the formatted text.
}
}
}
}
var json = XLSX.utils.sheet_to_json( worksheet );
//var data = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheet], {dateNF:'YYYY-MM-DD'});
debugger;
if(callback)callback(json);
// console.log(JSON.stringify(json));
// break; // 如果只取第一张表,就取消注释这行
}
// for (var sheet in workbook.Sheets) {
// if (workbook.Sheets.hasOwnProperty(sheet)) {
// fromTo = workbook.Sheets[sheet]['!ref'];
// console.log(fromTo);
// var json = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
// console.log(JSON.stringify(json));
// // break; // 如果只取第一张表,就取消注释这行
// }
// }
};
reader.readAsBinaryString(file);
})
}
};
```
定义一个导入人员属性方法
```
//创建个人属性
/*
*person:员工账号(唯一编码)
*name:个人属性名称
*attributeList:个人属性值
*description:个人属性描述(可为空)
*/
this.define("setAttribute", function( json ){
for(var i=0;i<json.length;i++){
//console.log("setAttribute=="+json[i].name);
debugger;
var data = {};
data["description"] = json[i].description;
data["name"] = json[i].name;
data["unique"] = "";
data["distinguishedName"] = "";
data["person"] = json[i].person;
data["orderNumber"] = "";
data["attributeList"] = [json[i].attributeList];
//console.log("data=="+JSON.stringify(data));
//调用创建个人属性接口
var action = o2.Actions.load("x_organization_assemble_control");
action.PersonAttributeAction.create(//平台封装好的方法
data,//body请求参数
function( json ){ //服务调用成功的回调函数, json为服务传回的数据
data = json.data; //为变量data赋值
}.bind(this),
function( json ){ //服务调用失败的回调函数, json为服务传回的数据
data = json.data; //为变量data赋值
}.bind(this),
false //同步执行
);
}
alert("导入成功")
});
```
增加一个按钮,按钮的click方法
```
//this.include("formPerson", function(){
// this.selectFile( );
//})
var uploadFileAreaNode = new Element("div");
var html = "<input name=\"file\" type=\"file\" accept=\"csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\" />";
uploadFileAreaNode.set("html", html);
var fileUploadNode = uploadFileAreaNode.getFirst();
fileUploadNode.addEvent("change", function () {
var files = fileNode.files;
if (files.length) {
var file = files.item(0);
if( file.name.indexOf(" ") > -1 ){
this.page.getApp().notice("上传的文件不能带空格", "error");
return false;
}
// formData = new FormData();
// formData.append('file', this.file);
//导入
ExcelUtils.import( file, function(json){
debugger;
//console.log("json=="+JSON.stringify(json));
this.include("formPerson", function(){
this.setAttribute(json); //写入个人属性方法
})
}.bind(this), ["E","F"] );
}
}.bind(this));
var fileNode = uploadFileAreaNode.getFirst();
fileNode.click();
```
评论