Excel-Import
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user