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地址就可以了。

时间: 2024-10-07 09:59:57

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

Excel数据导入到Sharepoint List

这个功能是从XML中读取需要导入到Sharepoint List的列名字,然后把Excel中对应的数据导入到Sharepoint List中.基本原理,把Excel中数据临时放到Datatable中,然后查看文件夹是否存在,如果要导入的文件夹已经存在,则清空当前文件夹,放到最新数据.如果没有,遍历Datatable,一次存放到导入的list中,顺便保存一份到本地. 1. 准备工具 服务器上需要安装Excel的组件AccessDatabaseEngine http://www.microsoft.

poi excel批量导入 解决各类型的数据

String value=this.getValue((HSSFCell) row.getCell(position)) 数字类型  时间类型 字符串类型验证没问题, 数字类型如果是1234.0会将其变成1234  如果是1234.5保存仍然保持小数位1234.5,用来解决电话号码和普通数字问题 时间类型将其格式化成了 2015-12-09 12:13:12这种格式便于保存数据库 //解决类型问题,获得数值 public String getValue(HSSFCell cell) { Stri

SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题

SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题 分类: SharePoint2012-01-16 14:24 1295人阅读 评论(1) 收藏 举报 sharepoint2010queryurllistborder SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题 1.实现效果如下: 点击各个节点进入相应的链接 2.测试列表: 3.

数据导入HBase最常用的三种方式及实践分析

数据导入HBase最常用的三种方式及实践分析         摘要:要使用Hadoop,需要将现有的各种类型的数据库或数据文件中的数据导入HBase.一般而言,有三种常见方式:使用HBase的API中的Put方法,使用HBase 的bulk load工具和使用定制的MapReduce Job方式.本文均有详细描述. [编者按]要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用H

HFun.快速开发平台(二)=》自定义列表实例

应用系统中数据列表的展现是开发内容之一,实现的方式基本是通过编号具体的访问列表页实现,通过检索条件进行数据源的获取,列字段的描述,还可能会有检索条件的实现,列表数据的导出等功能. 为了将重复工作进行简化,同时为了实现多个开发人员编写同样风格的程序,降低应用系统的后期运维成本,HFun.开发平台中将列表的实现进行抽象,实现统一的列表对象,通过统一的访问页面,传递相应的参数,系统进行数据源的处理及展现.程序的实现结构如下: 程序根据功能分为文件夹Controls,Data,ExportExcel,F

【源】从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们介绍了Hive的表操作做了简单的描述和实践.在实际使用中,可能会存在数据的导入导出,虽然可以使用sqoop等工具进行关系型数据导入导出操作,但有的时候只需要很简便的方式进行导入导出即可   下面我们开始

自定义列表数据自动循环向下滚动view(类似于通知通报消息)

首先申明,这个自定义View不是本人写的,大神写的,本人仅限学习一级研究使用 直接上代码吧!后面我再解释一遍 1 package com.egojit.android.gcoa.views; 2 3 import android.animation.Animator; 4 import android.animation.TypeEvaluator; 5 import android.animation.ValueAnimator; 6 import android.content.Contex

【源】从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们介绍了Hive的数据多种方式导入,这样我们的Hive就有了数据来源了,但有时候我们可能需要纯粹的导出,或者集群Hive数据的迁移(不同集群,不同版本),我们就可以通过这两章的知识来实现.   下面我们开始介绍hive的数据导出,以及集群Hive数据的

把Excel表数据导入数据库

导入格式 //导入Excel(导入资产信息) private void button2_Click(object sender, EventArgs e) { OpenFileDialog openfilediaglog = new OpenFileDialog(); openfilediaglog.Filter = "xls文件|*.xls"; if (openfilediaglog.ShowDialog() == DialogResult.OK) { string str = Im