diff --git a/Excel_Adapter/CRUD/Read/Read.cs b/Excel_Adapter/CRUD/Read/Read.cs index 16d2133..fa7d2a1 100644 --- a/Excel_Adapter/CRUD/Read/Read.cs +++ b/Excel_Adapter/CRUD/Read/Read.cs @@ -26,12 +26,10 @@ using BH.oM.Adapter; using BH.oM.Adapters.Excel; using BH.oM.Base; -using BH.oM.Data.Collections; using BH.oM.Data.Requests; using ClosedXML.Excel; using System; using System.Collections.Generic; -using System.Data; using System.IO; using System.Linq; @@ -68,6 +66,16 @@ protected override IEnumerable Read(IRequest request, ActionConfig return new List(); } + return ReadExcel(workbook, request, actionConfig); + } + + + /***************************************************/ + /**** Private Methods ****/ + /***************************************************/ + + private List ReadExcel(XLWorkbook workbook, IRequest request, ActionConfig actionConfig) + { if (request is ObjectRequest) { List result = ReadExcel(workbook, ((ObjectRequest)request).Worksheet, ((ObjectRequest)request).Range, true).OfType().ToList(); @@ -81,6 +89,8 @@ protected override IEnumerable Read(IRequest request, ActionConfig return ReadExcel(workbook, ((CellContentsRequest)request).Worksheet, ((CellContentsRequest)request).Range, false); else if (request is WorksheetsRequest) return ReadExcel(workbook, ((WorksheetsRequest)request)); + else if (request is BatchRequest batchRequest) + return batchRequest.Requests.Select(x => new ResultItem { Objects = ReadExcel(workbook, x, actionConfig), OriginalRequest = x }).ToList(); else { BH.Engine.Base.Compute.RecordError($"Requests of type {request?.GetType()} are not supported by the Excel adapter."); @@ -88,18 +98,15 @@ protected override IEnumerable Read(IRequest request, ActionConfig } } - - /***************************************************/ - /**** Private Methods ****/ /***************************************************/ private List ReadExcel(XLWorkbook workbook, WorksheetsRequest request) { - var worksheets = Worksheets(workbook, null); + IEnumerable worksheets = Worksheets(workbook, null); List sheets = worksheets.Select(x => { - var sheet = new BH.oM.Adapters.Excel.Worksheet(); + Worksheet sheet = new BH.oM.Adapters.Excel.Worksheet(); sheet.Name = x.Name; return sheet; }).ToList(); @@ -120,13 +127,13 @@ private List ReadExcel(XLWorkbook workbook, string worksheet, CellR if (string.IsNullOrEmpty(range.From.Column)) range.From.Column = "A"; - if(range.From.Row == -1) + if (range.From.Row == -1) range.From.Row = 1; if (string.IsNullOrEmpty(range.To.Column)) range.To.Column = MaximumColumnName(workbook, worksheet); - if(range.To.Row == -1) + if (range.To.Row == -1) range.To.Row = MaximumRowNumber(workbook, worksheet); rangeString = range.ToExcel(); @@ -255,7 +262,7 @@ private List CreateCustomObjects(List rows) CustomObject result = new CustomObject(); Dictionary item = new Dictionary(); - for (int i = 0; i < Math.Min((int)keys.Count(), (int)row.Content?.Count()); i ++) + for (int i = 0; i < Math.Min((int)keys.Count(), (int)row.Content?.Count()); i++) { if (customProperties.Contains(keys[i])) result.SetPropertyValue(keys[i], row.Content[i]); @@ -273,19 +280,19 @@ private List CreateCustomObjects(List rows) private string MaximumColumnName(IXLWorkbook workbook, string worksheet) { - var sheet = Worksheets(workbook, worksheet).FirstOrDefault(); + IXLWorksheet sheet = Worksheets(workbook, worksheet).FirstOrDefault(); if (sheet == null) return "XFD"; //Maximum Excel Column name - var columnNumber = sheet.LastColumnUsed().ColumnNumber(); - return ConvertToColumnName(columnNumber); + int columnNumber = sheet.LastColumnUsed().ColumnNumber(); + return ConvertToColumnName(columnNumber); } /***************************************************/ private int MaximumRowNumber(IXLWorkbook workbook, string worksheet) { - var sheet = Worksheets(workbook, worksheet).FirstOrDefault(); + IXLWorksheet sheet = Worksheets(workbook, worksheet).FirstOrDefault(); if (sheet == null) return 1048576; //Maximum Excel Row number diff --git a/Excel_oM/ResultItem.cs b/Excel_oM/ResultItem.cs new file mode 100644 index 0000000..27e0206 --- /dev/null +++ b/Excel_oM/ResultItem.cs @@ -0,0 +1,39 @@ +/* + * This file is part of the Buildings and Habitats object Model (BHoM) + * Copyright (c) 2015 - 2025, the respective contributors. All rights reserved. + * + * Each contributor holds copyright over their respective contributions. + * The project versioning (Git) records all such contribution source information. + * + * + * The BHoM is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3.0 of the License, or + * (at your option) any later version. + * + * The BHoM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this code. If not, see . + */ + +using BH.oM.Base; +using BH.oM.Base.Attributes; +using BH.oM.Data.Requests; +using System.Collections.Generic; + +namespace BH.oM.Adapters.Excel +{ + public class ResultItem : BHoMObject + { + public virtual List Objects { get; set; } = new List(); + + public virtual IRequest OriginalRequest { get; set; } = null; + } +} + + +