客户端对象模型之Excel数据导入到列表
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="jquery-1.6.2.min.js"></script> <script type="text/javascript"> $(function () { $("#importbutton").attr("disabled", "disabled"); ExecuteOrDelayUntilScriptLoaded(SearchExist, 'sp.js'); }) function SearchExist(itemId) { var projectId = getQueryString('ProjectID'); if (projectId == null || projectId == 'null' || projectId == '') { alert("请通过项目信息来导入工作项!"); return; } var siteUrl = _spPageContextInfo.webServerRelativeUrl; clientContext = new SP.ClientContext(siteUrl); oList = clientContext.get_web().get_lists().getByTitle('项目工作项'); var camlQuery = new SP.CamlQuery(); camlQuery.set_viewXml( '<View><Query>' + '<Where>' + '<Eq>' + '<FieldRef Name=\'Project\' LookupId=\'TRUE\'/><Value Type=\'Lookup\'>' + projectId + '</Value>' + '</Eq>' + '</Where></Query>' + '</View>' ); this.collListItem = oList.getItems(camlQuery); clientContext.load(collListItem); clientContext.executeQueryAsync( Function.createDelegate(this, this.onSearchQuerySucceeded), Function.createDelegate(this, this.onSearchQueryFailed) ); } function waring() { var filePath = $('input[type=file]').val(); if (filePath == "") { alert('请先上传文件'); return; } var fileText = filePath.substring(filePath.lastIndexOf("."), filePath.length); var fileName = fileText.toLowerCase(); if ((fileName != '.xls')) { alert("对不起,系统仅支持上传97-2003格式的Excel文档"); return; } else { $("#importbutton").attr("disabled", "disabled"); getCount(filePath); } } function getCount(filePath) { var rs = null; var cn = null; try { cn = new ActiveXObject("ADODB.Connection"); var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Persist Security Info=False;Extended Properties=Excel 8.0;" cn.Open(strConn); rs = new ActiveXObject("ADODB.Recordset"); var SQL = "select * from [Sheet1$]"; rs.Open(SQL, cn); if (rs.bof) { alert('没有可用的数据'); $("#importbutton").removeAttr("disabled"); return; } } catch (e) { alert("请确保是97-2003的Excel文档,并且已将本站点添加到ie的信任站点中,启用所有的ActiveX的安全设置。"); $("#importbutton").removeAttr("disabled"); return; } if (!rs.bof) { importdata = new Map(); hasrundata = new Array(); datarelationship = new Map(); dictionary = new Map(); errorlog = new Map(); total = 0; $("#importLog").html(""); rs.MoveFirst() while (!rs.eof) { var task = new Array(); var title = rs.fields(0).value.trim(); if (title != null && title != 'null' && title != '') { total++; for (var i = 0; i != rs.fields.count; ++i) { try { task[i] = rs.fields(i).value.trim(); } catch (e) { task[i] = rs.fields(i).value; } } if (!dictionary.ContainsKey(title) && !existData.ContainsKey(title)) { dictionary.set(title, task); } else { var messagespan = document.createElement("span"); $(messagespan).html("工作项[<span style='font-weight:bold;'>" + title + '</span>]名称重复,取消导入'); $(messagespan).addClass("spanerror"); var br = document.createElement("br"); $(messagespan).appendTo($("#importLog")); $(br).appendTo($("#importLog")); } } rs.MoveNext(); } } rs.Close(); cn.Close(); success = 0; error = 0; $("#importLog").html(); for (var i = 0; i < dictionary.size() ; i++) { var arr = dictionary.get(dictionary.keys[i]); dataAnalysis(dictionary.keys[i], arr); } setTimeout(setsummarymessage, 3000); } function dataAnalysis(title, arr) { title = title.trim(); if (arr != null && arr != '' && arr != 'null')//说明用户的Excel中是存在这个任务的 { if (title == arr[4] || title == arr[5]) { GetErrors(title); return; } if (!checktasktitleran(title)) { //当条目的父级任务和前置任务都为空的时候,直接将条目加到新的集合中 if ((arr[4] == null || arr[4] == '' || arr[4] == 'null') && (arr[5] == null || arr[5] == '' || arr[5] == 'null')) { hasrundata[hasrundata.length] = title; createListItem(arr); }//前置任务为空,父级任务不为空的时候 else if ((arr[4] == null || arr[4] == '' || arr[4] == 'null') && (arr[5] != null && arr[5] != '' && arr[5] != 'null')) { if (datarelationship.ContainsKey(arr[5])) { var backdata = datarelationship.get(arr[5]); if (!backdata.ContainsKey(title)) { backdata.set(title, title); datarelationship.set(arr[5], backdata); } } else { var backdata = new Map(); backdata.set(title, title); datarelationship.set(arr[5], backdata); } if (!existData.ContainsKey(arr[5])) { if (!dictionary.ContainsKey(arr[5])) { GetErrors(title); } if (errorlog.ContainsKey(arr[5])) { GetErrors(title); } } else { hasrundata[hasrundata.length] = title; createListItem(arr); } }//父级任务任务为空,前置任务不为空的时候 else if ((arr[5] == null || arr[5] == '' || arr[5] == 'null') && (arr[4] != null && arr[4] != '' && arr[4] != 'null')) { if (datarelationship.ContainsKey(arr[4])) { var backdata = datarelationship.get(arr[4]); if (!backdata.ContainsKey(title)) { backdata.set(title, title); datarelationship.set(arr[4], backdata); } } else { var backdata = new Map(); backdata.set(title, title); datarelationship.set(arr[4], backdata); } if (!existData.ContainsKey(arr[4])) { if (!dictionary.ContainsKey(arr[4])) { GetErrors(title); } if (errorlog.ContainsKey(arr[4])) { GetErrors(title); } } else { hasrundata[hasrundata.length] = title; createListItem(arr); } }//父级任务和前置任务都不为空的时候 else if ((arr[5] != null && arr[5] != '' && arr[5] != 'null') && (arr[4] != null && arr[4] != '' && arr[4] != 'null')) { if (datarelationship.ContainsKey(arr[4])) { var backdata = datarelationship.get(arr[4]); if (!backdata.ContainsKey(title)) { backdata.set(title, title); datarelationship.set(arr[4], backdata); } } else { var backdata = new Map(); backdata.set(title, title); datarelationship.set(arr[4], backdata); } if (datarelationship.ContainsKey(arr[5])) { var backdata = datarelationship.get(arr[5]); if (!backdata.ContainsKey(title)) { backdata.set(title, title); datarelationship.set(arr[5], backdata); } } else { var backdata = new Map(); backdata.set(title, title); datarelationship.set(arr[5], backdata); } if (existData.ContainsKey(arr[4]) && existData.ContainsKey(arr[5])) { hasrundata[hasrundata.length] = title; createListItem(arr); } else { var flagtemp = false; var flagtemp1 = false; if (!existData.ContainsKey(arr[4])) { if (!dictionary.ContainsKey(arr[4])) { flagtemp = true; } if (errorlog.ContainsKey(arr[4])) { flagtemp1 = true; } } if (!existData.ContainsKey(arr[5])) { if (!dictionary.ContainsKey(arr[5])) { flagtemp = true; } if (errorlog.ContainsKey(arr[5])) { flagtemp1 = true; } } if (flagtemp) { GetErrors(title); } if (flagtemp1) { GetErrors(title); } } } } } } function GetErrors(errortitle) { if (!errorlog.ContainsKey(errortitle)) { var messagespan = document.createElement("span"); $(messagespan).html("工作项[<span style='font-weight:bold;'>" + errortitle + '</span>]导入失败'); $(messagespan).addClass("spanerror"); var br = document.createElement("br"); $(messagespan).appendTo($("#importLog")); $(br).appendTo($("#importLog")); error++; errorlog.set(errortitle, 1); } if (datarelationship.ContainsKey(errortitle)) { var backdata = datarelationship.get(errortitle); for (var i = 0; i < backdata.size() ; i++) { GetErrors(backdata.keys[i]); } } } function checktasktitleran(tasktitle) { for (var i = 0; i < hasrundata.length; i++) { if (hasrundata[i] == tasktitle) { return true; } } return false; } function createListItem(task) { var itemCreateInfo = new SP.ListItemCreationInformation(); var oListItem = oList.addItem(itemCreateInfo); oListItem.set_item('Title', task[0].trim()); var startdate = new Date(task[1]); var enddate = new Date(task[2]); if (startdate > enddate) { GetErrors(task[0].trim()); return; } oListItem.set_item('StartDate', startdate.getFullYear() + '/' + (startdate.getMonth() + 1) + '/' + startdate.getDate()); oListItem.set_item('DueDate', enddate.getFullYear() + '/' + (enddate.getMonth() + 1) + '/' + enddate.getDate()); var users = new Array(); users.push(SP.FieldUserValue.fromUser(task[3])); oListItem.set_item('AssignedTo', users); if (task[4] != null && task[4] != '' && task[4] != 'null') { if (existData.ContainsKey(task[4])) { oListItem.set_item('ParentTask', existData.get(task[4])); oListItem.set_item('ParentID', existData.get(task[4])); } else { var parentarr = dictionary.get(task[4]); dataAnalysis(task[4], parentarr); return; } } if (task[5] != null && task[5] != '' && task[5] != 'null') { if (existData.ContainsKey(task[5])) { oListItem.set_item('Predecessors', existData.get(task[5])); } else { var parentarr = dictionary.get(task[5]); dataAnalysis(task[5], parentarr); return; } } oListItem.set_item('RelationshipType', task[6]); oListItem.set_item('Project', getQueryString('projectId')); oListItem.set_item('Status', task[7]); oListItem.set_item('TaskLevel', task[8]); if (!existData.ContainsKey(task[0].trim())) { oListItem.update(); clientContext.load(oListItem); clientContext.executeQueryAsync( function () { var Title = oListItem.get_item('Title'); if (!existData.ContainsKey(Title)) { existData.set(Title, oListItem.get_id()); } var messagespan = document.createElement("span"); $(messagespan).html("工作项[<span style='font-weight:bold;'>" + Title + '</span>]导入成功'); $(messagespan).addClass("spansuccess"); var br = document.createElement("br"); $(messagespan).appendTo($("#importLog")); $(br).appendTo($("#importLog")); success++; if (datarelationship.ContainsKey(Title)) { var backdata = datarelationship.get(Title); for (var i = 0; i < backdata.size() ; i++) { if (!importdata.ContainsKey(backdata.keys[i])) { var childtitle = backdata.get(backdata.keys[i]); var arr = dictionary.get(childtitle); dataAnalysis(backdata.keys[i], arr); } } } }, function () { var Title = oListItem.get_item('Title'); GetErrors(Title); }); } } function Map() { this.keys = new Array(); this.data = new Array(); //添加键值对 this.set = function (key, value) { if (this.data[key] == null) {//如键不存在则身【键】数组添加键名 this.keys.push(key); } this.data[key] = value;//给键赋值 }; //获取键对应的值 this.get = function (key) { return this.data[key]; }; //去除键值,(去除键数据中的键名及对应的值) this.remove = function (key) { this.keys.remove(key); this.data[key] = null; }; //判断键值元素是否为空 this.isEmpty = function () { return this.keys.length == 0; }; //获取键值元素大小 this.size = function () { return this.keys.length; }; this.ContainsKey = function (key) { if (this.data[key] == null) {//如键不存在则身【键】数组添加键名 return false; } else { return true; } } } function setsummarymessage() { if (success + error == dictionary.size()) { var summary = document.createElement("span"); $(summary).text('导入结果:'); $(summary).addClass("spansuccess"); var totalspan = document.createElement("span"); $(totalspan).text(' 共:' + total); $(totalspan).addClass("spantotal"); var successspan = document.createElement("span"); $(successspan).text(' 成功:' + success); $(successspan).addClass("spansuccess"); var errorspan = document.createElement("span"); $(errorspan).text(' 失败:' + error); $(errorspan).addClass("spanerror"); var cancelspan = document.createElement("span"); $(cancelspan).text(' 取消:' + (total - dictionary.size())); $(cancelspan).addClass("spancancel"); $(summary).appendTo($("#importLog")); $(totalspan).appendTo($("#importLog")); $(successspan).appendTo($("#importLog")); $(errorspan).appendTo($("#importLog")); $(cancelspan).appendTo($("#importLog")); alert("导入完成!"); $("#importbutton").removeAttr("disabled"); $("#gottaskpage").show(); $('input[type=file]').val(""); } else { setTimeout(setsummarymessage, 3000); } } function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } function gototaskpage() { var url = _spPageContextInfo.webAbsoluteUrl + "/Lists/ProjectTasks/AllItems.aspx?FilterField1=Project%5Fx003a%5FID&FilterValue1=" + getQueryString('ProjectID'); window.location.href = url; } </script> </head> <body> <input type="file" id="importExcel" name="import" /> <input type="button" id="importbutton" value="导入" onclick="waring()" /> <input type="button" id="gottaskpage" style="display: none;" value="查看项目工作项" onclick="gototaskpage();" /> <div id="importLog"></div> </body> </html>