Excel数据导入到Sharepoint List
这个功能是从XML中读取需要导入到Sharepoint List的列名字,然后把Excel中对应的数据导入到Sharepoint List中。基本原理,把Excel中数据临时放到Datatable中,然后查看文件夹是否存在,如果要导入的文件夹已经存在,则清空当前文件夹,放到最新数据。如果没有,遍历Datatable,一次存放到导入的list中,顺便保存一份到本地。
1. 准备工具
服务器上需要安装Excel的组件AccessDatabaseEngine
http://www.microsoft.com/en-us/download/details.aspx?id=13255
2.代码
- Common com = new Common();
- public ImportExcelToList()
- {
- }
- private string _TelephoneList;
- [Personalizable(true)]
- [WebBrowsable(true)]
- [WebDisplayName("Telephone List Name")]
- [DefaultValue("Telephone")]
- public string TelephoneList
- {
- set { _TelephoneList = value; }
- get { return _TelephoneList; }
- }
- protected override void OnInit(EventArgs e)
- {
- base.OnInit(e);
- InitializeControl();
- }
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void btn_upload_Click(object sender, EventArgs e)
- {
- try
- {
- if (this.upload_Excel.HasFile)
- {
- List<string> lis = com.getAppManager("Telephone");
- string fileName = "Telephone_" + System.DateTime.Now.ToString("yyyyMMddhhmmss");
- string destiation =Constants.file_TelephoneDestination + fileName + ".xlsx";
- this.upload_Excel.SaveAs(destiation);
- ImportExcel(lis, destiation, TelephoneList);
- }
- else
- {
- lb_error.Text = "Please choose telephone excel file to upload, in sheet which name is 'Date'.";
- }
- }
- catch (Exception ex)
- {
- lb_error.Text = ex.Message;
- }
- }
- private void CreateFolderInList(string folderName, SPList list,SPWeb web)
- {
- try
- {
- //Check if the Folder is already available in the list
- SPQuery query = new SPQuery();
- query.Query = "<Where><And><Eq><FieldRef Name='Title'/><Value Type='Text'>" + folderName + "</Value></Eq><Eq><FieldRef Name='FSObjType'/><Value Type='Lookup'>1</Value></Eq></And></Where>";
- query.ViewAttributes = "Scope=\"RecursiveAll\"";
- //Retrieve the items based on Query
- SPListItemCollection items = list.GetItems(query);
- //Item count is "0" if the folder does not exist
- if (items.Count == )
- {
- SPListItem folderItem = list.AddItem(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder);
- folderItem["Title"] = folderName;
- folderItem.Update();
- //return folderItem.Url;
- }
- else
- {
- com.cleanListData(list, folderName,web);
- }
- }
- catch (Exception ex)
- {
- lb_error.Text = ex.Message;
- }
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="l">config file</param>
- /// <param name="filePath">Excel path</param>
- /// <param name="listName">list name</param>
- /// <param name="folder">list folder</param>
- private void ImportExcel(List<string> l, string filePath, string listName)
- {
- DataTable dt = ExcelToDS(filePath);
- string folder = dt.Rows[]["Month"].ToString();
- using (SPSite spSite =new SPSite(SPContext.Current.Web.Url))
- {
- using (SPWeb spWeb = spSite.OpenWeb())
- {
- spWeb.AllowUnsafeUpdates = true;
- SPList list = spWeb.Lists[listName];
- CreateFolderInList(folder, list, spWeb);
- foreach (DataRow row in dt.AsEnumerable())
- {
- //add item to list folder
- SPListItem spListItem = list.Items.Add(list.RootFolder.SubFolders[folder].ServerRelativeUrl, SPFileSystemObjectType.File);
- for (int i = ; i < l.Count; i++)
- {
- string colName = l[i];
- if (colName != "All")
- {
- spListItem[colName] = row[i];
- }
- else
- {
- }
- }
- spListItem.Update();
- }
- spWeb.AllowUnsafeUpdates = false;
- }
- }
- }
- /// <summary>
- /// get datatable from sheet Data
- /// </summary>
- /// <param name="Path"></param>
- /// <returns></returns>
- public DataTable ExcelToDS(string Path)
- {
- DataTable dt = new DataTable();
- string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
- /// strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
- SPSecurity.RunWithElevatedPrivileges(delegate()
- {
- OleDbConnection conn = new OleDbConnection(strConn);
- try
- {
- if (conn.State != ConnectionState.Open)
- conn.Open();
- string strExcel = "select * from [Data$] where `Line` Is Not Null";
- OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
- adapter.Fill(dt);
- }
- catch (Exception ex)
- {
- lb_error.Text = ex.Message;
- }
- finally
- {
- if (conn.State != ConnectionState.Closed)
- conn.Close();
- }
- });
- return dt;
- }
Common中的方法
- /// <summary>
- /// Get list from xml configuration
- /// </summary>
- /// <param name="strListId"></param>
- /// <returns></returns>
- public List<string> getAppManager(string strListId)
- {
- List<string> FieldList = new List<string>();
- XElement root = XElement.Load(Constants.xml_ImportList);
- IEnumerable<XElement> address = from el in root.Elements("listId")
- where (string)el.Attribute("id").Value == strListId
- select el;
- foreach (XElement el in address)
- {
- foreach (XNode node in el.Nodes())
- {
- XElement nod = (XElement)node;
- string FieldName = nod.Value;
- FieldList.Add(FieldName);
- }
- }
- return FieldList;
- }
- public void cleanListData(SPList list, string folderName, SPWeb web)
- {
- SPQuery query = new SPQuery();
- query.Query = string.Format(@"<Where>
- </Where>
- ");
- query.ViewAttributes = "Scope=\"Recursive\"";
- if (!string.IsNullOrEmpty(folderName))
- {
- SPFolder folder = list.RootFolder.SubFolders[folderName];
- query.Folder = folder;
- }
- SPListItemCollection items = list.GetItems(query);
- StringBuilder sbDelete = new StringBuilder();
- sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
- foreach (SPListItem item in items)
- {
- sbDelete.Append("<Method>");
- sbDelete.Append("<SetList Scope=\"Request\">" + list.ID + "</SetList>");
- sbDelete.Append("<SetVar Name=\"ID\">" + Convert.ToString(item.ID) + "</SetVar>");
- sbDelete.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
- sbDelete.Append("</Method>");
- }
- sbDelete.Append("</Batch>");
- web.ProcessBatchData(sbDelete.ToString());
- }
XML
- <?xml version="1.0" encoding="utf-8"?>
- <lists>
- <listId id="Telephone">
- <field>Month</field>
- <field>Line</field>
- <field>Phone Type</field>
- </listId>
- </lists>
Excel数据导入到Sharepoint List的更多相关文章
- SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)
博客地址 http://blog.csdn.net/foxdave 本篇讲解一个有些新颖的SharePoint实例应用,给甲方做过项目的都有过体会,数据太多了,客户有Excel,要求实现批量导入. 效 ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转
效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载]) 本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较 ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
- 将Excel数据导入mysql数据库的几种方法
将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...
- 如何把excel数据导入数据库
这里介绍2种把excel数据导入oracle数据库的方法. 1. 在excel中生成sql语句. 1)在数据列的右侧,第一行的任何位置输入="insert into table(xx,yyy ...
- excel 数据导入数据表
环境: Windows server 2012 rm sql server 2012 excel 数据导入数据表 INSERT INTO [dbo].[AdminUser] SELECT [Adm ...
- C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符
问题描述:在使用oledb方式将excel数据导入到datagridview中,在datagridview单元格中的数据没有显示全,似乎只截取了数据源中的一段 解决方案:1.关于该问题,微软官方答案: ...
- excel数据导入到sqlserver中---------工作笔记
调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...
随机推荐
- Theano入门神经网络(二) 实现一个XOR门
与非门的图片如下 示意图 详细解释: 1 定义变量的代码,包括了输入.权值.输出等.其中激活函数采用的是sigmod函数 # -*- coding: utf-8 -*- __author__ = 'A ...
- 为什么是梯度下降?SGD
在机器学习算法中,为了优化损失函数loss function ,我们往往采用梯度下降算法来进行优化.举个例子: 线性SVM的得分函数和损失函数分别为: ...
- 搭建CnetOS6.5x64最小系统及在线yum源的配置
CentOS系统作为红帽系列的一款linux系统,因为其免费.开源,在中小企业中得到了广泛应用,生产上为了更好的利用资源,都采用最小系统安装,因为一个图形界面都会占去系统资源的30%到40%,生产上一 ...
- linux的计划
我接触linux也有好几年了,至少有5年了.最近公司在搞内部培训,人人都可以报名培训别人.想到自己在linux浸淫多年,应该出来出一份力.一直以来想就linux写一个专题.今天刚好在做相关的ppt,借 ...
- easyui的window插件再次封装
easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...
- 一篇文看懂Hadoop:风雨十年,未来何去何从
本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...
- OS初识
参考: 操作系统的故事(1-4):
- XMPP客户端开发(2)--发送接收消息
客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...
- 2016暑假多校联合---GCD
Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...
- Myeclipse10下载,安装,破解,插件,优化介绍
一.Myeclipse10下载与破解 Genuitec 公司发布了MyEclipse 10,一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本.MyEclipse 10基于Eclip ...