git_bsmd/ENI2/Excel/ExcelManager.cs

91 lines
3.5 KiB
C#

// Copyright (c) 2017- Informatikbüro Daniel Schick
// Description: Controller class for reading excel sheets (label-based)
using bsmd.database;
using log4net;
using System;
using System.Collections.Generic;
using System.IO;
namespace ENI2.Excel
{
public class ExcelManager
{
private readonly ILog _log = LogManager.GetLogger(typeof(ExcelManager));
public ExcelManager()
{
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
}
public bool Import(string filePath, MessageCore core, List<Message.NotificationClass> classes, out string readMessage)
{
bool result = false;
readMessage = "";
try
{
using (ExcelReader reader = new ExcelReader(filePath))
{
switch (reader.SheetType)
{
case ExcelReader.SheetTypeEnum.BSMD:
{
ImportHeader importHeader = new ImportHeader
{
ImportDate = DateTime.Now
};
result = ExcelUtil.ProcessSheet(reader, out readMessage, core, classes); // actual import
if (result)
{
importHeader.MessageCoreId = core.Id.Value;
importHeader.Filename = Path.GetFileName(filePath);
ReportingParty thisUser = ReportingParty.CurrentReportingParty;
importHeader.SenderEmail = thisUser.EMail;
importHeader.ReportingPartyId = thisUser.Id;
DBManager.Instance.Save(importHeader);
// Saving plaintext data (ImportHeader + ImportValues) for each reading
List<ImportValue> valueList = importHeader.CreateUpdateList(reader.ImportValues);
// Bulk save recommended here..
ImportValue.BulkSave(valueList);
}
break;
}
case ExcelReader.SheetTypeEnum.DAKOSY:
{
result = DakosyExcelReader.ProcessSheet(reader, out readMessage, core, classes);
// at this point do not save import data values
break;
}
default:
{
_log.WarnFormat("Unknown excel sheet type {0}", reader.SheetType);
break;
}
}
}
}
catch (Exception ex)
{
readMessage = ex.Message;
_log.Error(ex);
}
return result;
}
internal void Export(string fileName, MessageCore core, List<Message> messages, out string resultMessage, bool isRefSheet)
{
resultMessage = "";
// Create ExcelWriter
using (ExcelWriter ew = new ExcelWriter(fileName, isRefSheet))
{
ew.WriteData(messages, core, out resultMessage, isRefSheet);
ew.Save();
}
}
}
}