Excel-Import

This commit is contained in:
2026-05-29 16:10:20 +02:00
parent 12f10a44c4
commit 80b74d1ded
4 changed files with 160 additions and 1 deletions
+41
View File
@@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Components.Authorization;
using Raven.Client.Documents;
using ZahlenAnalyse.Web.Models;
using ExcelDataReader;
using System.Data;
namespace ZahlenAnalyse.Web.Services;
@@ -118,4 +120,43 @@ public class WorkspaceService
.OrderByDescending(f => f.Date)
.ToListAsync();
}
public async Task ImportFromExcelAsync(string workspaceId, Stream fileStream)
{
// Encoding für deutsche Excel-Dateien
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
using var reader = ExcelReaderFactory.CreateReader(fileStream);
var result = reader.AsDataSet(new ExcelDataSetConfiguration() {
ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
});
var dataTable = result.Tables[0];
using var session = _store.OpenAsyncSession();
foreach (DataRow row in dataTable.Rows)
{
var fakt = new AnalysisFakt
{
WorkspaceId = workspaceId,
Date = Convert.ToDateTime(row["Datum"]),
Amount = Convert.ToDecimal(row["Betrag"]),
// Hier mappen wir dynamisch die Dimensionen
Dimensions = new Dictionary<string, string>()
};
// Wir gehen davon aus, dass deine Excel-Spaltennamen
// den Dimensions-Namen entsprechen
foreach (var col in dataTable.Columns.Cast<DataColumn>().Skip(2)) // Datum/Betrag überspringen
{
fakt.Dimensions[col.ColumnName] = row[col.ColumnName].ToString() ?? "";
}
await EnrichWithAuditDataAsync(fakt);
await session.StoreAsync(fakt);
}
await session.SaveChangesAsync();
}
}