Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,12 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup .NET 9
uses: actions/setup-dotnet@v1
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: |
8.0.x
10.0.x

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
10 changes: 4 additions & 6 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@ jobs:

steps:
- uses: actions/checkout@v4
- name: Setup .NET 8
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Setup .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: |
8.0.x
10.0.x
- name: Restore dependencies
run: dotnet restore
env:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
Expand Down
9 changes: 3 additions & 6 deletions src/MiniExcel/MiniExcelLibs.csproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net462;netstandard2.0;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;net8.0;net10.0</TargetFrameworks>
<Version>2.0.0-beta.1</Version>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net462'">
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<LangVersion>13</LangVersion>
</PropertyGroup>

Expand Down Expand Up @@ -40,10 +40,7 @@ Todo : https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true</De
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net462'">
<Reference Include="System.IO.Compression" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net462'">
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.Bcl.Memory" Version="9.0.0" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.0" />
</ItemGroup>
Expand Down
46 changes: 42 additions & 4 deletions src/MiniExcel/OpenXml/ExcelOpenXmlSheetReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,11 @@ public static async Task<ExcelOpenXmlSheetReader> CreateAsync(Stream stream, IMi
maxColumnIndex = endColumnIndex.Value;
}

#if NET10_0_OR_GREATER
using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var sheetStream = sheetEntry.Open();
#endif
using var reader = XmlReader.Create(sheetStream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns))
Expand Down Expand Up @@ -491,7 +495,11 @@ private async Task SetSharedStringsAsync(CancellationToken cancellationToken = d
return;

var idx = 0;
#if NET10_0_OR_GREATER
using var stream = await sharedStringsEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var stream = sharedStringsEntry.Open();
#endif
if (_config.EnableSharedStringCache && sharedStringsEntry.Length >= _config.SharedStringCacheSize)
{
SharedStrings = new SharedStringsDiskCache();
Expand Down Expand Up @@ -525,8 +533,13 @@ internal static async IAsyncEnumerable<SheetRecord> ReadWorkbookAsync(ReadOnlyCo
true
#endif
);

using var stream = entries.Single(w => w.FullName == "xl/workbook.xml").Open();

var entry = entries.Single(w => w.FullName == "xl/workbook.xml");
#if NET10_0_OR_GREATER
using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var stream = entry.Open();
#endif
using var reader = XmlReader.Create(stream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "workbook", Ns))
Expand Down Expand Up @@ -616,7 +629,12 @@ await reader.SkipAsync()
.CreateListAsync(cancellationToken)
.ConfigureAwait(false);

using var stream = entries.Single(w => w.FullName == "xl/_rels/workbook.xml.rels").Open();
var entry = entries.Single(w => w.FullName == "xl/_rels/workbook.xml.rels");
#if NET10_0_OR_GREATER
using var stream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var stream = entry.Open();
#endif
using var reader = XmlReader.Create(stream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "Relationships", "http://schemas.openxmlformats.org/package/2006/relationships"))
Expand Down Expand Up @@ -836,7 +854,11 @@ internal async Task<IList<ExcelRange>> GetDimensionsAsync(CancellationToken canc

var withoutCr = false;

#if NET10_0_OR_GREATER
using (var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
using (var sheetStream = sheet.Open())
#endif
using (var reader = XmlReader.Create(sheetStream, xmlSettings))
{
while (await reader.ReadAsync().ConfigureAwait(false))
Expand Down Expand Up @@ -884,7 +906,11 @@ internal async Task<IList<ExcelRange>> GetDimensionsAsync(CancellationToken canc

if (withoutCr)
{
#if NET10_0_OR_GREATER
using var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var sheetStream = sheet.Open();
#endif
using var reader = XmlReader.Create(sheetStream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns))
Expand Down Expand Up @@ -978,7 +1004,11 @@ internal static async Task<GetMaxRowColumnIndexResult> TryGetMaxRowColumnIndexAs
bool withoutCr = false;
int maxRowIndex = -1;
int maxColumnIndex = -1;
#if NET10_0_OR_GREATER
using (var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
using (var sheetStream = sheetEntry.Open())
#endif
using (var reader = XmlReader.Create(sheetStream, xmlSettings))
{
while (await reader.ReadAsync()
Expand Down Expand Up @@ -1028,7 +1058,11 @@ internal static async Task<GetMaxRowColumnIndexResult> TryGetMaxRowColumnIndexAs

if (withoutCr)
{
#if NET10_0_OR_GREATER
using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var sheetStream = sheetEntry.Open();
#endif
using var reader = XmlReader.Create(sheetStream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns))
Expand Down Expand Up @@ -1101,8 +1135,12 @@ internal static async Task<bool> TryGetMergeCellsAsync(ZipArchiveEntry sheetEntr
#endif
);
var mergeCells = new MergeCells();


#if NET10_0_OR_GREATER
using var sheetStream = await sheetEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var sheetStream = sheetEntry.Open();
#endif
using var reader = XmlReader.Create(sheetStream, xmlSettings);

if (!XmlReaderHelper.IsStartElement(reader, "worksheet", Ns))
Expand Down
26 changes: 25 additions & 1 deletion src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

private int _currentSheetIndex = 0;

public ExcelOpenXmlSheetWriter(Stream stream, object? value, string? sheetName, IMiniExcelConfiguration? configuration, bool printHeader)

Check warning on line 36 in src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs

View workflow job for this annotation

GitHub Actions / build

Non-nullable field '_cellXfIdMap' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable.
{
_stream = stream;

Expand Down Expand Up @@ -78,7 +78,11 @@
}
finally
{
#if NET10_0_OR_GREATER
await _archive.DisposeAsync().ConfigureAwait(false);
#else
_archive.Dispose();
#endif
}
}

Expand Down Expand Up @@ -156,7 +160,11 @@
}
finally
{
#if NET10_0_OR_GREATER
await _archive.DisposeAsync().ConfigureAwait(false);
#else
_archive.Dispose();
#endif
}
}

Expand All @@ -176,7 +184,11 @@
var entry = _archive.CreateEntry(sheetPath, CompressionLevel.Fastest);
var rowsWritten = 0;

#if NET10_0_OR_GREATER
using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var zipStream = entry.Open();
#endif
using var writer = new MiniExcelStreamWriter(zipStream, Utf8WithBom, _configuration.BufferSize);

if (values is null)
Expand Down Expand Up @@ -597,7 +609,11 @@
}
#if NET5_0_OR_GREATER
#pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task
await using var stream = contentTypesZipEntry.Open();
#if NET10_0_OR_GREATER
await using var stream = await contentTypesZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
await using var stream = contentTypesZipEntry.Open();
#endif
#pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task
#else
using var stream = contentTypesZipEntry.Open();
Expand Down Expand Up @@ -645,7 +661,11 @@

#if NET5_0_OR_GREATER
#pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task
#if NET10_0_OR_GREATER
await using (var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
await using (var zipStream = entry.Open())
#endif
#pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task
#else
using (var zipStream = entry.Open())
Expand All @@ -666,7 +686,11 @@

#if NET5_0_OR_GREATER
#pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task
#if NET10_0_OR_GREATER
await using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
await using var zipStream = entry.Open();
#endif
await zipStream.WriteAsync(content, cancellationToken).ConfigureAwait(false);
#pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task
#else
Expand Down
20 changes: 20 additions & 0 deletions src/MiniExcel/OpenXml/Styles/SheetStyleBuildContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,20 @@ public async Task InitializeAsync(SheetStyleElementInfos generateElementInfos, C
_oldStyleXmlZipEntry = _archive.Mode == ZipArchiveMode.Update ? _archive.Entries.SingleOrDefault(s => s.FullName == ExcelFileNames.Styles) : null;
if (_oldStyleXmlZipEntry is not null)
{
#if NET10_0_OR_GREATER
using (var oldStyleXmlStream = await _oldStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
using (var oldStyleXmlStream = _oldStyleXmlZipEntry.Open())
#endif
{
using var reader = XmlReader.Create(oldStyleXmlStream, new XmlReaderSettings { IgnoreWhitespace = true, Async = true });
OldElementInfos = await ReadSheetStyleElementInfosAsync(reader, cancellationToken).ConfigureAwait(false);
}
#if NET10_0_OR_GREATER
_oldXmlReaderStream = await _oldStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
_oldXmlReaderStream = _oldStyleXmlZipEntry.Open();
#endif
OldXmlReader = XmlReader.Create(_oldXmlReaderStream, new XmlReaderSettings { IgnoreWhitespace = true, Async = true });

_newStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles + ".temp", CompressionLevel.Fastest);
Expand All @@ -120,7 +128,11 @@ public async Task InitializeAsync(SheetStyleElementInfos generateElementInfos, C
_newStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles, CompressionLevel.Fastest);
}

#if NET10_0_OR_GREATER
_newXmlWriterStream = await _newStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
_newXmlWriterStream = _newStyleXmlZipEntry.Open();
#endif
NewXmlWriter = XmlWriter.Create(_newXmlWriterStream, new XmlWriterSettings { Indent = true, Encoding = _encoding, Async = true });

GenerateElementInfos = generateElementInfos;
Expand Down Expand Up @@ -243,8 +255,16 @@ public async Task FinalizeAndUpdateZipDictionaryAsync(CancellationToken cancella
_oldStyleXmlZipEntry = null;
var finalStyleXmlZipEntry = _archive.CreateEntry(ExcelFileNames.Styles, CompressionLevel.Fastest);

#if NET10_0_OR_GREATER
using (var tempStream = await _newStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
using (var tempStream = _newStyleXmlZipEntry.Open())
#endif
#if NET10_0_OR_GREATER
using (var newStream = await finalStyleXmlZipEntry.OpenAsync(cancellationToken).ConfigureAwait(false))
#else
using (var newStream = finalStyleXmlZipEntry.Open())
#endif
{
await tempStream.CopyToAsync(newStream, 4096, cancellationToken).ConfigureAwait(false);
}
Expand Down
13 changes: 11 additions & 2 deletions src/MiniExcel/Picture/MiniExcelPictureImplement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,17 @@ public static async Task AddPictureAsync(Stream excelStream, CancellationToken c
var imageName = $"image{Guid.NewGuid():N}.png";
var imagePath = $"xl/media/{imageName}";
var imageEntry = archive.CreateEntry(imagePath);

using (var entryStream = imageEntry.Open())

#if NET10_0_OR_GREATER
using var entryStream = await imageEntry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var entryStream = imageEntry.Open();
#endif
#if NET5_0_OR_GREATER
await entryStream.WriteAsync(imageBytes.AsMemory(), cancellationToken).ConfigureAwait(false);
#else
await entryStream.WriteAsync(imageBytes, 0, imageBytes.Length, cancellationToken).ConfigureAwait(false);
#endif
{
#pragma warning disable CA1835
await entryStream.WriteAsync(imageBytes, 0, imageBytes.Length, CancellationToken.None).ConfigureAwait(false);
Expand Down
12 changes: 12 additions & 0 deletions src/MiniExcel/SaveByTemplate/ExcelOpenXmlTemplate.MergeCells.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,27 @@ await stream.CopyToAsync(_outputFileStream
_xMergeCellInfos = [];
_newXMergeCellInfos = [];

#if NET10_0_OR_GREATER
var sheetStream = await sheet.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
var sheetStream = sheet.Open();
#endif
var fullName = sheet.FullName;

var entry = archive.ZipFile.CreateEntry(fullName);
#if NET10_0_OR_GREATER
using var zipStream = await entry.OpenAsync(cancellationToken).ConfigureAwait(false);
#else
using var zipStream = entry.Open();
#endif
await GenerateSheetXmlImplByUpdateModeAsync(sheet, zipStream, sheetStream, new Dictionary<string, object>(), sharedStrings, mergeCells: true, cancellationToken).ConfigureAwait(false);
//doc.Save(zipStream); //don't do it beacause: https://user-images.githubusercontent.com/12729184/114361127-61a5d100-9ba8-11eb-9bb9-34f076ee28a2.png
}

#if NET10_0_OR_GREATER
await archive.ZipFile.DisposeAsync().ConfigureAwait(false);
#else
archive.ZipFile.Dispose();
#endif
}
}
Loading
Loading