这个功能是从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.代码

  1.      Common com = new Common();
  2. public ImportExcelToList()
  3. {
  4. }
  5.  
  6. private string _TelephoneList;
  7. [Personalizable(true)]
  8. [WebBrowsable(true)]
  9. [WebDisplayName("Telephone List Name")]
  10. [DefaultValue("Telephone")]
  11. public string TelephoneList
  12. {
  13. set { _TelephoneList = value; }
  14. get { return _TelephoneList; }
  15. }
  16.  
  17. protected override void OnInit(EventArgs e)
  18. {
  19. base.OnInit(e);
  20. InitializeControl();
  21. }
  22.  
  23. protected void Page_Load(object sender, EventArgs e)
  24. {
  25. }
  26.  
  27. protected void btn_upload_Click(object sender, EventArgs e)
  28. {
  29. try
  30. {
  31. if (this.upload_Excel.HasFile)
  32. {
  33. List<string> lis = com.getAppManager("Telephone");
  34. string fileName = "Telephone_" + System.DateTime.Now.ToString("yyyyMMddhhmmss");
  35. string destiation =Constants.file_TelephoneDestination + fileName + ".xlsx";
  36. this.upload_Excel.SaveAs(destiation);
  37. ImportExcel(lis, destiation, TelephoneList);
  38. }
  39. else
  40. {
  41. lb_error.Text = "Please choose telephone excel file to upload, in sheet which name is 'Date'.";
  42. }
  43. }
  44. catch (Exception ex)
  45. {
  46. lb_error.Text = ex.Message;
  47. }
  48. }
  49.  
  50. private void CreateFolderInList(string folderName, SPList list,SPWeb web)
  51. {
  52. try
  53. {
  54. //Check if the Folder is already available in the list
  55. SPQuery query = new SPQuery();
  56. 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>";
  57. query.ViewAttributes = "Scope=\"RecursiveAll\"";
  58.  
  59. //Retrieve the items based on Query
  60. SPListItemCollection items = list.GetItems(query);
  61.  
  62. //Item count is "0" if the folder does not exist
  63. if (items.Count == )
  64. {
  65. SPListItem folderItem = list.AddItem(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder);
  66. folderItem["Title"] = folderName;
  67. folderItem.Update();
  68. //return folderItem.Url;
  69. }
  70. else
  71. {
  72. com.cleanListData(list, folderName,web);
  73. }
  74. }
  75. catch (Exception ex)
  76. {
  77. lb_error.Text = ex.Message;
  78. }
  79. }
  80.  
  81. /// <summary>
  82. ///
  83. /// </summary>
  84. /// <param name="l">config file</param>
  85. /// <param name="filePath">Excel path</param>
  86. /// <param name="listName">list name</param>
  87. /// <param name="folder">list folder</param>
  88. private void ImportExcel(List<string> l, string filePath, string listName)
  89. {
  90. DataTable dt = ExcelToDS(filePath);
  91. string folder = dt.Rows[]["Month"].ToString();
  92. using (SPSite spSite =new SPSite(SPContext.Current.Web.Url))
  93. {
  94. using (SPWeb spWeb = spSite.OpenWeb())
  95. {
  96. spWeb.AllowUnsafeUpdates = true;
  97. SPList list = spWeb.Lists[listName];
  98. CreateFolderInList(folder, list, spWeb);
  99. foreach (DataRow row in dt.AsEnumerable())
  100. {
  101. //add item to list folder
  102. SPListItem spListItem = list.Items.Add(list.RootFolder.SubFolders[folder].ServerRelativeUrl, SPFileSystemObjectType.File);
  103. for (int i = ; i < l.Count; i++)
  104. {
  105. string colName = l[i];
  106. if (colName != "All")
  107. {
  108. spListItem[colName] = row[i];
  109. }
  110. else
  111. {
  112.  
  113. }
  114. }
  115. spListItem.Update();
  116. }
  117. spWeb.AllowUnsafeUpdates = false;
  118. }
  119. }
  120. }
  121.  
  122. /// <summary>
  123. /// get datatable from sheet Data
  124. /// </summary>
  125. /// <param name="Path"></param>
  126. /// <returns></returns>
  127. public DataTable ExcelToDS(string Path)
  128. {
  129. DataTable dt = new DataTable();
  130. string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
  131. /// strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
  132. SPSecurity.RunWithElevatedPrivileges(delegate()
  133. {
  134. OleDbConnection conn = new OleDbConnection(strConn);
  135. try
  136. {
  137. if (conn.State != ConnectionState.Open)
  138. conn.Open();
  139. string strExcel = "select * from [Data$] where `Line` Is Not Null";
  140. OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
  141. adapter.Fill(dt);
  142.  
  143. }
  144. catch (Exception ex)
  145. {
  146. lb_error.Text = ex.Message;
  147. }
  148. finally
  149. {
  150. if (conn.State != ConnectionState.Closed)
  151. conn.Close();
  152. }
  153. });
  154. return dt;
  155. }

