客户端对象模型之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>
客户端对象模型之Excel数据导入到列表的更多相关文章
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转
效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载]) 本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较 ...
- Excel连接到MySQL,将Excel数据导入MySql,MySQL for Excel,,
Excel连接到MySQL 即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管 理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具. ...
- C#将Excel数据导入数据库(MySQL或Sql Server)
最近一直很忙,很久没写博客了.今天给大家讲解一下如何用C#将Excel数据导入Excel,同时在文章最后附上如何用sqlserver和mysql工具导入数据. 导入过程大致分为两步: 1.将excel ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
- 使用python将excel数据导入数据库
使用python将excel数据导入数据库 因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接 ...
- Excel 数据导入SQL XML 自动生成表头
去出差的时候应客户要求要要将Excel 文件内的数据批量导入到数据库中,而且有各种不同种类的表格,如果每一个表格多对应一个数据表的话, 按照正常的方法应该是创建数据表,创建数据库中映射的数据模型,然后 ...
- NOPI Excel 数据导入到数据库
/// <summary> /// 上传excel文件 并将文件数据导入到数据库 /// </summary> /// <param name="file&qu ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
随机推荐
- <Android 应用 之路> MPAndroidChart~PieChart
简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...
- CSS盒子模型中()是透明的,这部分可以显示背景()
CSS盒子模型中()是透明的,这部分可以显示背景() border margin padding content 我的理解: · Margin(外边距) - 清除边框外的区域,外边距是透明 ...
- xise官方网站|XISE官网|xise最新版下载|超级XISE WBMS管理V12.0版本官方网站|
诠释: 1. 破解VIP登陆限制 2.去后门 (自查) 下载地址 :https://pan.baidu.com/s/1eR2rUOM 查毒地址:http://a.virscan.org/a3983f3 ...
- CSS制作图形速查表
很少会有人意识到,当浏览器绘制的border,会有一个角度的问题.我们就是得用这样的一个技巧来制作三角的效果.我们只需要保证一边的边框是有色,其他边框色为透明色,这样我们就很容易制作出三角形,然后改变 ...
- codeforces 666C Codeword
codeforces 666C Codeword 题意 q个询问,一种询问是给你一个字符串,还有一种是问长度为n的,包含当前字符串为子序列的字符串有多少个. 题解 容易写出式子,但是不好化简. 观察一 ...
- HTML 教程
HTML5 标准 超文本标记语言(英语:HyperText Markup Language,简称:HTML) 是一种用于创建网页的标准标记语言. 您可以使用 HTML 来建立自己的 WEB 站点,HT ...
- JavaScript --- Set 集合结构详解
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. 1 const set1 = new Set([1, 2, 3, 4, 5]); 2 3 console.log(set1.has ...
- python对列表中的字典进行排序
数据显示为: rows=[{'日期': '2018-09-04', '测试1': '50.00 %', '测试2': '100.00%'}, {'日期': '2018-09-05', '测试1': ' ...
- hook与链表操作
hook与链表的节点操作有相似之处: 链表的前后顺序相当于程序的执行流: 对链表节点的替换或插入相当于hook技术: 1.替换:用新的节点替换原来的节点: 2.前插入: 3.后插入: 修改原来的结构.
- 死磕salt系列-salt API 使用
启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...