Piotr Czajkowski 4 months ago
parent
commit
37266e1dab

+ 1 - 0
.gitignore

@@ -396,3 +396,4 @@ FodyWeavers.xsd
 
 # JetBrains Rider
 *.sln.iml
+ExcelInfo/.idea/*

+ 16 - 0
ExcelInfo/ExcelInfo.sln

@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExcelInfo", "ExcelInfo\ExcelInfo.csproj", "{368BE8F1-0CEE-4726-9918-B91D1FF332EC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{368BE8F1-0CEE-4726-9918-B91D1FF332EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{368BE8F1-0CEE-4726-9918-B91D1FF332EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{368BE8F1-0CEE-4726-9918-B91D1FF332EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{368BE8F1-0CEE-4726-9918-B91D1FF332EC}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal

+ 6 - 0
ExcelInfo/ExcelInfo/ColumnInfo.cs

@@ -0,0 +1,6 @@
+using ClosedXML.Excel;
+
+namespace ExcelInfo
+{
+    public record ColumnInfo(string Letter, string? Name, int NumberOfCells, XLDataType Type, int Position);
+}

+ 13 - 0
ExcelInfo/ExcelInfo/ExcelInfo.csproj

@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <TargetFramework>net7.0</TargetFramework>
+        <ImplicitUsings>enable</ImplicitUsings>
+        <Nullable>enable</Nullable>
+    </PropertyGroup>
+
+    <ItemGroup>
+      <PackageReference Include="ClosedXML" Version="0.102.1" />
+    </ItemGroup>
+
+</Project>

+ 42 - 0
ExcelInfo/ExcelInfo/WorksheetInfo.cs

@@ -0,0 +1,42 @@
+using ClosedXML.Excel;
+
+namespace ExcelInfo
+{
+    public class WorksheetInfo
+    {
+        private static XLDataType EstablishType(IXLCells? cells)
+        {
+            if (cells == null || !cells.Any())
+                return XLDataType.Error;
+
+            var numberOfCells = cells.Count();
+            return numberOfCells > 2 ? cells.Last().DataType : cells.First().DataType;
+        }
+
+        public static List<WorksheetRecord> GetInfoOnWorksheets(string workbookPath)
+        {
+            var workbook = new XLWorkbook(workbookPath);
+            return GetInfoOnWorksheets(workbook);
+        }
+
+        private static List<WorksheetRecord> GetInfoOnWorksheets(IXLWorkbook workbook)
+        {
+            var worksheets = new List<WorksheetRecord>();
+            foreach (var sheet in workbook.Worksheets)
+            {
+                var columns = new List<ColumnInfo>();
+                var firstRow = sheet.FirstRowUsed();
+                foreach (var cell in firstRow.CellsUsed())
+                {
+                    var columnCells = cell.WorksheetColumn().CellsUsed();
+                    var cellsType = EstablishType(columnCells);
+                    columns.Add(new ColumnInfo(cell.Address.ColumnLetter, cell.Value.ToString(), columnCells.Count() - 1, cellsType, cell.Address.ColumnNumber));
+                }
+
+                worksheets.Add(new WorksheetRecord(sheet.Position, sheet.Name, columns));
+            }
+
+            return worksheets;
+        }
+    }
+}

+ 4 - 0
ExcelInfo/ExcelInfo/WorksheetRecord.cs

@@ -0,0 +1,4 @@
+namespace ExcelInfo
+{
+    public record WorksheetRecord(int Position, string Name, IEnumerable<ColumnInfo> Columns);
+}