Common中的方法

  1. /// <summary>
  2. /// Get list from xml configuration
  3. /// </summary>
  4. /// <param name="strListId"></param>
  5. /// <returns></returns>
  6. public List<string> getAppManager(string strListId)
  7. {
  8. List<string> FieldList = new List<string>();
  9. XElement root = XElement.Load(Constants.xml_ImportList);
  10. IEnumerable<XElement> address = from el in root.Elements("listId")
  11. where (string)el.Attribute("id").Value == strListId
  12. select el;
  13. foreach (XElement el in address)
  14. {
  15. foreach (XNode node in el.Nodes())
  16. {
  17. XElement nod = (XElement)node;
  18. string FieldName = nod.Value;
  19. FieldList.Add(FieldName);
  20. }
  21. }
  22. return FieldList;
  23. }
  24.  
  25. public void cleanListData(SPList list, string folderName, SPWeb web)
  26. {
  27. SPQuery query = new SPQuery();
  28. query.Query = string.Format(@"<Where>
  29. </Where>
  30. ");
  31. query.ViewAttributes = "Scope=\"Recursive\"";
  32. if (!string.IsNullOrEmpty(folderName))
  33. {
  34. SPFolder folder = list.RootFolder.SubFolders[folderName];
  35. query.Folder = folder;
  36. }
  37. SPListItemCollection items = list.GetItems(query);
  38. StringBuilder sbDelete = new StringBuilder();
  39. sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
  40. foreach (SPListItem item in items)
  41. {
  42. sbDelete.Append("<Method>");
  43. sbDelete.Append("<SetList Scope=\"Request\">" + list.ID + "</SetList>");
  44. sbDelete.Append("<SetVar Name=\"ID\">" + Convert.ToString(item.ID) + "</SetVar>");
  45. sbDelete.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
  46. sbDelete.Append("</Method>");
  47. }
  48. sbDelete.Append("</Batch>");
  49. web.ProcessBatchData(sbDelete.ToString());
  50. }

XML

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <lists>
  3. <listId id="Telephone">
  4. <field>Month</field>
  5. <field>Line</field>
  6. <field>Phone Type</field>
  7. </listId>
  8. </lists>

Excel数据导入到Sharepoint List的更多相关文章

  1. SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)

    博客地址 http://blog.csdn.net/foxdave 本篇讲解一个有些新颖的SharePoint实例应用,给甲方做过项目的都有过体会,数据太多了,客户有Excel,要求实现批量导入. 效 ...

  2. kettle将Excel数据导入oracle

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

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

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

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

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

  5. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  6. 如何把excel数据导入数据库

    这里介绍2种把excel数据导入oracle数据库的方法. 1. 在excel中生成sql语句. 1)在数据列的右侧,第一行的任何位置输入="insert into table(xx,yyy ...

  7. excel 数据导入数据表

    环境: Windows server 2012  rm sql server  2012 excel 数据导入数据表 INSERT INTO [dbo].[AdminUser] SELECT [Adm ...

  8. C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符

    问题描述:在使用oledb方式将excel数据导入到datagridview中,在datagridview单元格中的数据没有显示全,似乎只截取了数据源中的一段 解决方案:1.关于该问题,微软官方答案: ...

  9. excel数据导入到sqlserver中---------工作笔记

    调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...

随机推荐

  1. Theano入门神经网络(二) 实现一个XOR门

    与非门的图片如下 示意图 详细解释: 1 定义变量的代码,包括了输入.权值.输出等.其中激活函数采用的是sigmod函数 # -*- coding: utf-8 -*- __author__ = 'A ...

  2. 为什么是梯度下降?SGD

    在机器学习算法中,为了优化损失函数loss function ,我们往往采用梯度下降算法来进行优化.举个例子: 线性SVM的得分函数和损失函数分别为:                         ...

  3. 搭建CnetOS6.5x64最小系统及在线yum源的配置

    CentOS系统作为红帽系列的一款linux系统,因为其免费.开源,在中小企业中得到了广泛应用,生产上为了更好的利用资源,都采用最小系统安装,因为一个图形界面都会占去系统资源的30%到40%,生产上一 ...

  4. linux的计划

    我接触linux也有好几年了,至少有5年了.最近公司在搞内部培训,人人都可以报名培训别人.想到自己在linux浸淫多年,应该出来出一份力.一直以来想就linux写一个专题.今天刚好在做相关的ppt,借 ...

  5. easyui的window插件再次封装

    easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...

  6. 一篇文看懂Hadoop:风雨十年,未来何去何从

    本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...

  7. OS初识

    参考: 操作系统的故事(1-4):

  8. XMPP客户端开发(2)--发送接收消息

    客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...

  9. 2016暑假多校联合---GCD

    Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...

  10. Myeclipse10下载,安装,破解,插件,优化介绍

    一.Myeclipse10下载与破解 Genuitec 公司发布了MyEclipse 10,一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本.MyEclipse 10基于Eclip ...