zoukankan      html  css  js  c++  java
  • 层级结构SPList导出到Excel

    using System;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.Office.Interop.Excel;
    using System.Data;
    using System.Web;
    
    namespace NuctechProject.Layouts.Settings
    {
        public partial class ToExcel : LayoutsPageBase
        {
            private static readonly string _rootUrl = HttpContext .Current.Request.Url.Scheme + "://" +
                                                      HttpContext.Current.Request.Url.Host;
    
            private static readonly string weburl = _rootUrl + "/" ;
            private readonly string StrUrl = weburl + "newTemplate/"; //公告站点地址
            protected void Page_Load(object sender, EventArgs e)
            {
                SPSecurity.RunWithElevatedPrivileges(delegate
                {
                    using (var site = new SPSite(StrUrl))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            //构建DataTable,规则为第一个为任务名,最后一个为层级
                            var dt = new System.Data.DataTable();
                            dt.Columns.Add( "里程碑" , typeof( string));
                            dt.Columns.Add( "责任人" , typeof( string));
                            dt.Columns.Add( "任务状态" , typeof( string));
                            dt.Columns.Add( "ceng", typeof (string)); //不用更改,不显示,需放在最后
                            SPList spList = web.Lists["TastTemp" ];
                            dt = GetDataTable(0, spList, dt, 1);
                            DataTabletoExcel(dt, @"C:UsersAdministratorDesktopstrTemplateFileName.xlsx" );
                        }
                    }
                    ;
                });
            }
            public static void DataTabletoExcel(System.Data. DataTable tmpDataTable, string strFileName)
            {
                if (tmpDataTable == null )
                    return;
                int rowNum = tmpDataTable.Rows.Count;
                int columnNum = tmpDataTable.Columns.Count;
                int rowIndex = 1;
                int columnIndex = 0;
                int cengMax = 0;
                cengMax = Convert.ToInt32(tmpDataTable.Compute("max(ceng)" , ""));
                int cengValue = cengMax - 1;
                Microsoft.Office.Interop.Excel. Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                xlApp.DefaultFilePath = "";
                xlApp.DisplayAlerts = true;
                xlApp.SheetsInNewWorkbook = 1;
                Workbook xlBook = xlApp.Workbooks.Add(true );
                //导入列名
                for (int i = 0; i < (columnNum + cengValue); i++)
                {
                    if (i == 1)
                    {
                        xlApp.Cells[1, i] = tmpDataTable.Columns[i - 1].ColumnName;
                    }
                    if (i <= cengMax && i > 1)
                    {
                        xlApp.Cells[1, i] = GetCapital(i - 1) + "级任务" ;
                    }
                    if (i > cengMax)
                    {
                        xlApp.Cells[1, i] = tmpDataTable.Columns[(i - cengMax)].ColumnName;
                    }
                }
                //将DataTable中的数据导入Excel中
                for (int i = 0; i < rowNum; i++)
                {
                    rowIndex++;
                    columnIndex = 0;
                    for (int j = 0; j < (columnNum - 1); j++)
                    {
                        if (j < 1)
                        {
                            int ceng = Convert .ToInt16(tmpDataTable.Rows[i][columnNum - 1].ToString());
                            xlApp.Cells[i + 2, ceng] = tmpDataTable.Rows[i][j].ToString();
                        }
                        if (j >= 1)
                        {
                            xlApp.Cells[i + 2, j + cengMax] = tmpDataTable.Rows[i][j].ToString();
                        }
                        columnIndex++;
                    }
                }
                xlApp.get_Range((Microsoft.Office.Interop.Excel. Range)xlApp.Cells[1, 1], (Microsoft.Office.Interop.Excel.Range )xlApp.Cells[1, Convert.ToInt16(columnNum + cengValue - 1)]).Interior.ColorIndex = 16;
                xlApp.get_Range((Microsoft.Office.Interop.Excel. Range)xlApp.Cells[1, 1], (Microsoft.Office.Interop.Excel.Range )xlApp.Cells[10000, 100]).EntireColumn.AutoFit();//列宽自适应
                xlBook.SaveCopyAs(strFileName);
            }
    
            /// <summary>
            /// 获取一个任务的子任务
            /// </summary>
            /// <param name="item"></param>
            /// <param name="parentKey"></param>
            /// <param name="list"></param>
            /// <returns></returns>
            public static System.Data.DataTable GetDataTable( int parentId, SPList list, System.Data.DataTable dt, int ceng)
            {
                SPQuery query = new SPQuery();
                query.Query = @"<Where>
                              <Eq>
                                 <FieldRef Name='PID' />
                                 <Value Type='Number'>" + parentId.ToString() + @"</Value>
                              </Eq>
                           </Where>" ;
                SPListItemCollection items = list.GetItems(query);
                foreach (SPListItem item in items)
                {
                    string taskName = item["TaskName" ].ToString();
                    string assignedTo = item["AssignedTo" ].ToString().Substring(item["AssignedTo"].ToString().LastIndexOf( "#") + 1);
                    string status = item["Status" ].ToString();
                    dt.Rows.Add(taskName, assignedTo, status, ceng.ToString());
                    dt = GetDataTable(item.ID, list, dt, ceng + 1);
                }
                return dt;
            }
            public static string GetCapital( int number)
            {
                switch (number)
                {
                    case 1:
                        return "一" ;
                    case 2:
                        return "二" ;
                    case 3:
                        return "三" ;
                    case 4:
                        return "四" ;
                    case 5:
                        return "五" ;
                }
                return "更多" ;
            }
        }
    
    
    }
    

      

  • 相关阅读:
    [BZOJ4755][JSOI2016]扭动的回文串(manacher+Hash)
    十二省联考2019部分题解
    [BZOJ2959]长跑(LCT+并查集)
    [BZOJ4541][HNOI2016]矿区(平面图转对偶图)
    笛卡尔树
    [CF896C]Willem, Chtholly and Seniorious(珂朵莉树)
    [BZOJ4349]最小树形图
    [BZOJ1858][SCOI2010]序列操作(线段树)
    [PA2014]Parking
    [PA2014]Budowa
  • 原文地址:https://www.cnblogs.com/yixiaozi/p/3844313.html
Copyright © 2011-2022 走看看