diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index d5b6c119..2a9cedad 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -3,6 +3,7 @@ name: MiniExcel Benchmarks
on:
workflow_dispatch:
release:
+ branches: [master, v1.x-maintenance]
types: [published]
permissions:
@@ -31,7 +32,7 @@ jobs:
BenchmarkMode: Automatic
BenchmarkSection: query
- name: Renaming result file
- run: mv MiniExcelLibs.Benchmarks.BenchmarkSections.QueryXlsxBenchmark-report-github.md query-benchmark.md
+ run: mv MiniExcelLib.Benchmarks.BenchmarkSections.QueryXlsxBenchmark-report-github.md query-benchmark.md
working-directory: ./benchmarks/MiniExcel.Benchmarks/BenchmarkDotNet.Artifacts/results
- name: Save benchmark results
uses: actions/upload-artifact@v4
@@ -61,7 +62,7 @@ jobs:
BenchmarkMode: Automatic
BenchmarkSection: create
- name: Renaming result file
- run: mv MiniExcelLibs.Benchmarks.BenchmarkSections.CreateXlsxBenchmark-report-github.md create-benchmark.md
+ run: mv MiniExcelLib.Benchmarks.BenchmarkSections.CreateXlsxBenchmark-report-github.md create-benchmark.md
working-directory: ./benchmarks/MiniExcel.Benchmarks/BenchmarkDotNet.Artifacts/results
- name: Save benchmark results
uses: actions/upload-artifact@v4
@@ -91,7 +92,7 @@ jobs:
BenchmarkMode: Automatic
BenchmarkSection: template
- name: Renaming result file
- run: mv MiniExcelLibs.Benchmarks.BenchmarkSections.TemplateXlsxBenchmark-report-github.md template-benchmark.md
+ run: mv MiniExcelLib.Benchmarks.BenchmarkSections.TemplateXlsxBenchmark-report-github.md template-benchmark.md
working-directory: ./benchmarks/MiniExcel.Benchmarks/BenchmarkDotNet.Artifacts/results
- name: Save benchmark results
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index a15f3d2a..25a1b9e9 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -59,8 +59,9 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v3
+
+# - name: Autobuild
+# uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -69,9 +70,8 @@ jobs:
# and modify them (or add more) to build your code if your project
# uses a compiled language
- #- run: |
- # make bootstrap
- # make release
+ - name: Manual build
+ run: dotnet build
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index a3b4eca6..bef3eae4 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -3,8 +3,7 @@ name: .NET
on:
pull_request:
push:
- branches:
- - master
+ branches: [master, v1.x-maintenance]
jobs:
build:
diff --git a/.gitignore b/.gitignore
index c79821f5..d17a1326 100644
--- a/.gitignore
+++ b/.gitignore
@@ -401,5 +401,6 @@ FodyWeavers.xsd
/BenchmarkDotNet.Artifacts
/tests/MiniExcel.Tests.AspNetMvc/packages
/TestTemplate
-/tests/MiniExcelTests/TemplateOptimization
-/samples/xlsx/Test_EnableWriteFilePath.xlsx
\ No newline at end of file
+/tests/MiniExcel.Tests/TemplateOptimization
+/samples/xlsx/Test_EnableWriteFilePath.xlsx
+/tests/MiniExcel.Core.Tests/TemplateOptimization/
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 261eeb9e..d84996be 100644
--- a/LICENSE
+++ b/LICENSE
@@ -175,18 +175,7 @@
END OF TERMS AND CONDITIONS
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2021 Wei Lin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MiniExcel.sln b/MiniExcel.sln
deleted file mode 100644
index bebab6af..00000000
--- a/MiniExcel.sln
+++ /dev/null
@@ -1,71 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31903.59
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniExcelLibs", "src\MiniExcel\MiniExcelLibs.csproj", "{097903C9-1F81-4427-B4C8-530CB59687B8}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs and setting", "Docs and setting", "{2AFABF2E-D6C3-4983-B43A-76ADA2BB2876}"
- ProjectSection(SolutionItems) = preProject
- .gitattributes = .gitattributes
- .gitignore = .gitignore
- appveyor.yml = appveyor.yml
- .github\workflows\dotnet.yml = .github\workflows\dotnet.yml
- LICENSE = LICENSE
- README-NuGet.md = README-NuGet.md
- README.md = README.md
- README.zh-CN.md = README.zh-CN.md
- README.zh-Hant.md = README.zh-Hant.md
- .github\workflows\benchmark.yml = .github\workflows\benchmark.yml
- .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml
- docs\core_logic_diagram.drawio = docs\core_logic_diagram.drawio
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CC1E0601-AEC9-42D7-8F6A-3FB3939EED16}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{359A7094-3353-48F2-B3E1-FE9E59698318}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Releases", "Releases", "{3E370222-8E9E-45E8-8DCD-E5F41EE52A39}"
- ProjectSection(SolutionItems) = preProject
- docs\README.md = docs\README.md
- docs\README.zh-CN.md = docs\README.zh-CN.md
- docs\README.zh-Hant.md = docs\README.zh-Hant.md
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniExcelTests", "tests\MiniExcelTests\MiniExcelTests.csproj", "{77F2C86B-0F17-4370-AB38-A089F9DF4ED5}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{77A8A169-168B-457F-AB5F-48F30D6BB33C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiniExcel.Benchmarks", "benchmarks\MiniExcel.Benchmarks\MiniExcel.Benchmarks.csproj", "{F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {097903C9-1F81-4427-B4C8-530CB59687B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {097903C9-1F81-4427-B4C8-530CB59687B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {097903C9-1F81-4427-B4C8-530CB59687B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {097903C9-1F81-4427-B4C8-530CB59687B8}.Release|Any CPU.Build.0 = Release|Any CPU
- {77F2C86B-0F17-4370-AB38-A089F9DF4ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {77F2C86B-0F17-4370-AB38-A089F9DF4ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {77F2C86B-0F17-4370-AB38-A089F9DF4ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {77F2C86B-0F17-4370-AB38-A089F9DF4ED5}.Release|Any CPU.Build.0 = Release|Any CPU
- {F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {097903C9-1F81-4427-B4C8-530CB59687B8} = {CC1E0601-AEC9-42D7-8F6A-3FB3939EED16}
- {77F2C86B-0F17-4370-AB38-A089F9DF4ED5} = {359A7094-3353-48F2-B3E1-FE9E59698318}
- {F1BDF4D7-F3C4-4114-82F6-EF81567DFBD8} = {77A8A169-168B-457F-AB5F-48F30D6BB33C}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {51DF25DA-2DCB-4883-90FE-399DA950D4F2}
- EndGlobalSection
-EndGlobal
diff --git a/MiniExcel.slnx b/MiniExcel.slnx
new file mode 100644
index 00000000..92c62e02
--- /dev/null
+++ b/MiniExcel.slnx
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/benchmarks/MiniExcel.Benchmarks/BenchmarkBase.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkBase.cs
index 44809c0f..bbd60a07 100644
--- a/benchmarks/MiniExcel.Benchmarks/BenchmarkBase.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkBase.cs
@@ -1,4 +1,4 @@
-namespace MiniExcelLibs.Benchmarks;
+namespace MiniExcelLib.Benchmarks;
public abstract class BenchmarkBase
{
diff --git a/benchmarks/MiniExcel.Benchmarks/Config.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkConfig.cs
similarity index 85%
rename from benchmarks/MiniExcel.Benchmarks/Config.cs
rename to benchmarks/MiniExcel.Benchmarks/BenchmarkConfig.cs
index 69334767..4128ccfd 100644
--- a/benchmarks/MiniExcel.Benchmarks/Config.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkConfig.cs
@@ -7,16 +7,18 @@
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Order;
-namespace MiniExcelLibs.Benchmarks;
+namespace MiniExcelLib.Benchmarks;
-public class Config : ManualConfig
+internal class BenchmarkConfig : ManualConfig
{
private const int Launches = 1;
private const int Warmups = 3;
private const int Unrolls = 3;
private const int Iterations = 3;
- public Config()
+ public static BenchmarkConfig Default => new();
+
+ private BenchmarkConfig()
{
AddLogger(ConsoleLogger.Default);
diff --git a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateXlsxBenchmark.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateExcelBenchmark.cs
similarity index 87%
rename from benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateXlsxBenchmark.cs
rename to benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateExcelBenchmark.cs
index 590da920..0ac47cd6 100644
--- a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateXlsxBenchmark.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/CreateExcelBenchmark.cs
@@ -4,26 +4,31 @@
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
-using MiniExcelLibs.Benchmarks.Utils;
+using MiniExcelLib.Benchmarks.Utils;
+using MiniExcelLib.Core;
using NPOI.XSSF.UserModel;
using OfficeOpenXml;
-namespace MiniExcelLibs.Benchmarks.BenchmarkSections;
+namespace MiniExcelLib.Benchmarks.BenchmarkSections;
-public class CreateXlsxBenchmark : BenchmarkBase
+public class CreateExcelBenchmark : BenchmarkBase
{
+ private OpenXmlExporter _exporter;
+
[GlobalSetup]
public void SetUp()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+
+ _exporter = MiniExcel.Exporters.GetOpenXmlExporter();
}
[Benchmark(Description = "MiniExcel Create Xlsx")]
public void MiniExcelCreateTest()
{
using var path = AutoDeletingPath.Create();
- MiniExcel.SaveAs(path.FilePath, GetValue());
+ _exporter.Export(path.FilePath, GetValue());
}
[Benchmark(Description = "ClosedXml Create Xlsx")]
@@ -72,10 +77,9 @@ public void NPOICreateTest()
row.CreateCell(9).SetCellValue(item.Column10);
i++;
}
- using (var fs = File.Create(path.FilePath))
- {
- wb.Write(fs);
- }
+
+ using var fs = File.Create(path.FilePath);
+ wb.Write(fs);
}
[Benchmark(Description = "OpenXmlSdk Create Xlsx by DOM mode")]
diff --git a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryXlsxBenchmark.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryExcelBenchmark.cs
similarity index 90%
rename from benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryXlsxBenchmark.cs
rename to benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryExcelBenchmark.cs
index f2f9a1a5..e0e18a30 100644
--- a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryXlsxBenchmark.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/QueryExcelBenchmark.cs
@@ -4,30 +4,35 @@
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using ExcelDataReader;
+using MiniExcelLib.Core;
using NPOI.XSSF.UserModel;
using OfficeOpenXml;
-namespace MiniExcelLibs.Benchmarks.BenchmarkSections;
+namespace MiniExcelLib.Benchmarks.BenchmarkSections;
-public class QueryXlsxBenchmark : BenchmarkBase
+public class QueryExcelBenchmark : BenchmarkBase
{
+ private OpenXmlImporter _importer;
+
[GlobalSetup]
public void SetUp()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+
+ _importer = MiniExcel.Importers.GetOpenXmlImporter();
}
[Benchmark(Description = "MiniExcel QueryFirst")]
public void MiniExcel_QueryFirst_Test()
{
- _ = MiniExcel.Query(FilePath).First();
+ _ = _importer.Query(FilePath).First();
}
[Benchmark(Description = "MiniExcel Query")]
public void MiniExcel_Query()
{
- foreach (var _ in MiniExcel.Query(FilePath)) { }
+ foreach (var _ in _importer.Query(FilePath)) { }
}
[Benchmark(Description = "ExcelDataReader QueryFirst")]
diff --git a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateXlsxBenchmark.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateExcelBenchmark.cs
similarity index 73%
rename from benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateXlsxBenchmark.cs
rename to benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateExcelBenchmark.cs
index 65eb5a53..c4fe16b7 100644
--- a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateXlsxBenchmark.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/TemplateExcelBenchmark.cs
@@ -1,11 +1,20 @@
using BenchmarkDotNet.Attributes;
using ClosedXML.Report;
-using MiniExcelLibs.Benchmarks.Utils;
+using MiniExcelLib.Benchmarks.Utils;
+using MiniExcelLib.Core;
-namespace MiniExcelLibs.Benchmarks.BenchmarkSections;
+namespace MiniExcelLib.Benchmarks.BenchmarkSections;
-public class TemplateXlsxBenchmark : BenchmarkBase
+public class TemplateExcelBenchmark : BenchmarkBase
{
+ private OpenXmlTemplater _templater;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ _templater = MiniExcel.Templaters.GetOpenXmlTemplater();
+ }
+
[Benchmark(Description = "MiniExcel Template Generate")]
public void MiniExcel_Template_Generate_Test()
{
@@ -22,7 +31,7 @@ public void MiniExcel_Template_Generate_Test()
})
};
- MiniExcel.SaveAsByTemplate(path.FilePath, templatePath, value);
+ _templater.ApplyTemplate(path.FilePath, templatePath, value);
}
[Benchmark(Description = "ClosedXml.Report Template Generate")]
diff --git a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/XlsxAsyncBenchmark.cs b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/XlsxAsyncBenchmark.cs
index 5c2044a9..ed327bfa 100644
--- a/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/XlsxAsyncBenchmark.cs
+++ b/benchmarks/MiniExcel.Benchmarks/BenchmarkSections/XlsxAsyncBenchmark.cs
@@ -1,17 +1,28 @@
using BenchmarkDotNet.Attributes;
-using MiniExcelLibs.Benchmarks.Utils;
+using MiniExcelLib.Benchmarks.Utils;
+using MiniExcelLib.Core;
-namespace MiniExcelLibs.Benchmarks.BenchmarkSections;
+namespace MiniExcelLib.Benchmarks.BenchmarkSections;
public class XlsxAsyncBenchmark : BenchmarkBase
{
+ private OpenXmlExporter _exporter;
+ private OpenXmlTemplater _templater;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ _exporter = MiniExcel.Exporters.GetOpenXmlExporter();
+ _templater = MiniExcel.Templaters.GetOpenXmlTemplater();
+ }
+
[Benchmark(Description = "MiniExcel Create Xlsx Async")]
public async Task MiniExcelCreateAsyncTest()
{
using var path = AutoDeletingPath.Create();
- using var stream = File.Create(path.FilePath);
+ await using var stream = File.Create(path.FilePath);
- await stream.SaveAsAsync(GetValue());
+ await _exporter.ExportAsync(stream, GetValue());
}
[Benchmark(Description = "MiniExcel Generate Template Async")]
@@ -30,6 +41,6 @@ public async Task MiniExcel_Template_Generate_Async_Test()
})
};
- await MiniExcel.SaveAsByTemplateAsync(path.FilePath, templatePath, value);
+ await _templater.ApplyTemplateAsync(path.FilePath, templatePath, value);
}
}
diff --git a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj
index 0d2a9f57..f2dcfd17 100644
--- a/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj
+++ b/benchmarks/MiniExcel.Benchmarks/MiniExcel.Benchmarks.csproj
@@ -6,7 +6,7 @@
enable
enable
latest
- MiniExcelLibs.Benchmarks
+ MiniExcelLib.Benchmarks
$(NoWarn);CA2000;CA2007
@@ -35,7 +35,7 @@
-
+
diff --git a/benchmarks/MiniExcel.Benchmarks/Program.cs b/benchmarks/MiniExcel.Benchmarks/Program.cs
index 792bcab9..8dddb5e7 100644
--- a/benchmarks/MiniExcel.Benchmarks/Program.cs
+++ b/benchmarks/MiniExcel.Benchmarks/Program.cs
@@ -1,28 +1,28 @@
using BenchmarkDotNet.Running;
-using MiniExcelLibs.Benchmarks;
-using MiniExcelLibs.Benchmarks.BenchmarkSections;
+using MiniExcelLib.Benchmarks;
+using MiniExcelLib.Benchmarks.BenchmarkSections;
if (Environment.GetEnvironmentVariable("BenchmarkMode") == "Automatic")
{
var section = Environment.GetEnvironmentVariable("BenchmarkSection");
var benchmark = section?.ToLowerInvariant().Trim() switch
{
- "query" => typeof(QueryXlsxBenchmark),
- "create" => typeof(CreateXlsxBenchmark),
- "template" => typeof(TemplateXlsxBenchmark),
+ "query" => typeof(QueryExcelBenchmark),
+ "create" => typeof(CreateExcelBenchmark),
+ "template" => typeof(TemplateExcelBenchmark),
_ => throw new ArgumentException($"Benchmark section {section} does not exist")
};
- BenchmarkRunner.Run(benchmark, new Config(), args);
+ BenchmarkRunner.Run(benchmark, BenchmarkConfig.Default, args);
}
else
{
BenchmarkSwitcher
.FromTypes(
[
- typeof(QueryXlsxBenchmark),
- typeof(CreateXlsxBenchmark),
- typeof(TemplateXlsxBenchmark)
+ typeof(QueryExcelBenchmark),
+ typeof(CreateExcelBenchmark),
+ typeof(TemplateExcelBenchmark)
])
- .Run(args, new Config());
+ .Run(args, BenchmarkConfig.Default);
}
\ No newline at end of file
diff --git a/benchmarks/MiniExcel.Benchmarks/Utils/AutoDeletingPath.cs b/benchmarks/MiniExcel.Benchmarks/Utils/AutoDeletingPath.cs
index 0ef13df7..44004c2d 100644
--- a/benchmarks/MiniExcel.Benchmarks/Utils/AutoDeletingPath.cs
+++ b/benchmarks/MiniExcel.Benchmarks/Utils/AutoDeletingPath.cs
@@ -1,4 +1,4 @@
-namespace MiniExcelLibs.Benchmarks.Utils;
+namespace MiniExcelLib.Benchmarks.Utils;
internal class AutoDeletingPath : IDisposable
{
diff --git a/benchmarks/MiniExcel.Benchmarks/Utils/Extensions.cs b/benchmarks/MiniExcel.Benchmarks/Utils/Extensions.cs
index fdaf3c32..5ff7dd46 100644
--- a/benchmarks/MiniExcel.Benchmarks/Utils/Extensions.cs
+++ b/benchmarks/MiniExcel.Benchmarks/Utils/Extensions.cs
@@ -1,6 +1,6 @@
using DocumentFormat.OpenXml.Spreadsheet;
-namespace MiniExcelLibs.Benchmarks.Utils;
+namespace MiniExcelLib.Benchmarks.Utils;
internal static class Extensions
{
diff --git a/src/MiniExcel/miniexcel.publickey b/miniexcel.publickey
similarity index 100%
rename from src/MiniExcel/miniexcel.publickey
rename to miniexcel.publickey
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 00000000..7c777d29
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,41 @@
+
+
+
+ netstandard2.0;net8.0;net10.0
+ 2.0.0-preview.1
+ enable
+ enable
+ 13
+
+
+
+ MiniExcel
+ Mini-Software
+ excel;xlsx;csv;micro-helper;mini;openxml;helper;
+ Fast, Low-Memory, Easy Excel .NET processing tool for importing, exporting and templating spreadsheets
+ Github : https://github.com/mini-software/MiniExcel
+ Gitee : https://gitee.com/dotnetchina/MiniExcel
+ Issues : https://github.com/mini-software/MiniExcel/issues
+ Todo : https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true
+ Wei Lin, Michele Bastione, PING-HSIU SHIH, Amos(izanhzh), eynarhaji, Mini-Software team
+ Wei Lin, 2021 onwards
+ en
+ https://raw.githubusercontent.com/mini-software/MiniExcel/master/LICENSE
+ Apache-2.0
+ https://github.com/mini-software/MiniExcel
+ https://github.com/mini-software/MiniExcel
+ Github
+ icon.png
+ Please Check [Release Notes](https://github.com/mini-software/MiniExcel/tree/master/docs)
+ true
+ true
+ snupkg
+ README.md
+
+
+
+ True
+ ..\miniexcel.snk
+
+
+
\ No newline at end of file
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
new file mode 100644
index 00000000..bb48b5d7
--- /dev/null
+++ b/src/Directory.Packages.props
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/MiniExcel.Core/Abstractions/IInputValueExtractor.cs b/src/MiniExcel.Core/Abstractions/IInputValueExtractor.cs
new file mode 100644
index 00000000..f0409064
--- /dev/null
+++ b/src/MiniExcel.Core/Abstractions/IInputValueExtractor.cs
@@ -0,0 +1,6 @@
+namespace MiniExcelLib.Core.Abstractions;
+
+public interface IInputValueExtractor
+{
+ IDictionary ToValueDictionary(object valueObject);
+}
\ No newline at end of file
diff --git a/src/MiniExcel/IMiniExcelDataReader.cs b/src/MiniExcel.Core/Abstractions/IMiniExcelDataReader.cs
similarity index 62%
rename from src/MiniExcel/IMiniExcelDataReader.cs
rename to src/MiniExcel.Core/Abstractions/IMiniExcelDataReader.cs
index 253374c7..a36aec05 100644
--- a/src/MiniExcel/IMiniExcelDataReader.cs
+++ b/src/MiniExcel.Core/Abstractions/IMiniExcelDataReader.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Data;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MiniExcelLibs;
+namespace MiniExcelLib.Core.Abstractions;
public interface IMiniExcelDataReader : IDataReader
#if NET8_0_OR_GREATER
@@ -12,7 +7,7 @@ public interface IMiniExcelDataReader : IDataReader
{
Task CloseAsync();
Task GetNameAsync(int i, CancellationToken cancellationToken = default);
- Task