当前位置: 代码迷 >> SharePoint >> 将Sharepoint中list导出到excel的有关问题
  详细解决方案

将Sharepoint中list导出到excel的有关问题

热度:74   发布时间:2016-05-02 07:05:23.0
将Sharepoint中list导出到excel的问题
有这样一个需求,要将Sharepoint中list数据按照一定的计算和汇总导出到excel不同sheet中,我的设想步骤是
1.用vs编写一个webpart(貌似是做个 dll),安装部署到sharepoint中,
2.在此webpart中用CAML编写查询代码获取list数据
3.在此webpart中将获取的list数据转换出成datatable格式
4.在此webpart中再将datatable数据逐行循环写入到excel中 
 
因为以前只是开发asp.net,完全没有接触过Sharepoint,花了两天恶补了一下Sharepoint基础才有了以上的想法。
所有想确认
1.以上方式是否可行?
2. 因为是从不止一个list 中取数据(最多从 3个LIST中抓数据),CAML是否支持
3.CAML获得list数据返回的是XML格式的,再转换出成datatable格式是否可行

希望有大虾能给我指条明路,如果有示范代码那就更感激涕零了,




------解决方案--------------------
要将Sharepoint中list数据按照一定的计算和汇总
这个怎么理解?
跨List查询可以用SiteDataQuery
获得的数据是XML格式,用ServerAPI可以通过对象解析 SPListItemCollection,可以直接ToDataTable
------解决方案--------------------
---后面是我的回答
1.以上方式是否可行?----------------肯定可以
2. 因为是从不止一个list 中取数据(最多从 3个LIST中抓数据),CAML是否支持-----绝对支持
3.CAML获得list数据返回的是XML格式的,再转换出成datatable格式是否可行-------可以
----------------------------------------------
建议1 如果是2013 你考虑试试 power  pivot。很轻松。

------解决方案--------------------
引用:
Quote: 引用:

呵呵,我的sharepoint版本很低,肯定不是2013.
另外楼上语气非常肯定,看来是大虾级别的,
因为比较急
是否可以给点事例代码呢。如果分数不够可以再加,十分感谢。
假设有2个LIST,list1,list2,我要从list1取list1.aaa,从list2取list2.bbb,还有关联条件list1.ID=list2.ID.可以给我个SiteDataQuery
的简单写法吗?ServerAPI通过对象解析 SPListItemCollection直接ToDataTable ,ToDataTable这是sharepoint里面的一个自带方法还是需要自己另外写代码?

一个简单的方法是使用这个工具https://spcamlqueryhelper.codeplex.com/
构造出来query,去查找list1.aaa(list1.GetItems(query),返回值就是一个SPListItemCollection),然后再构造一个query,去list2查找list2.bbb,然后使用linq或者简单的循环找到list1.ID = list2.ID的item,放到一个SPListItemColletion中。
再使用SPListItemCollection的GetDataTable的方法获得一个DataTable对象(GetDataTable是SPListItemCollection的一个方法不用自己写)。数据量大的时候会慢。
如果想使用SiteDataQuery,一次查多个表,比较麻烦些,因为使用CAML的join和数据库的join是不一样的,有一些条件,我在网上看到的例子都是两个表之间需要有lookup column关联的。


我的这句话说错了:"如果想使用SiteDataQuery,一次查多个表,比较麻烦些,因为使用CAML的join和数据库的join是不一样的,有一些条件,我在网上看到的例子都是两个表之间需要有lookup column关联的。", 请忽略。

如果使用SiteDataQuery,可以参考http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.aspx
一次把list1和list2中的数据取出来(不能指定list1.ID=list2.ID这样来取),返回值是DataTable,然后根据list1.ID和list2.ID过滤出你想要的DataRow。
  相关解决方案