| /*  | 
 |  * You may amend and distribute as you like, but don't remove this header! | 
 |  *  | 
 |  * EPPlus provides server-side generation of Excel 2007 spreadsheets. | 
 |  * See http://www.codeplex.com/EPPlus for details. | 
 |  *  | 
 |  * All rights reserved. | 
 |  *  | 
 |  * EPPlus is an Open Source project provided under the  | 
 |  * GNU General Public License (GPL) as published by the  | 
 |  * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 
 |  *  | 
 |  * The GNU General Public License can be viewed at http://www.opensource.org/licenses/gpl-license.php | 
 |  * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html | 
 |  *  | 
 |  * The code for this project may be used and redistributed by any means PROVIDING it is  | 
 |  * not sold for profit without the author's written consent, and providing that this notice  | 
 |  * and the author's name and all copyright notices remain intact. | 
 |  *  | 
 |  * All code and executables are provided "as is" with no warranty either express or implied.  | 
 |  * The author accepts no liability for any damage or loss of business that this product may cause. | 
 |  * | 
 |  *  Code change notes: | 
 |  *  | 
 |  * Author							Change						Date | 
 |  * ****************************************************************************** | 
 |  * Jan Källman                      Added       		        2011-05-03 | 
 |  *******************************************************************************/ | 
 | using System; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using System.Text; | 
 | using System.IO; | 
 | using OfficeOpenXml; | 
 | using System.Data; | 
 | using OfficeOpenXml.Table; | 
 | using System.Reflection; | 
 |  | 
 | namespace EPPlusSamples | 
 | { | 
 |     /// <summary> | 
 |     /// This class shows how to load data in a few ways | 
 |     /// </summary> | 
 |     public static class Sample13 | 
 |     { | 
 |         public class FileDTO | 
 |         { | 
 |             public string Name { get; set; } | 
 |             public long Size {get;set;} | 
 |             public DateTime Created {get;set;} | 
 |             public DateTime LastModified {get;set;} | 
 |  | 
 |             public bool IsDirectory=false;                  //This is a field variable | 
 |  | 
 |             public override string ToString() | 
 |             { | 
 |                 if (IsDirectory) | 
 |                 { | 
 |                     return Name + "\t<Dir>"; | 
 |                 } | 
 |                 else | 
 |                 { | 
 |                     return Name + "\t" + Size.ToString("#,##0"); | 
 |                 } | 
 |             } | 
 |         } | 
 |  | 
 |         public static void RunSample13(DirectoryInfo outputDir) | 
 |         { | 
 |             ExcelPackage pck = new ExcelPackage(); | 
 |  | 
 |             //Create a datatable with the directories and files from the root directory... | 
 |             DataTable dt = GetDataTable(outputDir.Root); | 
 |              | 
 |             var wsDt = pck.Workbook.Worksheets.Add("FromDataTable"); | 
 |  | 
 |             //Load the datatable and set the number formats... | 
 |             wsDt.Cells["A1"].LoadFromDataTable(dt, true, TableStyles.Medium9); | 
 |             wsDt.Cells[2, 2, dt.Rows.Count + 1, 2].Style.Numberformat.Format = "#,##0"; | 
 |             wsDt.Cells[2, 3, dt.Rows.Count + 1, 4].Style.Numberformat.Format = "mm-dd-yy"; | 
 |             wsDt.Cells[wsDt.Dimension.Address].AutoFitColumns(); | 
 |  | 
 |             //Select Name and Created-time... | 
 |             var collection = (from row in dt.Select() select new {Name=row["Name"], Created_time=(DateTime)row["Created"]}); | 
 |  | 
 |             var wsEnum = pck.Workbook.Worksheets.Add("FromAnonymous"); | 
 |              | 
 |             //Load the collection starting from cell A1... | 
 |             wsEnum.Cells["A1"].LoadFromCollection(collection, true, TableStyles.Medium9); | 
 |              | 
 |             //Add some formating... | 
 |             wsEnum.Cells[2, 2, dt.Rows.Count-1, 2].Style.Numberformat.Format = "mm-dd-yy"; | 
 |             wsEnum.Cells[wsEnum.Dimension.Address].AutoFitColumns(); | 
 |  | 
 |             //Load a list of FileDTO objects from the datatable... | 
 |             var wsList = pck.Workbook.Worksheets.Add("FromList"); | 
 |             List<FileDTO> list = (from row in dt.Select()  | 
 |                                   select new FileDTO {  | 
 |                                            Name = row["Name"].ToString(),  | 
 |                                            Size = row["Size"].GetType() == typeof(long) ? (long)row["Size"] : 0,  | 
 |                                            Created = (DateTime)row["Created"],  | 
 |                                            LastModified = (DateTime)row["Modified"], | 
 |                                            IsDirectory = (row["Size"]==DBNull.Value)  | 
 |                                   }).ToList<FileDTO>(); | 
 |  | 
 |             //Load files ordered by size... | 
 |             wsList.Cells["A1"].LoadFromCollection(from file in list  | 
 |                                                   orderby file.Size descending  | 
 |                                                   where file.IsDirectory == false  | 
 |                                                   select file, true, TableStyles.Medium9); | 
 |  | 
 |             wsList.Cells[2, 2, dt.Rows.Count + 1, 2].Style.Numberformat.Format = "#,##0"; | 
 |             wsList.Cells[2, 3, dt.Rows.Count + 1, 4].Style.Numberformat.Format = "mm-dd-yy"; | 
 |  | 
 |  | 
 |             //Load directories ordered by Name... | 
 |             wsList.Cells["F1"].LoadFromCollection(from file in list | 
 |                                                   orderby file.Name ascending | 
 |                                                   where file.IsDirectory == true | 
 |                                                   select new {  | 
 |                                                       Name=file.Name,  | 
 |                                                       Created = file.Created,  | 
 |                                                       Last_modified=file.LastModified}, //Use an underscore in the property name to get a space in the title. | 
 |                                                   true, TableStyles.Medium11); | 
 |  | 
 |             wsList.Cells[2, 7, dt.Rows.Count + 1, 8].Style.Numberformat.Format = "mm-dd-yy"; | 
 |  | 
 |             //Load the list using a specified array of MemberInfo objects. Properties, fields and methods are supported. | 
 |             var rng = wsList.Cells["J1"].LoadFromCollection(list, | 
 |                                                   true, | 
 |                                                   TableStyles.Medium10, | 
 |                                                   BindingFlags.Instance | BindingFlags.Public, | 
 |                                                   new MemberInfo[] { | 
 |                                                       typeof(FileDTO).GetProperty("Name"), | 
 |                                                       typeof(FileDTO).GetField("IsDirectory"), | 
 |                                                       typeof(FileDTO).GetMethod("ToString")} | 
 |                                                   ); | 
 |  | 
 |             wsList.Tables.GetFromRange(rng).Columns[2].Name = "Description"; | 
 |  | 
 |             wsList.Cells[wsList.Dimension.Address].AutoFitColumns(); | 
 |  | 
 |             //...and save | 
 |             var fi = new FileInfo(outputDir.FullName + @"\Sample13.xlsx"); | 
 |             if (fi.Exists) | 
 |             { | 
 |                 fi.Delete(); | 
 |             } | 
 |             pck.SaveAs(fi); | 
 |         } | 
 |  | 
 |         private static DataTable GetDataTable(DirectoryInfo dir) | 
 |         { | 
 |             DataTable dt = new DataTable("RootDir"); | 
 |             dt.Columns.Add("Name", typeof(string)); | 
 |             dt.Columns.Add("Size", typeof(long)); | 
 |             dt.Columns.Add("Created", typeof(DateTime)); | 
 |             dt.Columns.Add("Modified", typeof(DateTime)); | 
 |             foreach (var item in dir.GetDirectories()) | 
 |             { | 
 |                 var row=dt.NewRow(); | 
 |                 row["Name"]=item.Name; | 
 |                 row["Created"]=item.CreationTime; | 
 |                 row["Modified"]=item.LastWriteTime; | 
 |  | 
 |                 dt.Rows.Add(row); | 
 |             } | 
 |             foreach (var item in dir.GetFiles()) | 
 |             { | 
 |                 var row = dt.NewRow(); | 
 |                 row["Name"] = item.Name; | 
 |                 row["Size"] = item.Length; | 
 |                 row["Created"] = item.CreationTime; | 
 |                 row["Modified"] = item.LastWriteTime; | 
 |  | 
 |                 dt.Rows.Add(row); | 
 |             } | 
 |             return dt; | 
 |         } | 
 |     } | 
 | } |