<!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数据导入到列表的更多相关文章

  1. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  2. Excel连接到MySQL,将Excel数据导入MySql,MySQL for Excel,,

    Excel连接到MySQL 即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管 理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具. ...

  3. C#将Excel数据导入数据库(MySQL或Sql Server)

    最近一直很忙,很久没写博客了.今天给大家讲解一下如何用C#将Excel数据导入Excel,同时在文章最后附上如何用sqlserver和mysql工具导入数据. 导入过程大致分为两步: 1.将excel ...

  4. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  5. 使用python将excel数据导入数据库

    使用python将excel数据导入数据库 因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接 ...

  6. Excel 数据导入SQL XML 自动生成表头

    去出差的时候应客户要求要要将Excel 文件内的数据批量导入到数据库中,而且有各种不同种类的表格,如果每一个表格多对应一个数据表的话, 按照正常的方法应该是创建数据表,创建数据库中映射的数据模型,然后 ...

  7. NOPI Excel 数据导入到数据库

    /// <summary> /// 上传excel文件 并将文件数据导入到数据库 /// </summary> /// <param name="file&qu ...

  8. kettle将Excel数据导入oracle

    导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...

  9. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

随机推荐

  1. 关于构造器和Serlvet的知识点

    关于java的构造器方法: 1.java构造方法可以有任何的访问修饰符:public.protected.private或者没有修饰(通常被package或者friendly调用)但是不能有非访问性质 ...

  2. Struts2详讲

    一 概述 1.什么是Struts2? Struts2是一个在WebWork框架基础上发展起来开源MVC框架. 2.StrutsPrepareAndExecuteFilter StrutsPrepare ...

  3. border-radius圆角兼容方案

    1.下载ie-css3.htc 2.CSS代码段 box { -moz-border-radius: 15px; /* Firefox */ -webkit-border-radius: 15px; ...

  4. Java中的数据类型转换

    先来看一个题: Java类Demo中存在方法func0.func1.func2.func3和func4,请问该方法中,哪些是不合法的定义?( ) public class Demo{ float fu ...

  5. Java设计模式—备忘录模式

    个人感觉备忘录模式是一个比较难的设计模式,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法. 定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以 ...

  6. robbe-1.2发布-支持最新版本的friso+WinNT下php各版本的dll

    robbe是建立在friso中文分词组建上的一个高性能php中文分词扩展.(只支持UTF-8编码) robbe-1.2: 1. friso近几天发布1.3了, 接口有些许变化, 更改robbe适合最新 ...

  7. zabbix连不上数据库

    [root@localhost etc]# tail -f /var/log/zabbix_server.log 1267:20130722:195451.493 [Z3001] connection ...

  8. CentOS6.5 SSH无法连接

    1.确认连接交机机端口的正常,如查更换多几个端口试 2.确认网络不存在问题. 3.把selinux iptables服务全部关闭 4.查看本机是否侦听22端口和是否开启ssh服务 命令:netstat ...

  9. 排查在 Azure 中创建、重启 Windows VM 或调整其大小时发生的分配失败

    创建 VM.重新启动已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配 ...

  10. Java学习---Collection的学习

    Collection基本方法的使用 package com.huawei.ftl; import java.io.File; import java.io.FileInputStream; impor ...