1. 程式人生 > >Excel資料匯入到SharePoint自定義列表(資料檢視方式)

Excel資料匯入到SharePoint自定義列表(資料檢視方式)

本篇講解一個有些新穎的SharePoint例項應用,給甲方做過專案的都有過體會,資料太多了,客戶有Excel,要求實現批量匯入。

效果圖大致如下所示


此例項是借用列表的資料檢視實現匯入,資料檢視類似Excel,所以可以直接在上面編輯,甚至從Excel中直接貼上進去,然後點選儲存將資料插入到列表中。

首先,我們需要有一個列表,這個列表的欄位跟Excel是對應的,在我的例項中選擇建立列表定義及列表例項(怎麼建立專案不多廢話了)

建立方法戳這裡

寫完列表例項之後,新增一個作用於列表的事件接收器,用來處理後臺操作。新增一個事件接收器,勾選正在刪除、已新增和已更新事件,完成建立。



編寫核心程式碼就可以了,在我們的實際應用中,做了一個臨時表用來處理這裡的資料,點選頁面的儲存之後再轉到真實的資料表。

/// <summary>
        /// 正在刪除項.
        /// </summary>
        public override void ItemDeleting(SPItemEventProperties properties)
        {
            base.ItemDeleting(properties);
            SPListItem item = properties.ListItem;
            SPMIPEntities entities = new SPMIPEntities();
            string uniqueId = item.UniqueId.ToString();
            ZY_YeZhqdjch_Temp temp = (from p in entities.ZY_YeZhqdjch_Temp where p.UniqueId.Equals(uniqueId) select p).FirstOrDefault();
            entities.DeleteObject(temp);
            entities.SaveChanges();
        }

        /// <summary>
        /// 已新增項.
        /// </summary>
        public override void ItemAdded(SPItemEventProperties properties)
        {
            base.ItemAdded(properties);
            SPListItem item = properties.ListItem;
            SPMIPEntities entities = new SPMIPEntities();
            ZY_YeZhqdjch_Temp temp = new ZY_YeZhqdjch_Temp();
            string a = properties.UserLoginName;
            //獲取登入者賬號
            string username = properties.UserLoginName.Substring(properties.UserLoginName.IndexOf("spmipmp|") + 8);
            var list = from p in entities.SYS_User where (p.UserCode.Equals(username)) select new { p.UserCode, p.Zhi_gid };
            DataTable dt = IQueryableExtensions.ToDataTable(list);
            //獲取登入者ID
            temp.Chuang_jzh = Convert.ToInt32(dt.Rows[0]["Zhi_gid"]);
            temp.UniqueId = item.UniqueId.ToString();

            if (item["業主清單編碼"] == null) { temp.Ye_zhqdbm = ""; }
            else { temp.Ye_zhqdbm = item["業主清單編碼"].ToString(); }
            if (item["業主清單名稱"] == null) { temp.Ye_zhqdmch = ""; }
            else { temp.Ye_zhqdmch = item["業主清單名稱"].ToString(); }
            if (item["清單專案特徵"] == null) { temp.Qing_dxmtzh = ""; }
            else { temp.Qing_dxmtzh = item["清單專案特徵"].ToString(); }
            if (item["單位"] == null) { temp.Dan_w = ""; }
            else { temp.Dan_w = item["單位"].ToString(); }
            if (item["清單量"] == null) { temp.Qing_dl = 0; }
            else { temp.Qing_dl = Convert.ToDecimal(item["清單量"]); }
            if (item["簽證量"] == null) { temp.Qian_zhl = 0; }
            else { temp.Qian_zhl = Convert.ToDecimal(item["簽證量"]); }
            if (item["驗收量"] == null) { temp.Yan_shl = 0; }
            else { temp.Yan_shl = Convert.ToDecimal(item["驗收量"]); }
            if (item["合同單價"] == null) { temp.He_tdj = 0; }
            else { temp.He_tdj = Convert.ToDecimal(item["合同單價"]); }
            if (item["業主籤認單價"] == null) { temp.Ye_zhqrdj = 0; }
            else { temp.Ye_zhqrdj = Convert.ToDecimal(item["業主籤認單價"]); }
            if (item["預計決算單價"] == null) { temp.Yu_jjsdj = 0; }
            else { temp.Yu_jjsdj = Convert.ToDecimal(item["預計決算單價"]); }
            if (item["預計審減比例"] == null) { temp.Yu_jshjbl = 0; }
            else { temp.Yu_jshjbl = Convert.ToDecimal(item["預計審減比例"]); }
            if (item["決算單價"] == null) { temp.Jue_sdj = 0; }
            else { temp.Jue_sdj = Convert.ToDecimal(item["決算單價"]); }
            entities.AddToZY_YeZhqdjch_Temp(temp);
            entities.SaveChanges();
        }

        /// <summary>
        /// 已更新項.
        /// </summary>
        public override void ItemUpdated(SPItemEventProperties properties)
        {
            base.ItemUpdated(properties);
            SPListItem item = properties.ListItem;
            SPMIPEntities entities = new SPMIPEntities();
            string uniqueId = item.UniqueId.ToString();
            ZY_YeZhqdjch_Temp temp = (from p in entities.ZY_YeZhqdjch_Temp where p.UniqueId.Equals(uniqueId) select p).FirstOrDefault();
            //獲取登入者賬號
            string username = properties.UserLoginName.Substring(properties.UserLoginName.IndexOf("spmipmp|") + 8);
            var list = from p in entities.SYS_User where (p.UserCode.Equals(username)) select new { p.UserCode, p.Zhi_gid };
            DataTable dt = IQueryableExtensions.ToDataTable(list);
            //獲取登入者ID
            temp.Chuang_jzh = Convert.ToInt32(dt.Rows[0]["Zhi_gid"]);
            if (item["業主清單編碼"] == null) { temp.Ye_zhqdbm = ""; }
            else { temp.Ye_zhqdbm = item["業主清單編碼"].ToString(); }
            if (item["業主清單名稱"] == null) { temp.Ye_zhqdmch = ""; }
            else { temp.Ye_zhqdmch = item["業主清單名稱"].ToString(); }
            if (item["清單專案特徵"] == null) { temp.Qing_dxmtzh = ""; }
            else { temp.Qing_dxmtzh = item["清單專案特徵"].ToString(); }
            if (item["單位"] == null) { temp.Dan_w = ""; }
            else { temp.Dan_w = item["單位"].ToString(); }
            if (item["清單量"] == null) { temp.Qing_dl = 0; }
            else { temp.Qing_dl = Convert.ToDecimal(item["清單量"]); }
            if (item["簽證量"] == null) { temp.Qian_zhl = 0; }
            else { temp.Qian_zhl = Convert.ToDecimal(item["簽證量"]); }
            if (item["驗收量"] == null) { temp.Yan_shl = 0; }
            else { temp.Yan_shl = Convert.ToDecimal(item["驗收量"]); }
            if (item["合同單價"] == null) { temp.He_tdj = 0; }
            else { temp.He_tdj = Convert.ToDecimal(item["合同單價"]); }
            if (item["業主籤認單價"] == null) { temp.Ye_zhqrdj = 0; }
            else { temp.Ye_zhqrdj = Convert.ToDecimal(item["業主籤認單價"]); }
            if (item["預計決算單價"] == null) { temp.Yu_jjsdj = 0; }
            else { temp.Yu_jjsdj = Convert.ToDecimal(item["預計決算單價"]); }
            if (item["預計審減比例"] == null) { temp.Yu_jshjbl = 0; }
            else { temp.Yu_jshjbl = Convert.ToDecimal(item["預計審減比例"]); }
            if (item["決算單價"] == null) { temp.Jue_sdj = 0; }
            else { temp.Jue_sdj = Convert.ToDecimal(item["決算單價"]); }
            entities.SaveChanges();
        }

