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 == 0)
                {
                    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[0]["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 = 0; 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>
时间: 2024-11-03 22:42:18

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

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

本篇讲解一个有些新颖的SharePoint实例应用,给甲方做过项目的都有过体会,数据太多了,客户有Excel,要求实现批量导入. 效果图大致如下所示 此实例是借用列表的数据视图实现导入,数据视图类似Excel,所以可以直接在上面编辑,甚至从Excel中直接粘贴进去,然后点击保存将数据插入到列表中. 首先,我们需要有一个列表,这个列表的字段跟Excel是对应的,在我的实例中选择创建列表定义及列表实例(怎么创建项目不多废话了) 创建方法戳这里 写完列表实例之后,添加一个作用于列表的事件接收器,用来处

kettle将Excel数据导入oracle

导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/176777.html 2.使用Kettle工具,免费,相比之下功能更丰富,可实现一定的业务逻辑,推荐使用 Kettle将Excel数据导入Oracle过程记录如下: 1.准备Excel文件: 注意:Excel文件要有字段名称说明:如这里的id,name,age 2.打开Kettle,文件-->新建--

excel数据导入导出数据库

第一种方法: 先把Excel另存为.csv格式文件,如test.csv,再编写一个insert.ctl 用sqlldr进行导入! insert.ctl内容如下: load data          --1.控制文件标识 infile ‘my.csv‘          --2.要输入的数据文件名为my.csv append into table "tbl_test"   --3.向表table_name中追加记录 fields terminated by ‘,‘          

Excel数据导入___你hold住么(二)

小编在上一篇博文中描述了Excel数据导入的大致流程和一个Demo实例 Excel数据导入___你hold住么(一)          在本篇将带领大家一同了解 导入Excel流程和问题解决方案: 导入Excel流程和步骤 需要注意的是在Server端的Web Config 中添加这几行代码 <!-- 导入Excel 徐露 -2015-7-8 --> <appSettings> <addkey="DbContextFactoryclassFulleName"

MATLAB/Excel-如何将Excel数据导入MATLAB中

在使用MATLAB对矩阵进行数据处理时,为了方便编辑与修改,常常需要先将数据录入到Excel中,然后再将其导入到MATLAB中参与矩阵运算.本文在MATLAB 2013a和Office 2013环境下向大家演示如何将Excel数据导入到MATLAB中,其他版本的MATLAB.OFFICE方法大同小异,一起来看一下 工具/原料   Excel数据文件(格式xls或xlsx) MATLAB 7.x + 方法/步骤     将待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应  

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

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   (三)SSIS的简介   (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介绍一下)   (六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Package包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行

利用TOAD实现把EXCEL数据导入oracle数据库

利用TOAD实现把EXCEL数据导入oracle数据库 工具:   Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然后Database->Import->Table Data打开了导入窗口,如下图   选择一个数据库表,点击Show Data按钮,可以显示表中的内容 其中schema 就是这张表的所属用户 Object type 就是 table Object name 就是表的名称 Commit mode 

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

将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面和大家分享一下: 一.用java来将Excel表格中的数据转到mysql中 这是我们用的第一种方法,就是在java找你感谢个类,然后这个类会将Excel表格中的数据存储到内存里,然后再从内存中读出来插入到数据库中,但是要 注意了,这里是存储到String[ ]数组里面,所以取出来的数据也是Strin

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

调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using JuMi.BLL.Business; using System.Data; using System.Data.OleDb; using System.Windows.Forms; using Ju