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 ...
随机推荐
- 补充$.extend()
这里多谢某童鞋的提醒!说我的上篇随笔jquery插件开发的方式一还还可用于合并参数和深clone,虽然方式二中用了方式一做参数合并,但并未详细介绍,所以今天在此处做点补充! 一.合并参数 jquery ...
- Android之Activity的生命周期
PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...
- Windows Azure Web Site (9) Web Site公网IP地址
<Windows Azure Platform 系列文章目录> 本文会同时介绍国内由世纪互联运维的Azure China和海外Azure Global. 熟悉Windows Azure平台 ...
- SQL Server时间粒度系列----第3节旬、月时间粒度详解
本文目录列表: 1.SQL Server旬时间粒度2.SQL Server月有关时间粒度 3.SQL Server函数重构 4.总结语 5.参考清单列表 SQL Server旬时间粒度 ...
- 【转载】关于BooleanQuery在搜索中的用处
我们在搜索中可能会遇到要搜索索引文件中不同字段,不同字段之间就存在了与或非的运算关系,如:这个xx字段中必须存在什么什么关键词,而另一个 XXX字段可以存在或不存在什么什么关键词等等等.这就需要有Bo ...
- C#串口通信—传输文件测试
说明:该程序可能不具备实用性,仅测试用. 一.使用虚拟串口工具VSPD虚拟两个串口COM1和COM2 二.约定 占一个字节,代码如下: using System; using System.Colle ...
- 简单的ASP.NET MVC发布
学习这样久的ASP.NET MVC,但一直没有实现过发布MVC程序.今天来试试. 分两个部分进行,先是第一部分,Visual Studio的publish:创建一个带有实例的ASP.NET MVC: ...
- 【Win10开发】关于汉堡菜单-SplitView的用法
SplitView(汉堡菜单)是win10新加的一种控件,顾名思义,其实就是将视图分割成两部分,废话不多说,下面来介绍一下SplitView的基本用法. 首先介绍几个SplitView经常用到的属性. ...
- Oracle中经典分页代码!
在Oracle中因为没有top关键字,所以在sqlserver中的分页代码并不适用于Oracle,那么在Oracle中如何来实现分页呢? --查询所有数据 STUNO STUNAME STUAGE S ...
- MFC 阶段学习总结
由于项目需求,需要用到C++开发软件,所以开始学习C++,重点是MFC,因为是窗体应用,感觉win32的比较麻烦,还是MFC方便点.至于为什么要用C++呢, 由于C++应用不需要客户额外安装环境和加密 ...