接下來,我們想更自動化一些,自動創建出這個列表的資料檢視並設定為預設檢視,用於專門的匯入操作

處理FeatureActivated事件,例項中的核心程式碼如下

SPWeb _web = properties.Feature.Parent as SPWeb;
            SPList list = _web.Lists.TryGetList("業主清單基礎匯入");
            SPList listTwo = _web.Lists.TryGetList("內部清單基礎匯入");
            SPView newView = null;
            SPView newViewTwo = null;
            string strQuery = default(string);
            string strQueryTwo = default(string);
            StringCollection strCol = new StringCollection();
            StringCollection strColTwo = new StringCollection();
            newView = list.Views.Cast<SPView>().FirstOrDefault(v => v.Title == "業主清單基礎");
            if (newView == null)
            {
                strCol.Clear();
                strCol.Add("Title");
                strCol.Add("Ye_zhqdmch");
                strCol.Add("Qing_dxmtzh");
                strCol.Add("Dan_w");
                strCol.Add("Qing_dl");
                strCol.Add("Qian_zhl");
                strCol.Add("Yan_shl");
                strCol.Add("He_tdj");
                strCol.Add("Ye_zhqrdj");
                strCol.Add("Yu_jjsdj");
                strCol.Add("Yu_jshjbl");
                strCol.Add("Jue_sdj");
                newView = list.Views.Add("Default", strCol, strQuery, 30, true/**//*是否支援分頁*/, true/**//*是否是預設檢視*/,
                    Microsoft.SharePoint.SPViewCollection.SPViewType.Grid, false);
                newView.Title = "業主清單基礎";
                newView.Update();
            }
            newViewTwo = listTwo.Views.Cast<SPView>().FirstOrDefault(v => v.Title == "內部清單基礎");
            if (newViewTwo == null)
            {
                strColTwo.Clear();
                strColTwo.Add("Title");
                strColTwo.Add("Nei_bqdbm");
                strColTwo.Add("Nei_bqdmch");
                strColTwo.Add("Xiang_mtzh");
                strColTwo.Add("Dan_w");
                strColTwo.Add("Gong_chshl");
                strColTwo.Add("Ding_e");
                strColTwo.Add("Ren_gf");
                strColTwo.Add("Ji_xf");
                strColTwo.Add("Qu_ybm");
                strColTwo.Add("Qu_ymch");
                newViewTwo = listTwo.Views.Add("Default", strColTwo, strQueryTwo, 30, true/**//*是否支援分頁*/, true/**//*是否是預設檢視*/,
                    Microsoft.SharePoint.SPViewCollection.SPViewType.Grid, false);
                newViewTwo.Title = "內部清單基礎";
                newViewTwo.Update();
            }
最後一步,在應用程式頁上應用它(這裡我只是描述例項的情況,具體怎麼應用可以自行選擇),在頁面上新增一個iframe元素,引入列表檢視的URL地址就可以了。