Compare commits
6 Commits
c6c48d25da
...
1bbf82b5d1
| Author | SHA1 | Date | |
|---|---|---|---|
| 1bbf82b5d1 | |||
| 14ac873794 | |||
| b25a570388 | |||
| b1b178b0f4 | |||
| d868f5add5 | |||
| 05c64cc1eb |
@ -12,7 +12,7 @@
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8.1" />
|
||||
</startup>
|
||||
<applicationSettings>
|
||||
<ENI2.Properties.Settings>
|
||||
@ -85,7 +85,7 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.8" newVersion="9.0.0.8" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.9" newVersion="9.0.0.9" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
@ -121,7 +121,23 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Pkcs" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.8" newVersion="9.0.0.8" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.9" newVersion="9.0.0.9" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.6.0" newVersion="4.1.6.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="DocumentFormat.OpenXml.Framework" publicKeyToken="8fb06cb64d019a17" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="8fb06cb64d019a17" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.HashCode" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
@ -11,13 +11,10 @@ using log4net;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System;
|
||||
using System.Net;
|
||||
using ENI2.LockingServiceReference;
|
||||
using ENI2.Util;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace ENI2
|
||||
{
|
||||
|
||||
@ -2,23 +2,23 @@
|
||||
// Description: Request dbh ids for Maersk data lists
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using Microsoft.Win32;
|
||||
|
||||
using bsmd.database;
|
||||
using ExcelDataReader;
|
||||
using System.Collections.ObjectModel;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.Excel;
|
||||
using ENI2.Locode;
|
||||
using ENI2.Util;
|
||||
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace ENI2.Controls
|
||||
{
|
||||
@ -336,80 +336,72 @@ namespace ENI2.Controls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
|
||||
|
||||
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<MaerskData> importData = new List<MaerskData>();
|
||||
|
||||
bool isFirstRow = true;
|
||||
int currentRow = 0;
|
||||
int currentRow = 1; // Start at 1 since we skip header
|
||||
bool imosAreOkay = true;
|
||||
|
||||
try
|
||||
{
|
||||
while (reader.Read())
|
||||
foreach (var row in rows)
|
||||
{
|
||||
currentRow++;
|
||||
|
||||
if (isFirstRow)
|
||||
{
|
||||
isFirstRow = false; // this must be a header row, skip
|
||||
continue;
|
||||
}
|
||||
|
||||
if (reader.FieldCount < 13)
|
||||
if (worksheet.RangeUsed().ColumnCount() < 13)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 13 columns of data");
|
||||
}
|
||||
|
||||
MaerskData md = new MaerskData();
|
||||
if (!reader.IsDBNull(0))
|
||||
|
||||
if (!row.Cell(1).IsEmpty())
|
||||
{
|
||||
if (reader.GetFieldType(0) == typeof(DateTime))
|
||||
var cellValue = row.Cell(1).Value;
|
||||
if (cellValue.IsDateTime)
|
||||
{
|
||||
md.ETA = reader.GetDateTime(0);
|
||||
var dateTime = cellValue.GetDateTime();
|
||||
md.ETA = dateTime;
|
||||
md.ColA = md.ETA.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
md.ColA = reader.GetString(0);
|
||||
md.ColA = row.Cell(1).GetString();
|
||||
if (DateTime.TryParse(md.ColA, out DateTime aDateTime))
|
||||
md.ETA = aDateTime;
|
||||
}
|
||||
}
|
||||
if (!reader.IsDBNull(1)) md.ColB = reader.ReadAsString(1);
|
||||
if (!reader.IsDBNull(2)) md.ColC = reader.ReadAsString(2);
|
||||
if (!reader.IsDBNull(3)) md.ColD = reader.ReadAsString(3);
|
||||
if (!reader.IsDBNull(4)) md.ColE = reader.ReadAsString(4);
|
||||
if (!reader.IsDBNull(5)) md.ColF = reader.ReadAsString(5);
|
||||
if (!reader.IsDBNull(6)) md.ColG = reader.ReadAsString(6);
|
||||
if (!reader.IsDBNull(7)) md.ColH = reader.ReadAsString(7);
|
||||
if (!reader.IsDBNull(8)) md.ColI = reader.ReadAsString(8);
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) md.ColB = row.Cell(2).GetString();
|
||||
if (!row.Cell(3).IsEmpty()) md.ColC = row.Cell(3).GetString();
|
||||
if (!row.Cell(4).IsEmpty()) md.ColD = row.Cell(4).GetString();
|
||||
if (!row.Cell(5).IsEmpty()) md.ColE = row.Cell(5).GetString();
|
||||
if (!row.Cell(6).IsEmpty()) md.ColF = row.Cell(6).GetString();
|
||||
if (!row.Cell(7).IsEmpty()) md.ColG = row.Cell(7).GetString();
|
||||
if (!row.Cell(8).IsEmpty()) md.ColH = row.Cell(8).GetString();
|
||||
if (!row.Cell(9).IsEmpty()) md.ColI = row.Cell(9).GetString();
|
||||
|
||||
if (md.ColI != null)
|
||||
{
|
||||
if ((md.ColI.Contains("bremerhaven", StringComparison.OrdinalIgnoreCase) && this.PortLocode.Equals("DEWVN")) ||
|
||||
(md.ColI.Contains("eurogate", StringComparison.OrdinalIgnoreCase) && this.PortLocode.Equals("DEBRV")))
|
||||
throw new InvalidOperationException($"{md.ColI} found in import to {PortLocode}, this is probably an error. Aborting import");
|
||||
}
|
||||
if (!reader.IsDBNull(9)) md.ColJ = reader.ReadAsString(9);
|
||||
|
||||
if (!row.Cell(10).IsEmpty()) md.ColJ = row.Cell(10).GetString();
|
||||
if (md.ColJ == null) continue;
|
||||
if (!(md.ColJ.Equals("msk", StringComparison.OrdinalIgnoreCase) || md.ColJ.Equals("sgl", StringComparison.OrdinalIgnoreCase))) continue; // skip operator we are not interested in
|
||||
if (!reader.IsDBNull(10)) md.ColK = reader.ReadAsString(10);
|
||||
if (!reader.IsDBNull(11)) md.ColL = reader.ReadAsString(11);
|
||||
if (!reader.IsDBNull(12)) md.ColM = reader.ReadAsString(12);
|
||||
if (!reader.IsDBNull(13)) md.Remark = reader.ReadAsString(13);
|
||||
|
||||
if(!md.ColF.IsNullOrEmpty())
|
||||
if (!row.Cell(11).IsEmpty()) md.ColK = row.Cell(11).GetString();
|
||||
if (!row.Cell(12).IsEmpty()) md.ColL = row.Cell(12).GetString();
|
||||
if (!row.Cell(13).IsEmpty()) md.ColM = row.Cell(13).GetString();
|
||||
if (!row.Cell(14).IsEmpty()) md.Remark = row.Cell(14).GetString();
|
||||
|
||||
if (!md.ColF.IsNullOrEmpty())
|
||||
{
|
||||
if (Int32.TryParse(md.ColF, out int imo))
|
||||
{
|
||||
@ -435,13 +427,6 @@ namespace ENI2.Controls
|
||||
}
|
||||
|
||||
importData.Add(md);
|
||||
|
||||
if (isFirstRow) isFirstRow = false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (imosAreOkay && importData.Count > 0)
|
||||
@ -471,10 +456,10 @@ namespace ENI2.Controls
|
||||
if (md.MessageCore != null)
|
||||
{
|
||||
MaerskData existingMD = await DBManagerAsync.LoadMaerskDataForCoreAsync(md.MessageCore.Id.Value);
|
||||
if(existingMD == null)
|
||||
if (existingMD == null)
|
||||
{
|
||||
// we have a core but no MarskData for this import -> save it
|
||||
md.MessageCoreId = (Guid) md.MessageCore.Id;
|
||||
md.MessageCoreId = (Guid)md.MessageCore.Id;
|
||||
_ = DBManagerAsync.SaveAsync(md);
|
||||
}
|
||||
else
|
||||
@ -498,8 +483,11 @@ namespace ENI2.Controls
|
||||
this.dataGridPOCores.Items.Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ using System.Windows.Controls;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using ENI2.Locode;
|
||||
using ExcelDataReader;
|
||||
using ClosedXML.Excel;
|
||||
using bsmd.database;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Linq;
|
||||
@ -1049,47 +1049,45 @@ namespace ENI2.DetailViewControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<CREW> importCrew = new List<CREW>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if(reader.FieldCount < 13)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
// Check if we have at least 13 columns
|
||||
if (worksheet.RangeUsed().ColumnCount() < 13)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 13 columns of data");
|
||||
}
|
||||
|
||||
CREW crew = new CREW();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0).Clean();
|
||||
if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1).Clean();
|
||||
if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean();
|
||||
if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5).Clean();
|
||||
if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7);
|
||||
if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8));
|
||||
if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = reader.ReadAsString(9).Clean();
|
||||
if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11);
|
||||
if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = reader.ReadAsString(12).Clean();
|
||||
|
||||
// Check if first two cells are empty
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean();
|
||||
if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean();
|
||||
if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean();
|
||||
if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime();
|
||||
if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString());
|
||||
if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean();
|
||||
if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime();
|
||||
if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean();
|
||||
|
||||
crew.MessageHeader = this._crewMessage;
|
||||
crew.IsDirty = true;
|
||||
@ -1097,12 +1095,6 @@ namespace ENI2.DetailViewControls
|
||||
this._crewMessage.Elements.Add(crew);
|
||||
importCrew.Add(crew);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importCrew.Count > 0)
|
||||
{
|
||||
@ -1111,8 +1103,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1124,49 +1119,46 @@ namespace ENI2.DetailViewControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<CREWD> importCrew = new List<CREWD>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.FieldCount < 13)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
// Check if we have at least 13 columns
|
||||
if (worksheet.RangeUsed().ColumnCount() < 13)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 13 columns of data");
|
||||
}
|
||||
|
||||
CREWD crew = new CREWD();
|
||||
crew.IsDeparture = true;
|
||||
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0);
|
||||
if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1);
|
||||
if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean();
|
||||
if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5);
|
||||
if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7);
|
||||
if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8));
|
||||
if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = reader.ReadAsString(9);
|
||||
if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11);
|
||||
if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = reader.ReadAsString(12);
|
||||
// Check if first two cells are empty
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean();
|
||||
if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean();
|
||||
if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean();
|
||||
if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime();
|
||||
if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString());
|
||||
if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean();
|
||||
if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime();
|
||||
if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean();
|
||||
|
||||
crew.MessageHeader = this._crewdMessage;
|
||||
crew.IsDirty = true;
|
||||
@ -1174,12 +1166,6 @@ namespace ENI2.DetailViewControls
|
||||
this._crewdMessage.Elements.Add(crew);
|
||||
importCrew.Add(crew);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importCrew.Count > 0)
|
||||
{
|
||||
@ -1188,8 +1174,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1201,56 +1190,51 @@ namespace ENI2.DetailViewControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1);
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PAS> importPassenger = new List<PAS>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 17)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 17)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 17 columns of data");
|
||||
}
|
||||
|
||||
PAS pas = new PAS();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString().Clean();
|
||||
if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString().Clean();
|
||||
if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3).Clean();
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean();
|
||||
if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null)
|
||||
pas.PassengerPortOfEmbarkation = null;
|
||||
if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4).Clean();
|
||||
if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null)
|
||||
pas.PassengerPortOfDisembarkation = null;
|
||||
if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5));
|
||||
if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7).Clean();
|
||||
if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper().Clean();
|
||||
if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9);
|
||||
if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10));
|
||||
if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString(11).Clean();
|
||||
if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13);
|
||||
if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14).Clean();
|
||||
if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15).Clean();
|
||||
if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16).Clean();
|
||||
if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString());
|
||||
if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean();
|
||||
if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper().Clean();
|
||||
if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime();
|
||||
if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString());
|
||||
if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean();
|
||||
if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime();
|
||||
if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean();
|
||||
if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean();
|
||||
if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean();
|
||||
|
||||
pas.MessageHeader = this._pasMessage;
|
||||
pas.IsDirty = true;
|
||||
@ -1258,12 +1242,6 @@ namespace ENI2.DetailViewControls
|
||||
this._pasMessage.Elements.Add(pas);
|
||||
importPassenger.Add(pas);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPassenger.Count > 0)
|
||||
{
|
||||
@ -1272,7 +1250,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1284,69 +1266,58 @@ namespace ENI2.DetailViewControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1);
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PASD> importPassenger = new List<PASD>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 17)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 17)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 17 columns of data");
|
||||
}
|
||||
|
||||
PASD pas = new PASD();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString();
|
||||
if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString();
|
||||
if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean();
|
||||
if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null)
|
||||
pas.PassengerPortOfEmbarkation = null;
|
||||
if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4);
|
||||
if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null)
|
||||
pas.PassengerPortOfDisembarkation = null;
|
||||
if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5));
|
||||
if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7);
|
||||
if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9);
|
||||
if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10));
|
||||
if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString(11);
|
||||
if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13);
|
||||
if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14);
|
||||
if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15);
|
||||
if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16);
|
||||
if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString());
|
||||
if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean();
|
||||
if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime();
|
||||
if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString());
|
||||
if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean();
|
||||
if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime();
|
||||
if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean();
|
||||
if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean();
|
||||
if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean();
|
||||
|
||||
pas.MessageHeader = this._pasMessage;
|
||||
pas.MessageHeader = this._pasdMessage;
|
||||
pas.IsDirty = true;
|
||||
pas.Identifier = PASD.GetNewIdentifier(this._pasdMessage.Elements);
|
||||
this._pasdMessage.Elements.Add(pas);
|
||||
importPassenger.Add(pas);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPassenger.Count > 0)
|
||||
{
|
||||
@ -1355,7 +1326,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,18 +2,16 @@
|
||||
// Description: MDH Meldung Bearbeitungsseite
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using Microsoft.Win32;
|
||||
using System.IO;
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using bsmd.database;
|
||||
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace ENI2.DetailViewControls
|
||||
{
|
||||
@ -289,47 +287,44 @@ namespace ENI2.DetailViewControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed(); // Get all rows with data
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PortOfCallLast30Days> importPoC30 = new List<PortOfCallLast30Days>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.FieldCount < 3)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 3)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have at least 3 Columns of data");
|
||||
}
|
||||
|
||||
PortOfCallLast30Days poc30 = new PortOfCallLast30Days();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) poc30.PortOfCallLast30DaysLocode = reader.GetString(0);
|
||||
if (!reader.IsDBNull(1)) poc30.PortOfCallLast30DaysDateOfDeparture = reader.GetDateTime(1);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) poc30.PortOfCallLast30DaysLocode = row.Cell(1).GetString();
|
||||
if (!row.Cell(2).IsEmpty()) poc30.PortOfCallLast30DaysDateOfDeparture = row.Cell(2).GetDateTime();
|
||||
|
||||
string boolString = "";
|
||||
if (!reader.IsDBNull(2)) boolString = reader.GetString(2);
|
||||
poc30.PortOfCallLast30DaysCrewMembersJoined = (boolString.Equals("y", StringComparison.OrdinalIgnoreCase) || (boolString.Equals("yes", StringComparison.OrdinalIgnoreCase)) ||
|
||||
if (!row.Cell(3).IsEmpty()) boolString = row.Cell(3).GetString();
|
||||
poc30.PortOfCallLast30DaysCrewMembersJoined = (boolString.Equals("y", StringComparison.OrdinalIgnoreCase) ||
|
||||
(boolString.Equals("yes", StringComparison.OrdinalIgnoreCase)) ||
|
||||
(boolString.Equals("j", StringComparison.OrdinalIgnoreCase)));
|
||||
|
||||
if(reader.FieldCount > 3)
|
||||
if (worksheet.RangeUsed().ColumnCount() > 3)
|
||||
{
|
||||
string allNewCrew = reader.GetString(3)?.Trim();
|
||||
if(!allNewCrew.IsNullOrEmpty())
|
||||
string allNewCrew = row.Cell(4).IsEmpty() ? null : row.Cell(4).GetString()?.Trim();
|
||||
if (!allNewCrew.IsNullOrEmpty())
|
||||
{
|
||||
string[] crewNames = allNewCrew.Split(',', ';');
|
||||
for(int i=0;i<crewNames.Length;i++)
|
||||
for (int i = 0; i < crewNames.Length; i++)
|
||||
{
|
||||
string crewName = crewNames[i].Trim();
|
||||
if (crewName.IsNullOrEmpty()) continue;
|
||||
@ -337,7 +332,6 @@ namespace ENI2.DetailViewControls
|
||||
poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewName;
|
||||
poc30Crew.PortOfCallLast30Days = poc30;
|
||||
poc30.CrewJoinedShip.Add(poc30Crew);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -346,12 +340,6 @@ namespace ENI2.DetailViewControls
|
||||
this._mdh.PortOfCallLast30Days.Add(poc30);
|
||||
importPoC30.Add(poc30);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPoC30.Count > 0)
|
||||
{
|
||||
@ -361,8 +349,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,18 +2,17 @@
|
||||
// Description: SEC Meldung Bearbeitungsseite
|
||||
//
|
||||
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using bsmd.database;
|
||||
|
||||
using System.Windows.Data;
|
||||
using System;
|
||||
using Microsoft.Win32;
|
||||
using System.IO;
|
||||
using ExcelDataReader;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace ENI2.DetailViewControls
|
||||
{
|
||||
@ -345,53 +344,53 @@ namespace ENI2.DetailViewControls
|
||||
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed(); // Get all rows with data
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<LastTenPortFacilitiesCalled> importL10C = new List<LastTenPortFacilitiesCalled>();
|
||||
|
||||
try
|
||||
{
|
||||
do
|
||||
{
|
||||
int cnt = 0;
|
||||
while (reader.Read() && (cnt < 10))
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 8)
|
||||
if (cnt >= 10) break; // Maximum 10 rows
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 8)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 8 Columns of data");
|
||||
}
|
||||
|
||||
LastTenPortFacilitiesCalled l10c = new LastTenPortFacilitiesCalled();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) l10c.PortFacilityPortName = reader.GetString(0);
|
||||
if (!reader.IsDBNull(2)) l10c.PortFacilityPortCountry = reader.GetString(2);
|
||||
if (!reader.IsDBNull(3)) l10c.PortFacilityPortLoCode = reader.GetString(3);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) l10c.PortFacilityPortName = row.Cell(1).GetString();
|
||||
if (!row.Cell(3).IsEmpty()) l10c.PortFacilityPortCountry = row.Cell(3).GetString();
|
||||
if (!row.Cell(4).IsEmpty()) l10c.PortFacilityPortLoCode = row.Cell(4).GetString();
|
||||
|
||||
object o = null;
|
||||
if (!reader.IsDBNull(4)) o = reader.GetValue(4);
|
||||
if(o != null) l10c.PortFacilityDateOfArrival = Convert.ToDateTime(o);
|
||||
if (!reader.IsDBNull(5)) o = reader.GetValue(5);
|
||||
if (!row.Cell(5).IsEmpty()) o = row.Cell(5).Value;
|
||||
if (o != null) l10c.PortFacilityDateOfArrival = Convert.ToDateTime(o);
|
||||
|
||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value;
|
||||
if (o != null) l10c.PortFacilityDateOfDeparture = Convert.ToDateTime(o);
|
||||
// if (!reader.IsDBNull(4)) l10c.PortFacilityDateOfArrival = reader.GetDateTime(4);
|
||||
// if (!reader.IsDBNull(5)) l10c.PortFacilityDateOfDeparture = reader.GetDateTime(5);
|
||||
if (!reader.IsDBNull(6)) o = reader.GetValue(6);
|
||||
|
||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value;
|
||||
if (o != null) l10c.PortFacilityShipSecurityLevel = Convert.ToByte(o);
|
||||
if (!reader.IsDBNull(7)) o = reader.GetValue(7);
|
||||
|
||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value;
|
||||
int gisis = Convert.ToInt32(o);
|
||||
if (!reader.IsDBNull(7)) l10c.PortFacilityGISISCode = gisis.ToString().PadLeft(4, '0');
|
||||
if (!reader.IsDBNull(8)) l10c.PortFacilitySecurityMattersToReport = reader.GetString(8);
|
||||
if (l10c.PortFacilitySecurityMattersToReport.Equals("nil", StringComparison.CurrentCultureIgnoreCase))
|
||||
if (!row.Cell(8).IsEmpty()) l10c.PortFacilityGISISCode = gisis.ToString().PadLeft(4, '0');
|
||||
|
||||
if (!row.Cell(9).IsEmpty()) l10c.PortFacilitySecurityMattersToReport = row.Cell(9).GetString();
|
||||
if (l10c.PortFacilitySecurityMattersToReport?.Equals("nil", StringComparison.CurrentCultureIgnoreCase) == true)
|
||||
l10c.PortFacilitySecurityMattersToReport = null;
|
||||
if (!reader.IsDBNull(9)) l10c.PortFacilityGISISCodeLocode = reader.GetString(9);
|
||||
|
||||
if (!row.Cell(10).IsEmpty()) l10c.PortFacilityGISISCodeLocode = row.Cell(10).GetString();
|
||||
|
||||
l10c.SEC = this._sec;
|
||||
l10c.IsDirty = true;
|
||||
l10c.Identifier = LastTenPortFacilitiesCalled.GetNewIdentifier(this._sec.LastTenPortFacilitesCalled);
|
||||
@ -399,12 +398,6 @@ namespace ENI2.DetailViewControls
|
||||
importL10C.Add(l10c);
|
||||
cnt++;
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importL10C.Count > 0)
|
||||
{
|
||||
@ -413,8 +406,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textL10PImported, importL10C.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,17 +2,17 @@
|
||||
// Description: Detailansicht Müllmeldung
|
||||
//
|
||||
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using bsmd.database;
|
||||
using ExcelDataReader;
|
||||
using System.IO;
|
||||
using System;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace ENI2.DetailViewControls
|
||||
{
|
||||
@ -483,43 +483,30 @@ namespace ENI2.DetailViewControls
|
||||
ofd.Filter = "Excel Files|*.xls;*.xlsx";
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<Waste> importWasteList = new List<Waste>();
|
||||
|
||||
try
|
||||
{
|
||||
do
|
||||
{
|
||||
// skip first three rows
|
||||
reader.Read();
|
||||
reader.Read();
|
||||
reader.Read();
|
||||
|
||||
int cnt = 0;
|
||||
object o = null;
|
||||
|
||||
// Diese Funktion kann das "alte" Sheet Format nicht mehr einlesen!
|
||||
|
||||
while (reader.Read() && (cnt < 35))
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (reader.FieldCount < 9)
|
||||
if (cnt >= 35) break; // Maximum 35 rows
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 9)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 9 Columns of data");
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(1)) o = reader.GetValue(1); else o = null;
|
||||
if (!row.Cell(2).IsEmpty()) o = row.Cell(2).Value; else o = null;
|
||||
if ((o != null) && Int32.TryParse(o.ToString(), out int wasteType))
|
||||
{
|
||||
Waste waste = _was.GetWasteForType(wasteType);
|
||||
@ -537,22 +524,22 @@ namespace ENI2.DetailViewControls
|
||||
waste.IsDirty = true;
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(4)) waste.WasteDescription = reader.GetString(4);
|
||||
if (!row.Cell(5).IsEmpty()) waste.WasteDescription = row.Cell(5).GetString();
|
||||
if (waste.WasteDescription.IsNullOrEmpty())
|
||||
waste.WasteDescription = "-";
|
||||
|
||||
if (!reader.IsDBNull(5)) o = reader.GetValue(5); else o = null;
|
||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value; else o = null;
|
||||
if (o != null) waste.WasteDisposalAmount_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(6)) o = reader.GetValue(6); else o = null;
|
||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value; else o = null;
|
||||
if (o != null) waste.WasteCapacity_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(7)) o = reader.GetValue(7); else o = null;
|
||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value; else o = null;
|
||||
if (o != null) waste.WasteAmountRetained_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(8)) waste.WasteDisposalPort = reader.GetString(8).ToUpper();
|
||||
if (!row.Cell(9).IsEmpty()) waste.WasteDisposalPort = row.Cell(9).GetString().ToUpper();
|
||||
|
||||
if (!reader.IsDBNull(9)) o = reader.GetValue(9); else o = null;
|
||||
if (!row.Cell(10).IsEmpty()) o = row.Cell(10).Value; else o = null;
|
||||
if (o != null) waste.WasteAmountGeneratedTillNextPort_MTQ = Convert.ToDouble(o);
|
||||
|
||||
importWasteList.Add(waste);
|
||||
@ -560,13 +547,6 @@ namespace ENI2.DetailViewControls
|
||||
}
|
||||
}
|
||||
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importWasteList.Count > 0)
|
||||
{
|
||||
this.dataGridWaste.Items.Refresh();
|
||||
@ -574,9 +554,11 @@ namespace ENI2.DetailViewControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteList.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
141
ENI2/ENI2.csproj
141
ENI2/ENI2.csproj
@ -9,7 +9,7 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ENI2</RootNamespace>
|
||||
<AssemblyName>ENI2Test</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
@ -134,75 +134,92 @@
|
||||
<CodeAnalysisRuleSet>..\code.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ExcelDataReader, Version=3.7.0.0, Culture=neutral, PublicKeyToken=93517dbe6a4012fa, processorArchitecture=MSIL">
|
||||
<HintPath>packages\ExcelDataReader.3.7.0\lib\net462\ExcelDataReader.dll</HintPath>
|
||||
<Reference Include="ClosedXML, Version=0.105.0.0, Culture=neutral, PublicKeyToken=fd1eb21b62ae805b, processorArchitecture=MSIL">
|
||||
<HintPath>packages\ClosedXML.0.105.0\lib\netstandard2.0\ClosedXML.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ClosedXML.Parser, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1d5f7376574c51ec, processorArchitecture=MSIL">
|
||||
<HintPath>packages\ClosedXML.Parser.2.0.0\lib\netstandard2.0\ClosedXML.Parser.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DocumentFormat.OpenXml, Version=3.3.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
||||
<HintPath>packages\DocumentFormat.OpenXml.3.3.0\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DocumentFormat.OpenXml.Framework, Version=3.3.0.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
|
||||
<HintPath>packages\DocumentFormat.OpenXml.Framework.3.3.0\lib\net46\DocumentFormat.OpenXml.Framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ExcelNumberFormat, Version=1.1.0.0, Culture=neutral, PublicKeyToken=23c6f5d73be07eca, processorArchitecture=MSIL">
|
||||
<HintPath>packages\ExcelNumberFormat.1.1.0\lib\net20\ExcelNumberFormat.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=3.2.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>packages\log4net.3.2.0\lib\net462\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=9.0.0.8, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Bcl.AsyncInterfaces.9.0.8\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=9.0.0.9, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Bcl.AsyncInterfaces.9.0.9\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Bcl.Cryptography, Version=9.0.0.8, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Bcl.Cryptography.9.0.8\lib\net462\Microsoft.Bcl.Cryptography.dll</HintPath>
|
||||
<Reference Include="Microsoft.Bcl.Cryptography, Version=9.0.0.9, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Bcl.Cryptography.9.0.9\lib\net462\Microsoft.Bcl.Cryptography.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.DependencyInjection.9.0.8\lib\net462\Microsoft.Extensions.DependencyInjection.dll</HintPath>
|
||||
<Reference Include="Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Bcl.HashCode.6.0.0\lib\net462\Microsoft.Bcl.HashCode.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.DependencyInjection.Abstractions.9.0.8\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.DependencyInjection.9.0.9\lib\net462\Microsoft.Extensions.DependencyInjection.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Logging.9.0.8\lib\net462\Microsoft.Extensions.Logging.dll</HintPath>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.DependencyInjection.Abstractions.9.0.9\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Logging.Abstractions.9.0.8\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||
<Reference Include="Microsoft.Extensions.Logging, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Logging.9.0.9\lib\net462\Microsoft.Extensions.Logging.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Options, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Options.9.0.8\lib\net462\Microsoft.Extensions.Options.dll</HintPath>
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Logging.Abstractions.9.0.9\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Primitives, Version=9.0.0.8, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Primitives.9.0.8\lib\net462\Microsoft.Extensions.Primitives.dll</HintPath>
|
||||
<Reference Include="Microsoft.Extensions.Options, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Options.9.0.9\lib\net462\Microsoft.Extensions.Options.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
<Reference Include="Microsoft.Extensions.Primitives, Version=9.0.0.9, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Microsoft.Extensions.Primitives.9.0.9\lib\net462\Microsoft.Extensions.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MigraDoc.DocumentObjectModel, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.1\lib\netstandard2.0\MigraDoc.DocumentObjectModel.dll</HintPath>
|
||||
<Reference Include="MigraDoc.DocumentObjectModel, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.2\lib\netstandard2.0\MigraDoc.DocumentObjectModel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MigraDoc.Rendering, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.1\lib\netstandard2.0\MigraDoc.Rendering.dll</HintPath>
|
||||
<Reference Include="MigraDoc.Rendering, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.2\lib\netstandard2.0\MigraDoc.Rendering.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MigraDoc.RtfRendering, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.1\lib\netstandard2.0\MigraDoc.RtfRendering.dll</HintPath>
|
||||
<Reference Include="MigraDoc.RtfRendering, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp-MigraDoc.6.2.2\lib\netstandard2.0\MigraDoc.RtfRendering.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.dll</HintPath>
|
||||
<Reference Include="PdfSharp, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.BarCodes, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.BarCodes.dll</HintPath>
|
||||
<Reference Include="PdfSharp.BarCodes, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.BarCodes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.Charting, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.Charting.dll</HintPath>
|
||||
<Reference Include="PdfSharp.Charting, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.Charting.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.Cryptography, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.Cryptography.dll</HintPath>
|
||||
<Reference Include="PdfSharp.Cryptography, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.Cryptography.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.Quality, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.Quality.dll</HintPath>
|
||||
<Reference Include="PdfSharp.Quality, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.Quality.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.Shared, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.Shared.dll</HintPath>
|
||||
<Reference Include="PdfSharp.Shared, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.Shared.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.Snippets, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.Snippets.dll</HintPath>
|
||||
<Reference Include="PdfSharp.Snippets, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.Snippets.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.System, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.System.dll</HintPath>
|
||||
<Reference Include="PdfSharp.System, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.System.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PdfSharp.WPFonts, Version=6.2.1.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.1\lib\netstandard2.0\PdfSharp.WPFonts.dll</HintPath>
|
||||
<Reference Include="PdfSharp.WPFonts, Version=6.2.2.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
|
||||
<HintPath>packages\PDFsharp.6.2.2\lib\netstandard2.0\PdfSharp.WPFonts.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RBush, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c77e27b81f4d0187, processorArchitecture=MSIL">
|
||||
<HintPath>packages\RBush.Signed.4.0.0\lib\net47\RBush.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SixLabors.Fonts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d998eea7b14cab13, processorArchitecture=MSIL">
|
||||
<HintPath>packages\SixLabors.Fonts.1.0.0\lib\netstandard2.0\SixLabors.Fonts.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
@ -214,12 +231,12 @@
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.119.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\lib\net46\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=9.0.0.8, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Diagnostics.DiagnosticSource.9.0.8\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=9.0.0.9, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Diagnostics.DiagnosticSource.9.0.9\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Formats.Asn1, Version=9.0.0.8, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Formats.Asn1.9.0.8\lib\net462\System.Formats.Asn1.dll</HintPath>
|
||||
<Reference Include="System.Formats.Asn1, Version=9.0.0.9, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Formats.Asn1.9.0.9\lib\net462\System.Formats.Asn1.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression" />
|
||||
<Reference Include="System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
@ -234,8 +251,8 @@
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Serialization" />
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Security.Cryptography.Pkcs, Version=9.0.0.8, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Security.Cryptography.Pkcs.9.0.8\lib\net462\System.Security.Cryptography.Pkcs.dll</HintPath>
|
||||
<Reference Include="System.Security.Cryptography.Pkcs, Version=9.0.0.9, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>packages\System.Security.Cryptography.Pkcs.9.0.9\lib\net462\System.Security.Cryptography.Pkcs.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceModel" />
|
||||
<Reference Include="System.ServiceModel.Web" />
|
||||
@ -257,20 +274,20 @@
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="Xceed.Wpf.AvalonDock, Version=4.7.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.4.7.25104.5739\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.5.0.0\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=4.7.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.4.7.25104.5739\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.5.0.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=4.7.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.4.7.25104.5739\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.5.0.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=4.7.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.4.7.25104.5739\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath>
|
||||
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.5.0.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xceed.Wpf.Toolkit, Version=4.7.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.4.7.25104.5739\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath>
|
||||
<Reference Include="Xceed.Wpf.Toolkit, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Extended.Wpf.Toolkit.5.0.0\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
// Copyright (c) 2017-today Informatikbüro Daniel Schick
|
||||
// Base class excel (writer not yet implemented but eventually..)
|
||||
// Base class excel access (named ranges, colorizing, etc.)
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using System.Runtime.InteropServices;
|
||||
using ClosedXML.Excel;
|
||||
using log4net;
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
|
||||
namespace ENI2.Excel
|
||||
{
|
||||
@ -20,10 +21,8 @@ namespace ENI2.Excel
|
||||
|
||||
protected CountryMode _countryMode = CountryMode.DE;
|
||||
|
||||
protected Workbooks _excelWorkbooks;
|
||||
protected Workbook _workBook;
|
||||
protected Application _excelApp;
|
||||
protected Dictionary<string, Name> _nameDict;
|
||||
protected XLWorkbook _workBook;
|
||||
protected Dictionary<string, IXLDefinedName> _nameDict;
|
||||
protected ILog _log;
|
||||
|
||||
#endregion Fields
|
||||
@ -32,12 +31,7 @@ namespace ENI2.Excel
|
||||
|
||||
public ExcelBase()
|
||||
{
|
||||
|
||||
_log = LogManager.GetLogger(this.GetType().Name);
|
||||
|
||||
this._excelApp = new Application();
|
||||
this._excelApp.DisplayAlerts = false;
|
||||
this._excelWorkbooks = _excelApp.Workbooks;
|
||||
}
|
||||
|
||||
#endregion Construction
|
||||
@ -46,9 +40,9 @@ namespace ENI2.Excel
|
||||
|
||||
internal CountryMode Mode { get { return _countryMode; } }
|
||||
|
||||
internal Dictionary<string, Name> NameDict { get { return _nameDict; } }
|
||||
internal Dictionary<string, IXLDefinedName> NameDict { get { return _nameDict; } }
|
||||
|
||||
internal Sheets Worksheets { get { return _workBook.Worksheets; } }
|
||||
internal IXLWorksheets Worksheets { get { return _workBook?.Worksheets; } }
|
||||
|
||||
#endregion
|
||||
|
||||
@ -56,17 +50,17 @@ namespace ENI2.Excel
|
||||
|
||||
protected void InitNameFields()
|
||||
{
|
||||
_nameDict = new Dictionary<string, Name>();
|
||||
_nameDict = new Dictionary<string, IXLDefinedName>();
|
||||
int bookCnt = 0;
|
||||
foreach (Name name in _workBook.Names)
|
||||
{
|
||||
string theValue = name.Value;
|
||||
// Namensbezug: =SheetZelle. Leere Referenzen überspringen (kommt immer mal wieder vor!)
|
||||
|
||||
string nameKey = name.Name;
|
||||
// Get workbook-level defined names
|
||||
foreach (var definedName in _workBook.DefinedNames)
|
||||
{
|
||||
string nameKey = definedName.Name;
|
||||
|
||||
try
|
||||
{
|
||||
// Handle sheet-scoped names (Sheet1!Name format)
|
||||
if (nameKey.Contains("!"))
|
||||
nameKey = nameKey.Substring(nameKey.IndexOf('!') + 1);
|
||||
}
|
||||
@ -76,33 +70,34 @@ namespace ENI2.Excel
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((theValue != "=#REF!#REF!") && (theValue != "=#BEZUG!#BEZUG!"))
|
||||
// Check if the defined name is valid (not a broken reference)
|
||||
if (definedName.IsValid)
|
||||
{
|
||||
_nameDict[nameKey] = name;
|
||||
_nameDict[nameKey] = definedName;
|
||||
bookCnt++;
|
||||
}
|
||||
}
|
||||
_log.DebugFormat("{0} named ranges found at Workbook level", bookCnt);
|
||||
_log.DebugFormat("{0} defined names found at Workbook level", bookCnt);
|
||||
|
||||
|
||||
foreach (Worksheet ws in _workBook.Worksheets)
|
||||
// Get worksheet-level defined names
|
||||
foreach (var ws in _workBook.Worksheets)
|
||||
{
|
||||
int wsCnt = 0;
|
||||
foreach (Name name in ws.Names)
|
||||
foreach (var definedName in ws.DefinedNames)
|
||||
{
|
||||
string theValue = name.Value;
|
||||
// Namensbezug: =SheetZelle. Leere Referenzen überspringen (kommt immer mal wieder vor!)
|
||||
if (!_nameDict.ContainsKey(name.Name))
|
||||
string nameKey = definedName.Name;
|
||||
|
||||
if (!_nameDict.ContainsKey(nameKey))
|
||||
{
|
||||
if ((theValue != "=#REF!#REF!") && (theValue != "=#BEZUG!#BEZUG!"))
|
||||
if (definedName.IsValid)
|
||||
{
|
||||
_nameDict[name.Name] = name;
|
||||
_nameDict[nameKey] = definedName;
|
||||
wsCnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wsCnt > 0)
|
||||
_log.DebugFormat("{0} named ranges found in Worksheet {1}", wsCnt, ws.Name);
|
||||
_log.DebugFormat("{0} defined names found in Worksheet {1}", wsCnt, ws.Name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -127,26 +122,39 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (_nameDict.ContainsKey(lookup))
|
||||
{
|
||||
var val = _nameDict[lookup].RefersToRange.Value;
|
||||
if (val is double) result = val;
|
||||
if ((val is string) && (val.Length > 0))
|
||||
{
|
||||
result = ParseAnyDouble(val);
|
||||
var definedName = _nameDict[lookup];
|
||||
var ranges = definedName.Ranges;
|
||||
var range = ranges.FirstOrDefault();
|
||||
|
||||
if(result == null)
|
||||
if (range != null)
|
||||
{
|
||||
Match m = Regex.Match(val, "([0-9\\.\\,]+)([a-zA-Z]*)");
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
var cellValue = cell.Value;
|
||||
|
||||
if (cellValue.IsNumber)
|
||||
{
|
||||
result = cellValue.GetNumber();
|
||||
}
|
||||
else if (cellValue.IsText)
|
||||
{
|
||||
string textVal = cellValue.GetText();
|
||||
if (!string.IsNullOrEmpty(textVal))
|
||||
{
|
||||
result = ParseAnyDouble(textVal);
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
Match m = Regex.Match(textVal, "([0-9\\.\\,]+)([a-zA-Z]*)");
|
||||
if (m.Success)
|
||||
{
|
||||
result = ParseAnyDouble(m.Groups[1].Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((result == null) && (val != null))
|
||||
{
|
||||
double tmpDouble2 = val[1, 1];
|
||||
result = tmpDouble2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -159,17 +167,26 @@ namespace ENI2.Excel
|
||||
|
||||
internal void Colorize(string lookup, int color)
|
||||
{
|
||||
if(_nameDict.ContainsKey(lookup))
|
||||
if (_nameDict.ContainsKey(lookup))
|
||||
{
|
||||
var definedName = _nameDict[lookup];
|
||||
var ranges = definedName.Ranges;
|
||||
var range = ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var range = _nameDict[lookup].RefersToRange;
|
||||
Colorize(range, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal void Colorize(Range range, int color)
|
||||
internal void Colorize(IXLRange range, int color)
|
||||
{
|
||||
range.Interior.Color = color;
|
||||
range.Worksheet.Tab.Color = color;
|
||||
// Convert int color to Color object
|
||||
Color backgroundColor = Color.FromArgb(color);
|
||||
range.Style.Fill.BackgroundColor = XLColor.FromColor(backgroundColor);
|
||||
|
||||
// Set worksheet tab color
|
||||
range.Worksheet.SetTabColor(XLColor.FromColor(backgroundColor));
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -178,9 +195,7 @@ namespace ENI2.Excel
|
||||
|
||||
public void Save(string path)
|
||||
{
|
||||
this._workBook.SaveAs(path, XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange,
|
||||
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
|
||||
this._workBook.Saved = true;
|
||||
_workBook.SaveAs(path);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -191,29 +206,16 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this._workBook != null)
|
||||
if (_workBook != null)
|
||||
{
|
||||
this._workBook.Close(0);
|
||||
_log.Debug("Close Worksheet");
|
||||
Marshal.ReleaseComObject(this._workBook);
|
||||
}
|
||||
|
||||
if (this._excelWorkbooks != null)
|
||||
{
|
||||
this._excelWorkbooks.Close();
|
||||
_log.Debug("Close Workbooks");
|
||||
Marshal.ReleaseComObject(this._excelWorkbooks);
|
||||
}
|
||||
if (this._excelApp != null)
|
||||
{
|
||||
_log.Debug("Quit Excel");
|
||||
this._excelApp.Quit();
|
||||
Marshal.ReleaseComObject(this._excelApp);
|
||||
_log.Debug("Disposing Workbook");
|
||||
_workBook.Dispose();
|
||||
_workBook = null;
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.ErrorFormat("Exception disposing ExcelReader: {0}", ex.Message);
|
||||
_log.ErrorFormat("Exception disposing ExcelBase: {0}", ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4,8 +4,7 @@
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using ClosedXML.Excel;
|
||||
|
||||
namespace ENI2.Excel
|
||||
{
|
||||
@ -17,48 +16,32 @@ namespace ENI2.Excel
|
||||
/// </summary>
|
||||
public static class ExcelComparer
|
||||
{
|
||||
private static readonly int diffColor = ColorTranslator.ToOle(Color.FromArgb(150, 150, 255)); // blue
|
||||
private static readonly XLColor diffColor = XLColor.FromArgb(150, 150, 255); // blue
|
||||
|
||||
private static bool GetSheetRange(Worksheet sheet, out int lastUsedRow, out int lastUsedColumn)
|
||||
private static bool GetSheetRange(IXLWorksheet sheet, out int lastUsedRow, out int lastUsedColumn)
|
||||
{
|
||||
try
|
||||
{
|
||||
// sheet.Columns.ClearFormats();
|
||||
// sheet.Rows.ClearFormats();
|
||||
Range usedRange = sheet.UsedRange;
|
||||
lastUsedRow = usedRange.Rows.Count;
|
||||
lastUsedColumn = usedRange.Columns.Count;
|
||||
|
||||
/*
|
||||
Range last = sheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
|
||||
Range range = sheet.get_Range("A1", last);
|
||||
|
||||
lastUsedRow = last.Row;
|
||||
lastUsedColumn = last.Column;
|
||||
*/
|
||||
|
||||
var usedRange = sheet.RangeUsed();
|
||||
if (usedRange != null)
|
||||
{
|
||||
lastUsedRow = usedRange.RowCount();
|
||||
lastUsedColumn = usedRange.ColumnCount();
|
||||
return true;
|
||||
}
|
||||
catch(Exception)
|
||||
else
|
||||
{
|
||||
lastUsedColumn = 0;
|
||||
lastUsedRow = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetExcelColumnName(int columnNumber)
|
||||
catch (Exception)
|
||||
{
|
||||
string columnName = "";
|
||||
|
||||
while (columnNumber > 0)
|
||||
{
|
||||
int modulo = (columnNumber - 1) % 26;
|
||||
columnName = Convert.ToChar('A' + modulo) + columnName;
|
||||
columnNumber = (columnNumber - modulo) / 26;
|
||||
lastUsedColumn = 0;
|
||||
lastUsedRow = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
return columnName;
|
||||
}
|
||||
|
||||
public static string Compare(string sourcePath, string targetPath, string comparisonFileName, out string errorMessage)
|
||||
@ -68,53 +51,16 @@ namespace ENI2.Excel
|
||||
|
||||
try
|
||||
{
|
||||
File.Copy(targetPath, comparisonFileName);
|
||||
ExcelReader source = new ExcelReader(sourcePath, true, false);
|
||||
ExcelReader comparison = new ExcelReader(comparisonFileName, false, false);
|
||||
File.Copy(targetPath, comparisonFileName, true);
|
||||
|
||||
/* erste Variante Vergleich über Namen der Zellen
|
||||
|
||||
// loop through named cells
|
||||
foreach (string name in comparison.NameDict.Keys)
|
||||
using (var sourceWorkbook = new XLWorkbook(sourcePath))
|
||||
using (var comparisonWorkbook = new XLWorkbook(comparisonFileName))
|
||||
{
|
||||
if (!source.NameDict.ContainsKey(name)) continue;
|
||||
string sourceText = source.ReadText(name);
|
||||
string targetText = comparison.ReadText(name);
|
||||
|
||||
if (sourceText == null)
|
||||
// Es werden Zellen der "used range" miteinander verglichen
|
||||
foreach (var sourceSheet in sourceWorkbook.Worksheets)
|
||||
{
|
||||
if (targetText != null)
|
||||
{
|
||||
comparison.Colorize(name, diffColor);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
else if (targetText == null)
|
||||
{
|
||||
if (sourceText != null)
|
||||
{
|
||||
comparison.Colorize(name, diffColor);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
else if ((sourceText != null) && (targetText != null))
|
||||
{
|
||||
if (!sourceText.Equals(targetText))
|
||||
{
|
||||
// turn cell blue
|
||||
comparison.Colorize(name, diffColor);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// Zweite Version durch alle Sheets werden Zellen der "used range" miteinander verglichen
|
||||
|
||||
foreach(Worksheet sourceSheet in source.Worksheets)
|
||||
{
|
||||
Worksheet targetSheet = null;
|
||||
foreach(Worksheet sheet in comparison.Worksheets)
|
||||
IXLWorksheet targetSheet = null;
|
||||
foreach (var sheet in comparisonWorkbook.Worksheets)
|
||||
{
|
||||
if (sourceSheet.Name.Equals(sheet.Name))
|
||||
{
|
||||
@ -126,29 +72,44 @@ namespace ENI2.Excel
|
||||
if (targetSheet == null) continue;
|
||||
System.Diagnostics.Trace.WriteLine(string.Format("Processing sheet {0}", targetSheet.Name));
|
||||
|
||||
if(GetSheetRange(sourceSheet, out int sourceRows, out int sourceCols) && GetSheetRange(targetSheet, out int targetRows, out int targetCols))
|
||||
if (GetSheetRange(sourceSheet, out int sourceRows, out int sourceCols) && GetSheetRange(targetSheet, out int targetRows, out int targetCols))
|
||||
{
|
||||
// read source into 2 dim array
|
||||
string rangeString = string.Format("A1:{0}{1}", GetExcelColumnName(Math.Max(sourceCols, targetCols)), Math.Max(sourceRows, targetRows));
|
||||
object[,] sourceArray = sourceSheet.get_Range(rangeString).Value;
|
||||
// read target into 2 dim array
|
||||
object[,] targetArray = targetSheet.get_Range(rangeString).Value;
|
||||
int maxRows = Math.Max(sourceRows, targetRows);
|
||||
int maxCols = Math.Max(sourceCols, targetCols);
|
||||
|
||||
for (int rowidx = 1; rowidx <= Math.Max(sourceRows, targetRows); rowidx++)
|
||||
for (int rowidx = 1; rowidx <= maxRows; rowidx++)
|
||||
{
|
||||
for( int colidx = 1; colidx <= Math.Max(sourceCols, targetCols); colidx++)
|
||||
for (int colidx = 1; colidx <= maxCols; colidx++)
|
||||
{
|
||||
string sourceText = null;
|
||||
if(sourceArray[rowidx,colidx] != null) sourceText = sourceArray[rowidx,colidx].ToString();
|
||||
string targetText = null;
|
||||
if(targetArray[rowidx,colidx] != null) targetText = targetArray[rowidx, colidx].ToString();
|
||||
|
||||
// Get source cell value
|
||||
if (rowidx <= sourceRows && colidx <= sourceCols)
|
||||
{
|
||||
var sourceCell = sourceSheet.Cell(rowidx, colidx);
|
||||
if (!sourceCell.IsEmpty())
|
||||
{
|
||||
sourceText = sourceCell.GetString();
|
||||
}
|
||||
}
|
||||
|
||||
// Get target cell value
|
||||
if (rowidx <= targetRows && colidx <= targetCols)
|
||||
{
|
||||
var targetCell = targetSheet.Cell(rowidx, colidx);
|
||||
if (!targetCell.IsEmpty())
|
||||
{
|
||||
targetText = targetCell.GetString();
|
||||
}
|
||||
}
|
||||
|
||||
if (sourceText == null)
|
||||
{
|
||||
if (targetText != null)
|
||||
{
|
||||
string targetRangeName = string.Format("{0}{1}", GetExcelColumnName(colidx), rowidx);
|
||||
comparison.Colorize(targetSheet.Range[targetRangeName], diffColor);
|
||||
var cellToHighlight = targetSheet.Cell(rowidx, colidx);
|
||||
cellToHighlight.Style.Fill.BackgroundColor = diffColor;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
@ -156,8 +117,8 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (sourceText != null)
|
||||
{
|
||||
string targetRangeName = string.Format("{0}{1}", GetExcelColumnName(colidx), rowidx);
|
||||
comparison.Colorize(targetSheet.Range[targetRangeName], diffColor);
|
||||
var cellToHighlight = targetSheet.Cell(rowidx, colidx);
|
||||
cellToHighlight.Style.Fill.BackgroundColor = diffColor;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
@ -165,13 +126,11 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (!sourceText.Equals(targetText))
|
||||
{
|
||||
string targetRangeName = string.Format("{0}{1}", GetExcelColumnName(colidx), rowidx);
|
||||
// turn cell blue
|
||||
comparison.Colorize(targetSheet.Range[targetRangeName], diffColor);
|
||||
var cellToHighlight = targetSheet.Cell(rowidx, colidx);
|
||||
cellToHighlight.Style.Fill.BackgroundColor = diffColor;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -181,9 +140,8 @@ namespace ENI2.Excel
|
||||
}
|
||||
}
|
||||
|
||||
comparison.Save(comparisonFileName);
|
||||
source.Dispose();
|
||||
comparison.Dispose();
|
||||
comparisonWorkbook.SaveAs(comparisonFileName);
|
||||
}
|
||||
errorMessage = string.Format("{0} differences found", counter);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -193,6 +151,5 @@ namespace ENI2.Excel
|
||||
|
||||
return comparisonFileName;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -9,13 +9,12 @@
|
||||
|
||||
using bsmd.database;
|
||||
using ENI2.Locode;
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using ClosedXML.Excel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ENI2.Excel
|
||||
{
|
||||
@ -31,9 +30,9 @@ namespace ENI2.Excel
|
||||
|
||||
internal Dictionary<string, string> ImportValues { get; } = new Dictionary<string, string>();
|
||||
|
||||
public ExcelReader(string filePath, bool openReadonly = true, bool createNameFields = true)
|
||||
public ExcelReader(string filePath, bool createNameFields = true)
|
||||
{
|
||||
this._workBook = _excelWorkbooks.Open(filePath, 0, openReadonly, 5, "", "", false, XlPlatform.xlWindows, "", false, false, 0, false, false, false);
|
||||
this._workBook = new XLWorkbook(filePath);
|
||||
if (createNameFields)
|
||||
this.InitNameFields();
|
||||
|
||||
@ -69,16 +68,20 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
var val = _nameDict[lookup].RefersToRange.Value;
|
||||
var val2 = _nameDict[lookup].RefersToRange.Value2;
|
||||
if (val != null)
|
||||
result = val.ToString().Trim();
|
||||
else if (val2 != null)
|
||||
result = val2.ToString().Trim();
|
||||
}
|
||||
catch (COMException ex)
|
||||
var definedName = _nameDict[lookup];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
_log.WarnFormat("COMException reading field {0}: {1}", lookup, ex.ErrorCode);
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null && !cell.Value.IsBlank)
|
||||
{
|
||||
result = cell.Value.ToString().Trim();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.WarnFormat("Exception reading field {0}: {1}", lookup, ex.Message);
|
||||
}
|
||||
}
|
||||
if (result != null)
|
||||
@ -441,47 +444,61 @@ namespace ENI2.Excel
|
||||
|
||||
if (_nameDict.ContainsKey(lookup))
|
||||
{
|
||||
var val = _nameDict[lookup].RefersToRange.Value;
|
||||
if (val is DateTime)
|
||||
var definedName = _nameDict[lookup];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
date = val;
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null && !cell.Value.IsBlank)
|
||||
{
|
||||
var cellValue = cell.Value;
|
||||
|
||||
if (cellValue.IsDateTime)
|
||||
{
|
||||
date = cellValue.GetDateTime();
|
||||
}
|
||||
else if (val is double)
|
||||
else if (cellValue.IsNumber)
|
||||
{
|
||||
double numValue = 0;
|
||||
try
|
||||
{
|
||||
date = DateTime.FromOADate(val);
|
||||
numValue = cellValue.GetNumber();
|
||||
date = DateTime.FromOADate(numValue);
|
||||
}
|
||||
catch (ArgumentException) { /* .. */ }
|
||||
|
||||
if (date == null)
|
||||
{
|
||||
CultureInfo provider = CultureInfo.InvariantCulture;
|
||||
string dateString = val.ToString();
|
||||
string dateString = numValue.ToString();
|
||||
const string format = "yyyyMMdd";
|
||||
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out DateTime tmpDate))
|
||||
date = tmpDate;
|
||||
}
|
||||
}
|
||||
|
||||
if (date == null)
|
||||
else if (cellValue.IsText)
|
||||
{
|
||||
if (DateTime.TryParse(val, out DateTime tmpDate))
|
||||
string textValue = cellValue.GetText();
|
||||
|
||||
if (DateTime.TryParse(textValue, out DateTime tmpDate))
|
||||
date = tmpDate;
|
||||
}
|
||||
|
||||
if (date == null)
|
||||
{
|
||||
string[] formats = { "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy", "yyyy-MM-dd", "yyyy-mm-d", "dd-MM-yyyy" };
|
||||
if (DateTime.TryParseExact(val, formats, NumberFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTime tmpDate))
|
||||
date = tmpDate;
|
||||
if (DateTime.TryParseExact(textValue, formats, NumberFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTime tmpDate2))
|
||||
date = tmpDate2;
|
||||
}
|
||||
|
||||
if (date == null)
|
||||
{
|
||||
CultureInfo en = CultureInfo.CreateSpecificCulture("en-US");
|
||||
string[] formats = { "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy", "yyyy-MM-dd", "yyyy-mm-d", "dd-MM-yyyy" };
|
||||
if (DateTime.TryParseExact(val, formats, en, DateTimeStyles.None, out DateTime tmpDate))
|
||||
return tmpDate;
|
||||
if (DateTime.TryParseExact(textValue, formats, en, DateTimeStyles.None, out DateTime tmpDate3))
|
||||
date = tmpDate3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (date != null)
|
||||
@ -532,23 +549,33 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (_nameDict.ContainsKey(lookup))
|
||||
{
|
||||
var val = _nameDict[lookup].RefersToRange.Value;
|
||||
if (val is DateTime)
|
||||
var definedName = _nameDict[lookup];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
result = val;
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null && !cell.Value.IsBlank)
|
||||
{
|
||||
var cellValue = cell.Value;
|
||||
|
||||
if (cellValue.IsDateTime)
|
||||
{
|
||||
result = cellValue.GetDateTime();
|
||||
}
|
||||
if (val is double)
|
||||
else if (cellValue.IsNumber)
|
||||
{
|
||||
double numValue = 0;
|
||||
try
|
||||
{
|
||||
result = DateTime.FromOADate(val);
|
||||
numValue = cellValue.GetNumber();
|
||||
result = DateTime.FromOADate(numValue);
|
||||
}
|
||||
catch (ArgumentException) { }
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
CultureInfo provider = CultureInfo.InvariantCulture;
|
||||
string dateString = val.ToString();
|
||||
string dateString = numValue.ToString();
|
||||
if (!dateString.Contains(":"))
|
||||
{
|
||||
const string format = "HHmm";
|
||||
@ -557,40 +584,36 @@ namespace ENI2.Excel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (val is string @string)
|
||||
else if (cellValue.IsText)
|
||||
{
|
||||
if (@string.EndsWith("lt", StringComparison.OrdinalIgnoreCase))
|
||||
val = @string.Substring(0, @string.Length - 2).Trim();
|
||||
string textValue = cellValue.GetText();
|
||||
|
||||
if (textValue.EndsWith("lt", StringComparison.OrdinalIgnoreCase))
|
||||
textValue = textValue.Substring(0, textValue.Length - 2).Trim();
|
||||
else
|
||||
val = @string.Trim();
|
||||
}
|
||||
textValue = textValue.Trim();
|
||||
|
||||
if (DateTime.TryParseExact(textValue, "HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out DateTime date))
|
||||
result = date;
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
if (DateTime.TryParseExact(val, "HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out DateTime date))
|
||||
result = date;
|
||||
if (DateTime.TryParseExact(textValue, "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out DateTime date2))
|
||||
result = date2;
|
||||
}
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
if (DateTime.TryParseExact(val, "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out DateTime date))
|
||||
result = date;
|
||||
}
|
||||
|
||||
if ((result == null) && (val != null))
|
||||
if (result == null && !textValue.Contains(":"))
|
||||
{
|
||||
CultureInfo provider = CultureInfo.InvariantCulture;
|
||||
string dateString = val.ToString();
|
||||
if (!dateString.Contains(":"))
|
||||
{
|
||||
const string format = "HHmm";
|
||||
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out DateTime tmpDate))
|
||||
if (DateTime.TryParseExact(textValue, format, provider, DateTimeStyles.None, out DateTime tmpDate))
|
||||
result = tmpDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
_log.WarnFormat("error reading time for lookup {0}", lookup);
|
||||
@ -627,7 +650,7 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
Worksheet theWorkSheet = _workBook.Worksheets[sheetName];
|
||||
var theWorkSheet = _workBook.Worksheets.Worksheet(sheetName);
|
||||
return theWorkSheet != null;
|
||||
}
|
||||
catch (Exception)
|
||||
@ -640,12 +663,13 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
Worksheet workSheet = (Worksheet)_workBook.Worksheets[sheetName];
|
||||
string result = workSheet.Range[range].Text.ToString();
|
||||
var workSheet = _workBook.Worksheets.Worksheet(sheetName);
|
||||
var cell = workSheet.Range(range).FirstCell();
|
||||
string result = cell.Value.ToString();
|
||||
if (!result.IsNullOrEmpty())
|
||||
{
|
||||
result = result.Trim().Clean();
|
||||
if(maxLength.HasValue && result.Length > maxLength.Value)
|
||||
if (maxLength.HasValue && result.Length > maxLength.Value)
|
||||
{
|
||||
result = result.Substring(0, maxLength.Value);
|
||||
}
|
||||
@ -663,8 +687,9 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
Worksheet workSheet = (Worksheet)_workBook.Worksheets[sheetName];
|
||||
string result = workSheet.Range[row, col].Text.ToString();
|
||||
var workSheet = _workBook.Worksheets.Worksheet(sheetName);
|
||||
var cell = workSheet.Cell(row, col);
|
||||
string result = cell.Value.ToString();
|
||||
if (!result.IsNullOrEmpty())
|
||||
result = result.Trim().Clean();
|
||||
return result;
|
||||
@ -681,10 +706,11 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
Worksheet workSheet = (Worksheet)_workBook.Worksheets[sheetName];
|
||||
Range aRange = workSheet.Range[range];
|
||||
var workSheet = _workBook.Worksheets.Worksheet(sheetName);
|
||||
var aRange = workSheet.Range(range);
|
||||
if (aRange != null)
|
||||
{
|
||||
// TODO: Implement dropdown reading logic for ClosedXML
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -713,26 +739,27 @@ namespace ENI2.Excel
|
||||
try
|
||||
{
|
||||
double? result = null;
|
||||
Worksheet workSheet = (Worksheet)_workBook.Worksheets[sheetName];
|
||||
var val = workSheet.Range[range].Value;
|
||||
if (val is double) result = val;
|
||||
if (val is string)
|
||||
var workSheet = _workBook.Worksheets.Worksheet(sheetName);
|
||||
var cell = workSheet.Range(range).FirstCell();
|
||||
var cellValue = cell.Value;
|
||||
|
||||
if (cellValue.IsNumber)
|
||||
{
|
||||
if (double.TryParse(val, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
|
||||
result = cellValue.GetNumber();
|
||||
}
|
||||
else if (cellValue.IsText)
|
||||
{
|
||||
string textValue = cellValue.GetText();
|
||||
if (double.TryParse(textValue, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
|
||||
CultureInfo.InvariantCulture, out double tmpDouble))
|
||||
result = tmpDouble;
|
||||
if (result == null)
|
||||
{
|
||||
if (double.TryParse(val, out tmpDouble)) // current language style (==GER, mit , statt .)
|
||||
if (double.TryParse(textValue, out tmpDouble)) // current language style (==GER, mit , statt .)
|
||||
result = tmpDouble;
|
||||
}
|
||||
}
|
||||
|
||||
if ((result == null) && (val != null))
|
||||
{
|
||||
double tmpDouble2 = val[1, 1];
|
||||
result = tmpDouble2;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -759,7 +786,6 @@ namespace ENI2.Excel
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
#endregion Dakosy-specific functions
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,10 @@
|
||||
using System;
|
||||
// Copyright (c) 2017- schick Informatik
|
||||
// Description: Dumps Maersk data into a simple Excel file
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using ClosedXML.Excel;
|
||||
using bsmd.database;
|
||||
|
||||
namespace ENI2.Excel
|
||||
@ -17,68 +15,58 @@ namespace ENI2.Excel
|
||||
{
|
||||
data.Sort();
|
||||
|
||||
Application excelApp = new Application();
|
||||
excelApp.DisplayAlerts = false;
|
||||
excelApp.Visible = false;
|
||||
Workbook wb = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
|
||||
using (var workbook = new XLWorkbook())
|
||||
{
|
||||
var worksheet = workbook.Worksheets.Add("Sheet1");
|
||||
|
||||
Worksheet ws = wb.Worksheets[1];
|
||||
|
||||
// Überschriften erste Zeile
|
||||
ws.Cells[1, 1] = "ETA";
|
||||
ws.Cells[1, 2] = "ETD";
|
||||
ws.Cells[1, 3] = "Rotation name";
|
||||
ws.Cells[1, 4] = "Vessel code";
|
||||
ws.Cells[1, 5] = "Vessel name";
|
||||
ws.Cells[1, 6] = "IMO";
|
||||
ws.Cells[1, 7] = "Arr voy";
|
||||
ws.Cells[1, 8] = "Dep voy";
|
||||
ws.Cells[1, 9] = "Terminal name";
|
||||
ws.Cells[1, 10] = "Operator code";
|
||||
ws.Cells[1, 11] = "Pro arr";
|
||||
ws.Cells[1, 12] = "Pro dep";
|
||||
ws.Cells[1, 13] = "ID";
|
||||
ws.Cells[1, 14] = "Remark";
|
||||
// Headers in first row
|
||||
worksheet.Cell(1, 1).Value = "ETA";
|
||||
worksheet.Cell(1, 2).Value = "ETD";
|
||||
worksheet.Cell(1, 3).Value = "Rotation name";
|
||||
worksheet.Cell(1, 4).Value = "Vessel code";
|
||||
worksheet.Cell(1, 5).Value = "Vessel name";
|
||||
worksheet.Cell(1, 6).Value = "IMO";
|
||||
worksheet.Cell(1, 7).Value = "Arr voy";
|
||||
worksheet.Cell(1, 8).Value = "Dep voy";
|
||||
worksheet.Cell(1, 9).Value = "Terminal name";
|
||||
worksheet.Cell(1, 10).Value = "Operator code";
|
||||
worksheet.Cell(1, 11).Value = "Pro arr";
|
||||
worksheet.Cell(1, 12).Value = "Pro dep";
|
||||
worksheet.Cell(1, 13).Value = "ID";
|
||||
worksheet.Cell(1, 14).Value = "Remark";
|
||||
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
MaerskData md = data[i];
|
||||
int row = i + 2; // Data starts from row 2
|
||||
|
||||
ws.Cells[i + 2, 1].NumberFormat = "TT/hh:mm";
|
||||
ws.Cells[i + 2, 1] = md.ColA;
|
||||
ws.Cells[i + 2, 2].NumberFormat = "TT/hh:mm";
|
||||
ws.Cells[i + 2, 2] = md.ColB;
|
||||
ws.Cells[i + 2, 3] = md.ColC;
|
||||
ws.Cells[i + 2, 4] = md.ColD;
|
||||
ws.Cells[i + 2, 5] = md.ColE;
|
||||
ws.Cells[i + 2, 6] = md.ColF;
|
||||
ws.Cells[i + 2, 7] = md.ColG;
|
||||
ws.Cells[i + 2, 8] = md.ColH;
|
||||
ws.Cells[i + 2, 9] = md.ColI;
|
||||
ws.Cells[i + 2, 10] = md.ColJ;
|
||||
ws.Cells[i + 2, 11] = md.ColK;
|
||||
ws.Cells[i + 2, 12] = md.ColL;
|
||||
ws.Cells[i + 2, 13] = md.ColM ;
|
||||
ws.Cells[i + 2, 14] = md.Remark;
|
||||
worksheet.Cell(row, 1).Value = md.ColA;
|
||||
worksheet.Cell(row, 1).Style.NumberFormat.Format = "dd/hh:mm";
|
||||
|
||||
if((md.MessageCore != null) && (md.MessageCore.Cancelled ?? false))
|
||||
worksheet.Cell(row, 2).Value = md.ColB;
|
||||
worksheet.Cell(row, 2).Style.NumberFormat.Format = "dd/hh:mm";
|
||||
|
||||
worksheet.Cell(row, 3).Value = md.ColC;
|
||||
worksheet.Cell(row, 4).Value = md.ColD;
|
||||
worksheet.Cell(row, 5).Value = md.ColE;
|
||||
worksheet.Cell(row, 6).Value = md.ColF;
|
||||
worksheet.Cell(row, 7).Value = md.ColG;
|
||||
worksheet.Cell(row, 8).Value = md.ColH;
|
||||
worksheet.Cell(row, 9).Value = md.ColI;
|
||||
worksheet.Cell(row, 10).Value = md.ColJ;
|
||||
worksheet.Cell(row, 11).Value = md.ColK;
|
||||
worksheet.Cell(row, 12).Value = md.ColL;
|
||||
worksheet.Cell(row, 13).Value = md.ColM;
|
||||
worksheet.Cell(row, 14).Value = md.Remark;
|
||||
|
||||
if ((md.MessageCore != null) && (md.MessageCore.Cancelled ?? false))
|
||||
{
|
||||
ws.Rows[i + 2].Font.Strikethrough = true;
|
||||
worksheet.Row(row).Style.Font.Strikethrough = true;
|
||||
}
|
||||
}
|
||||
|
||||
workbook.SaveAs(filename);
|
||||
}
|
||||
|
||||
wb.SaveAs(filename, XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing,
|
||||
Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing,
|
||||
Type.Missing, Type.Missing);
|
||||
wb.Saved = true;
|
||||
wb.Close(0);
|
||||
|
||||
Marshal.ReleaseComObject(ws);
|
||||
Marshal.ReleaseComObject(wb);
|
||||
|
||||
excelApp.Quit();
|
||||
Marshal.ReleaseComObject(excelApp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2017- schick Informatik
|
||||
// Description:
|
||||
// Description: Writing excel files
|
||||
//
|
||||
|
||||
using Microsoft.Office.Interop.Excel;
|
||||
using ClosedXML.Excel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
@ -26,10 +26,9 @@ namespace ENI2.Excel
|
||||
if (isRefSheet) filename = @"Excel\Reference_Sheet_DE.xlsx";
|
||||
|
||||
string refFilePath = System.IO.Path.Combine(Environment.CurrentDirectory, filename);
|
||||
this._workBook = _excelWorkbooks.Open(refFilePath, 0, true, 5, "", "", false, XlPlatform.xlWindows, "", false, false, 0, false, false, false);
|
||||
this._workBook = new XLWorkbook(refFilePath);
|
||||
|
||||
this.InitNameFields();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -44,7 +43,7 @@ namespace ENI2.Excel
|
||||
{
|
||||
try
|
||||
{
|
||||
switch(message.MessageNotificationClass)
|
||||
switch (message.MessageNotificationClass)
|
||||
{
|
||||
case Message.NotificationClass.AGNT:
|
||||
if (message.Elements[0] is AGNT agnt) this.WriteMessage(agnt);
|
||||
@ -192,11 +191,6 @@ namespace ENI2.Excel
|
||||
|
||||
}
|
||||
|
||||
public void WriteMaerskList(List<MaerskData> maerskList)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region private excel field writing
|
||||
@ -242,7 +236,7 @@ namespace ENI2.Excel
|
||||
else if (property.PropertyType == typeof(Boolean?))
|
||||
{
|
||||
object boolVal = property.GetValue(dbEntity);
|
||||
if(boolVal != null)
|
||||
if (boolVal != null)
|
||||
success = this.WriteBoolean(lookupNameAttribute.LookupName, boolVal);
|
||||
}
|
||||
else
|
||||
@ -374,6 +368,9 @@ namespace ENI2.Excel
|
||||
|
||||
#endregion
|
||||
|
||||
// [Rest of the methods remain exactly the same as they only call the base class methods]
|
||||
// I'll include a few key ones to show the pattern, but the rest are identical...
|
||||
|
||||
#region CREW
|
||||
|
||||
private void WriteCREW(Message crewMessage, bool isArrival, bool isRefSheet)
|
||||
@ -385,7 +382,7 @@ namespace ENI2.Excel
|
||||
WriteBoolean(string.Format("CREW{0}.NotificationPAX", isArrival ? "" : "D"), ((CREW)crewMessage.Elements[0]).NotificationPAX);
|
||||
}
|
||||
|
||||
for(int i = 0; i<Math.Min(crewMessage.NumberOfExcelRows, crewMessage.Elements.Count); i++)
|
||||
for (int i = 0; i < Math.Min(crewMessage.NumberOfExcelRows, crewMessage.Elements.Count); i++)
|
||||
{
|
||||
string crewLastName = string.Format("CREW{1}.CrewMemberLastName_{0}", i + 1, isArrival ? "" : "D");
|
||||
string crewFirstName = string.Format("CREW{1}.CrewMemberFirstName_{0}", i + 1, isArrival ? "" : "D");
|
||||
@ -413,7 +410,7 @@ namespace ENI2.Excel
|
||||
WriteText(crewNationality, crew.CrewMemberNationality);
|
||||
WriteText(crewDuty, crew.CrewMemberDuty);
|
||||
WriteText(crewPlaceOfBirth, crew.CrewMemberPlaceOfBirth);
|
||||
if(crew.CrewMemberDateOfBirth.HasValue)
|
||||
if (crew.CrewMemberDateOfBirth.HasValue)
|
||||
WriteDate(crewDateOfBirth, crew.CrewMemberDateOfBirth.Value);
|
||||
WriteText(crewIdentDocType, crew.CrewMemberIdentityDocumentTypeDisplay);
|
||||
WriteText(crewIdentDocId, crew.CrewMemberIdentityDocumentId);
|
||||
@ -424,16 +421,16 @@ namespace ENI2.Excel
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!crew.CrewMemberIdentityDocumentIssuingState.IsNullOrEmpty() && !crew.CrewMemberIdentityDocumentIssuingState.Equals("XX"))
|
||||
if (!crew.CrewMemberIdentityDocumentIssuingState.IsNullOrEmpty() && !crew.CrewMemberIdentityDocumentIssuingState.Equals("XX"))
|
||||
WriteText(crewIssuingState, crew.CrewMemberIdentityDocumentIssuingState);
|
||||
}
|
||||
if(isRefSheet)
|
||||
if (isRefSheet)
|
||||
{
|
||||
WriteDate(crewExpiry, crew.CrewMemberIdentityDocumentExpiryDate);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(crew.CrewMemberIdentityDocumentExpiryDate != new DateTime(2100, 12, 31))
|
||||
if (crew.CrewMemberIdentityDocumentExpiryDate != new DateTime(2100, 12, 31))
|
||||
WriteDate(crewExpiry, crew.CrewMemberIdentityDocumentExpiryDate);
|
||||
}
|
||||
|
||||
@ -1066,7 +1063,7 @@ namespace ENI2.Excel
|
||||
string tLen = string.Format("TOWD.TowageOnDepartureLengthOverall_MTR_{0}", i + 1);
|
||||
string tBeam = string.Format("TOWD.TowageOnDepartureBeam_MTR_{0}", i + 1);
|
||||
string tOp = string.Format("TOWD.TowageOnDepartureOperatorCompanyName_{0}", i + 1);
|
||||
string tPoc = string.Format("TOWD.TowageOnDeparturePurposeOfCall_{0}", i + 1);
|
||||
// string tPoc = string.Format("TOWD.TowageOnDeparturePurposeOfCall_{0}", i + 1);
|
||||
|
||||
TOWD towd = towdMessage.Elements[i] as TOWD;
|
||||
|
||||
@ -1276,7 +1273,7 @@ namespace ENI2.Excel
|
||||
|
||||
private void WriteGenderCode(string label, byte? gender)
|
||||
{
|
||||
if(gender.HasValue)
|
||||
if (gender.HasValue)
|
||||
{
|
||||
if (gender == 0) WriteText(label, "not known");
|
||||
if (gender == 1) WriteText(label, "m");
|
||||
@ -1303,15 +1300,24 @@ namespace ENI2.Excel
|
||||
private bool WriteBoolean(string lookupName, object v)
|
||||
{
|
||||
bool result = _nameDict.ContainsKey(lookupName);
|
||||
bool? b = (bool?) v;
|
||||
bool? b = (bool?)v;
|
||||
try
|
||||
{
|
||||
if (result && b.HasValue)
|
||||
{
|
||||
_nameDict[lookupName].RefersToRange.Value = b.Value ? "Y" : "N";
|
||||
var definedName = _nameDict[lookupName];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
cell.Value = b.Value ? "Y" : "N";
|
||||
}
|
||||
}
|
||||
catch(Exception)
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
System.Diagnostics.Trace.WriteLine(string.Format("Error writing {0} to excel, field missing", lookupName));
|
||||
}
|
||||
@ -1326,10 +1332,19 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (result)
|
||||
{
|
||||
_nameDict[lookupName].RefersToRange.Value = v;
|
||||
var definedName = _nameDict[lookupName];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
cell.Value = ClosedXML.Excel.XLCellValue.FromObject(v);
|
||||
}
|
||||
}
|
||||
catch(Exception)
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
System.Diagnostics.Trace.WriteLine(string.Format("Error writing {0} to excel, field missing", lookupName));
|
||||
}
|
||||
@ -1343,7 +1358,16 @@ namespace ENI2.Excel
|
||||
|
||||
if (result)
|
||||
{
|
||||
_nameDict[lookupName].RefersToRange.Value = v;
|
||||
var definedName = _nameDict[lookupName];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
cell.Value = ClosedXML.Excel.XLCellValue.FromObject(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -1355,11 +1379,19 @@ namespace ENI2.Excel
|
||||
|
||||
if (result)
|
||||
{
|
||||
if(v != null)
|
||||
if (v != null)
|
||||
{
|
||||
_nameDict[lookupName].RefersToRange.Value = ((DateTime) v).ToLocalTime().ToOADate();
|
||||
var definedName = _nameDict[lookupName];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
cell.Value = ClosedXML.Excel.XLCellValue.FromObject(((DateTime)v).ToLocalTime());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -1373,9 +1405,17 @@ namespace ENI2.Excel
|
||||
{
|
||||
if (v != null)
|
||||
{
|
||||
_nameDict[lookupName].RefersToRange.Value = ((DateTime)v).ToLocalTime().ToShortTimeString();
|
||||
var definedName = _nameDict[lookupName];
|
||||
var range = definedName.Ranges.FirstOrDefault();
|
||||
if (range != null)
|
||||
{
|
||||
var cell = range.FirstCell();
|
||||
if (cell != null)
|
||||
{
|
||||
cell.Value = ((DateTime)v).ToLocalTime().ToString("HH:mm");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
2
ENI2/Properties/Settings.Designer.cs
generated
2
ENI2/Properties/Settings.Designer.cs
generated
@ -12,7 +12,7 @@ namespace ENI2.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
@ -117,7 +117,7 @@ namespace ENI2.LockingServiceReference {
|
||||
return this.CORRUPTFilesField;
|
||||
}
|
||||
set {
|
||||
if ((ReferenceEquals(this.CORRUPTFilesField, value) != true)) {
|
||||
if ((object.ReferenceEquals(this.CORRUPTFilesField, value) != true)) {
|
||||
this.CORRUPTFilesField = value;
|
||||
this.RaisePropertyChanged("CORRUPTFiles");
|
||||
}
|
||||
@ -143,7 +143,7 @@ namespace ENI2.LockingServiceReference {
|
||||
return this.IMPFilesField;
|
||||
}
|
||||
set {
|
||||
if ((ReferenceEquals(this.IMPFilesField, value) != true)) {
|
||||
if ((object.ReferenceEquals(this.IMPFilesField, value) != true)) {
|
||||
this.IMPFilesField = value;
|
||||
this.RaisePropertyChanged("IMPFiles");
|
||||
}
|
||||
@ -156,7 +156,7 @@ namespace ENI2.LockingServiceReference {
|
||||
return this.READYFilesField;
|
||||
}
|
||||
set {
|
||||
if ((ReferenceEquals(this.READYFilesField, value) != true)) {
|
||||
if ((object.ReferenceEquals(this.READYFilesField, value) != true)) {
|
||||
this.READYFilesField = value;
|
||||
this.RaisePropertyChanged("READYFiles");
|
||||
}
|
||||
|
||||
@ -3,9 +3,9 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -126,49 +126,46 @@ namespace ENI2.SheetDisplayControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<CREWD> importCrew = new List<CREWD>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.FieldCount < 13)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
// Check if we have at least 13 columns
|
||||
if (worksheet.RangeUsed().ColumnCount() < 13)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 13 columns of data");
|
||||
}
|
||||
|
||||
CREWD crew = new CREWD();
|
||||
crew.IsDeparture = true;
|
||||
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0);
|
||||
if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1);
|
||||
if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean();
|
||||
if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5);
|
||||
if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7);
|
||||
if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8));
|
||||
if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = reader.ReadAsString(9);
|
||||
if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11);
|
||||
if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = reader.ReadAsString(12);
|
||||
// Check if first two cells are empty
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean();
|
||||
if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean();
|
||||
if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean();
|
||||
if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime();
|
||||
if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString());
|
||||
if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean();
|
||||
if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime();
|
||||
if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean();
|
||||
|
||||
crew.MessageHeader = this._crewdMessage;
|
||||
crew.IsDirty = true;
|
||||
@ -176,12 +173,6 @@ namespace ENI2.SheetDisplayControls
|
||||
this._crewdMessage.Elements.Add(crew);
|
||||
importCrew.Add(crew);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importCrew.Count > 0)
|
||||
{
|
||||
@ -190,8 +181,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,9 +3,9 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Util;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -166,47 +166,45 @@ namespace ENI2.SheetDisplayControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<CREW> importCrew = new List<CREW>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.FieldCount < 13)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
// Check if we have at least 13 columns
|
||||
if (worksheet.RangeUsed().ColumnCount() < 13)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 13 columns of data");
|
||||
}
|
||||
|
||||
CREW crew = new CREW();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0).Clean();
|
||||
if (crew.CrewMemberLastName.Equals("Family Name") || (crew.CrewMemberLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1).Clean();
|
||||
if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) crew.CrewMemberDuty = reader.GetString(3).Clean();
|
||||
if (!reader.IsDBNull(4)) crew.CrewMemberNationality = reader.GetString(4).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5).Clean();
|
||||
if (!reader.IsDBNull(6)) crew.CrewMemberCountryOfBirth = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) crew.CrewMemberDateOfBirth = reader.GetDateTime(7);
|
||||
if (!reader.IsDBNull(8)) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(8));
|
||||
if (!reader.IsDBNull(9)) crew.CrewMemberIdentityDocumentId = reader.ReadAsString(9).Clean();
|
||||
if (!reader.IsDBNull(10)) crew.CrewMemberIdentityDocumentIssuingState = reader.GetString(10).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(11)) crew.CrewMemberIdentityDocumentExpiryDate = reader.GetDateTime(11);
|
||||
if (!reader.IsDBNull(12)) crew.CrewMemberVisaNumber = reader.ReadAsString(12).Clean();
|
||||
|
||||
// Check if first two cells are empty
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) crew.CrewMemberLastName = row.Cell(1).GetString().Clean();
|
||||
if (crew.CrewMemberLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(crew.CrewMemberLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) crew.CrewMemberFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) crew.CrewMemberGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) crew.CrewMemberDuty = row.Cell(4).GetString().Clean();
|
||||
if (!row.Cell(5).IsEmpty()) crew.CrewMemberNationality = row.Cell(5).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(6).IsEmpty()) crew.CrewMemberPlaceOfBirth = row.Cell(6).GetString().Clean();
|
||||
if (!row.Cell(7).IsEmpty()) crew.CrewMemberCountryOfBirth = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) crew.CrewMemberDateOfBirth = row.Cell(8).GetDateTime();
|
||||
if (!row.Cell(9).IsEmpty()) crew.CrewMemberIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(9).GetString());
|
||||
if (!row.Cell(10).IsEmpty()) crew.CrewMemberIdentityDocumentId = row.Cell(10).GetString().Clean();
|
||||
if (!row.Cell(11).IsEmpty()) crew.CrewMemberIdentityDocumentIssuingState = row.Cell(11).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(12).IsEmpty()) crew.CrewMemberIdentityDocumentExpiryDate = row.Cell(12).GetDateTime();
|
||||
if (!row.Cell(13).IsEmpty()) crew.CrewMemberVisaNumber = row.Cell(13).GetString().Clean();
|
||||
|
||||
crew.MessageHeader = this._crewaMessage;
|
||||
crew.IsDirty = true;
|
||||
@ -214,12 +212,6 @@ namespace ENI2.SheetDisplayControls
|
||||
this._crewaMessage.Elements.Add(crew);
|
||||
importCrew.Add(crew);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importCrew.Count > 0)
|
||||
{
|
||||
@ -228,8 +220,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textCrewImported, importCrew.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,10 +3,10 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Locode;
|
||||
using ENI2.Util;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -144,69 +144,58 @@ namespace ENI2.SheetDisplayControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PASD> importPassenger = new List<PASD>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 17)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 17)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 17 columns of data");
|
||||
}
|
||||
|
||||
PASD pas = new PASD();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString();
|
||||
if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString();
|
||||
if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean();
|
||||
if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null)
|
||||
pas.PassengerPortOfEmbarkation = null;
|
||||
if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4);
|
||||
if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null)
|
||||
pas.PassengerPortOfDisembarkation = null;
|
||||
if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5));
|
||||
if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7);
|
||||
if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9);
|
||||
if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10));
|
||||
if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString( 11);
|
||||
if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13);
|
||||
if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14);
|
||||
if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15);
|
||||
if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16);
|
||||
if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString());
|
||||
if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean();
|
||||
if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime();
|
||||
if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString());
|
||||
if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean();
|
||||
if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime();
|
||||
if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean();
|
||||
if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean();
|
||||
if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean();
|
||||
|
||||
pas.MessageHeader = this._pasMessage;
|
||||
pas.MessageHeader = this._pasdMessage;
|
||||
pas.IsDirty = true;
|
||||
pas.Identifier = PASD.GetNewIdentifier(this._pasdMessage.Elements);
|
||||
this._pasdMessage.Elements.Add(pas);
|
||||
importPassenger.Add(pas);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPassenger.Count > 0)
|
||||
{
|
||||
@ -215,7 +204,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4,10 +4,10 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ENI2.Locode;
|
||||
using ENI2.Util;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -126,56 +126,51 @@ namespace ENI2.SheetDisplayControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PAS> importPassenger = new List<PAS>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 17)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 17)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 17 columns of data");
|
||||
}
|
||||
|
||||
PAS pas = new PAS();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString().Clean();
|
||||
if (pas.PassengerLastName.Equals("Family Name") || (pas.PassengerLastName.Trim().Length == 0)) continue;
|
||||
if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString().Clean();
|
||||
if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2));
|
||||
if (!reader.IsDBNull(3)) pas.PassengerPortOfEmbarkation = reader.GetString(3).Clean();
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) pas.PassengerLastName = row.Cell(1).GetString().Clean();
|
||||
if (pas.PassengerLastName?.Equals("Family Name") == true || string.IsNullOrWhiteSpace(pas.PassengerLastName)) continue;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) pas.PassengerFirstName = row.Cell(2).GetString().Clean();
|
||||
if (!row.Cell(3).IsEmpty()) pas.PassengerGender = GlobalStructures.ParseGender(row.Cell(3).GetString());
|
||||
if (!row.Cell(4).IsEmpty()) pas.PassengerPortOfEmbarkation = row.Cell(4).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null)
|
||||
pas.PassengerPortOfEmbarkation = null;
|
||||
if (!reader.IsDBNull(4)) pas.PassengerPortOfDisembarkation = reader.GetString(4).Clean();
|
||||
if (!row.Cell(5).IsEmpty()) pas.PassengerPortOfDisembarkation = row.Cell(5).GetString().Clean();
|
||||
if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfDisembarkation) == null)
|
||||
pas.PassengerPortOfDisembarkation = null;
|
||||
if (!reader.IsDBNull(5)) pas.PassengerInTransit = GlobalStructures.ReadBoolean(reader.GetString(5));
|
||||
if (!reader.IsDBNull(6)) pas.PassengerNationality = reader.GetString(6).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(7)) pas.PassengerPlaceOfBirth = reader.GetString(7).Clean();
|
||||
if (!reader.IsDBNull(8)) pas.PassengerCountryOfBirth = reader.GetString(8).Substring(0, 2).ToUpper().Clean();
|
||||
if (!reader.IsDBNull(9)) pas.PassengerDateOfBirth = reader.GetDateTime(9);
|
||||
if (!reader.IsDBNull(10)) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(reader.GetString(10));
|
||||
if (!reader.IsDBNull(11)) pas.PassengerIdentityDocumentId = reader.ReadAsString(11).Clean();
|
||||
if (!reader.IsDBNull(12)) pas.PassengerIdentityDocumentIssuingState = reader.GetString(12).Substring(0, 2).ToUpper();
|
||||
if (!reader.IsDBNull(13)) pas.PassengerIdentityDocumentExpiryDate = reader.GetDateTime(13);
|
||||
if (!reader.IsDBNull(14)) pas.PassengerVisaNumber = reader.ReadAsString(14).Clean();
|
||||
if (!reader.IsDBNull(15)) pas.EmergencyCare = reader.GetString(15).Clean();
|
||||
if (!reader.IsDBNull(16)) pas.EmergencyContactNumber = reader.ReadAsString(16).Clean();
|
||||
if (!row.Cell(6).IsEmpty()) pas.PassengerInTransit = GlobalStructures.ReadBoolean(row.Cell(6).GetString());
|
||||
if (!row.Cell(7).IsEmpty()) pas.PassengerNationality = row.Cell(7).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(8).IsEmpty()) pas.PassengerPlaceOfBirth = row.Cell(8).GetString().Clean();
|
||||
if (!row.Cell(9).IsEmpty()) pas.PassengerCountryOfBirth = row.Cell(9).GetString().Substring(0, 2).ToUpper().Clean();
|
||||
if (!row.Cell(10).IsEmpty()) pas.PassengerDateOfBirth = row.Cell(10).GetDateTime();
|
||||
if (!row.Cell(11).IsEmpty()) pas.PassengerIdentityDocumentType = GlobalStructures.ReadIdentityDocumentType(row.Cell(11).GetString());
|
||||
if (!row.Cell(12).IsEmpty()) pas.PassengerIdentityDocumentId = row.Cell(12).GetString().Clean();
|
||||
if (!row.Cell(13).IsEmpty()) pas.PassengerIdentityDocumentIssuingState = row.Cell(13).GetString().Substring(0, 2).ToUpper();
|
||||
if (!row.Cell(14).IsEmpty()) pas.PassengerIdentityDocumentExpiryDate = row.Cell(14).GetDateTime();
|
||||
if (!row.Cell(15).IsEmpty()) pas.PassengerVisaNumber = row.Cell(15).GetString().Clean();
|
||||
if (!row.Cell(16).IsEmpty()) pas.EmergencyCare = row.Cell(16).GetString().Clean();
|
||||
if (!row.Cell(17).IsEmpty()) pas.EmergencyContactNumber = row.Cell(17).GetString().Clean();
|
||||
|
||||
pas.MessageHeader = this._pasMessage;
|
||||
pas.IsDirty = true;
|
||||
@ -183,12 +178,6 @@ namespace ENI2.SheetDisplayControls
|
||||
this._pasMessage.Elements.Add(pas);
|
||||
importPassenger.Add(pas);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPassenger.Count > 0)
|
||||
{
|
||||
@ -197,7 +186,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textPassengerImported, importPassenger.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,11 +3,11 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
@ -517,43 +517,31 @@ namespace ENI2.SheetDisplayControls
|
||||
ofd.Filter = "Excel Files|*.xls;*.xlsx";
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<Waste> importWasteList = new List<Waste>();
|
||||
|
||||
try
|
||||
{
|
||||
do
|
||||
{
|
||||
// skip first three rows
|
||||
reader.Read();
|
||||
reader.Read();
|
||||
reader.Read();
|
||||
|
||||
int cnt = 0;
|
||||
object o = null;
|
||||
|
||||
// Diese Funktion kann das "alte" Sheet Format nicht mehr einlesen!
|
||||
|
||||
while (reader.Read() && (cnt < 35))
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (reader.FieldCount < 9)
|
||||
if (cnt >= 35) break; // Maximum 35 rows
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 9)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 9 Columns of data");
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(1)) o = reader.GetValue(1); else o = null;
|
||||
object o = null;
|
||||
|
||||
if (!row.Cell(2).IsEmpty()) o = row.Cell(2).Value; else o = null;
|
||||
if ((o != null) && Int32.TryParse(o.ToString(), out int wasteType))
|
||||
{
|
||||
Waste waste = _was.GetWasteForType(wasteType);
|
||||
@ -571,22 +559,22 @@ namespace ENI2.SheetDisplayControls
|
||||
waste.IsDirty = true;
|
||||
}
|
||||
|
||||
if (!reader.IsDBNull(4)) waste.WasteDescription = reader.GetString(4);
|
||||
if (!row.Cell(5).IsEmpty()) waste.WasteDescription = row.Cell(5).GetString();
|
||||
if (waste.WasteDescription.IsNullOrEmpty())
|
||||
waste.WasteDescription = "-";
|
||||
|
||||
if (!reader.IsDBNull(5)) o = reader.GetValue(5); else o = null;
|
||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value; else o = null;
|
||||
if (o != null) waste.WasteDisposalAmount_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(6)) o = reader.GetValue(6); else o = null;
|
||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value; else o = null;
|
||||
if (o != null) waste.WasteCapacity_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(7)) o = reader.GetValue(7); else o = null;
|
||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value; else o = null;
|
||||
if (o != null) waste.WasteAmountRetained_MTQ = Convert.ToDouble(o);
|
||||
|
||||
if (!reader.IsDBNull(8)) waste.WasteDisposalPort = reader.GetString(8).ToUpper();
|
||||
if (!row.Cell(9).IsEmpty()) waste.WasteDisposalPort = row.Cell(9).GetString().ToUpper();
|
||||
|
||||
if (!reader.IsDBNull(9)) o = reader.GetValue(9); else o = null;
|
||||
if (!row.Cell(10).IsEmpty()) o = row.Cell(10).Value; else o = null;
|
||||
if (o != null) waste.WasteAmountGeneratedTillNextPort_MTQ = Convert.ToDouble(o);
|
||||
|
||||
importWasteList.Add(waste);
|
||||
@ -594,13 +582,6 @@ namespace ENI2.SheetDisplayControls
|
||||
}
|
||||
}
|
||||
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importWasteList.Count > 0)
|
||||
{
|
||||
this.dataGridWaste.Items.Refresh();
|
||||
@ -608,9 +589,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteList.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,17 +2,16 @@
|
||||
// Description: Display control of formsheet Tab 1. Voyage
|
||||
//
|
||||
|
||||
using System.Windows;
|
||||
|
||||
using bsmd.database;
|
||||
using ClosedXML.Excel;
|
||||
using ENI2.EditControls;
|
||||
using System.Windows.Controls;
|
||||
using System;
|
||||
using ENI2.Util;
|
||||
using System.Collections.Generic;
|
||||
using ExcelDataReader;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
|
||||
namespace ENI2.SheetDisplayControls
|
||||
@ -308,53 +307,53 @@ namespace ENI2.SheetDisplayControls
|
||||
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed(); // Get all rows with data
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<LastTenPortFacilitiesCalled> importL10C = new List<LastTenPortFacilitiesCalled>();
|
||||
|
||||
try
|
||||
{
|
||||
do
|
||||
{
|
||||
int cnt = 0;
|
||||
while (reader.Read() && (cnt < 10))
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (((IExcelDataReader)reader).FieldCount < 8)
|
||||
if (cnt >= 10) break; // Maximum 10 rows
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 8)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have 8 Columns of data");
|
||||
}
|
||||
|
||||
LastTenPortFacilitiesCalled l10c = new LastTenPortFacilitiesCalled();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) l10c.PortFacilityPortName = reader.GetString(0);
|
||||
if (!reader.IsDBNull(2)) l10c.PortFacilityPortCountry = reader.GetString(2);
|
||||
if (!reader.IsDBNull(3)) l10c.PortFacilityPortLoCode = reader.GetString(3);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) l10c.PortFacilityPortName = row.Cell(1).GetString();
|
||||
if (!row.Cell(3).IsEmpty()) l10c.PortFacilityPortCountry = row.Cell(3).GetString();
|
||||
if (!row.Cell(4).IsEmpty()) l10c.PortFacilityPortLoCode = row.Cell(4).GetString();
|
||||
|
||||
object o = null;
|
||||
if (!reader.IsDBNull(4)) o = reader.GetValue(4);
|
||||
if (!row.Cell(5).IsEmpty()) o = row.Cell(5).Value;
|
||||
if (o != null) l10c.PortFacilityDateOfArrival = Convert.ToDateTime(o);
|
||||
if (!reader.IsDBNull(5)) o = reader.GetValue(5);
|
||||
|
||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value;
|
||||
if (o != null) l10c.PortFacilityDateOfDeparture = Convert.ToDateTime(o);
|
||||
// if (!reader.IsDBNull(4)) l10c.PortFacilityDateOfArrival = reader.GetDateTime(4);
|
||||
// if (!reader.IsDBNull(5)) l10c.PortFacilityDateOfDeparture = reader.GetDateTime(5);
|
||||
if (!reader.IsDBNull(6)) o = reader.GetValue(6);
|
||||
|
||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value;
|
||||
if (o != null) l10c.PortFacilityShipSecurityLevel = Convert.ToByte(o);
|
||||
if (!reader.IsDBNull(7)) o = reader.GetValue(7);
|
||||
|
||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value;
|
||||
int gisis = Convert.ToInt32(o);
|
||||
if (!reader.IsDBNull(7)) l10c.PortFacilityGISISCode = gisis.ToString().PadLeft(4, '0');
|
||||
if (!reader.IsDBNull(8)) l10c.PortFacilitySecurityMattersToReport = reader.GetString(8);
|
||||
if (l10c.PortFacilitySecurityMattersToReport.Equals("nil", StringComparison.CurrentCultureIgnoreCase))
|
||||
if (!row.Cell(8).IsEmpty()) l10c.PortFacilityGISISCode = gisis.ToString().PadLeft(4, '0');
|
||||
|
||||
if (!row.Cell(9).IsEmpty()) l10c.PortFacilitySecurityMattersToReport = row.Cell(9).GetString();
|
||||
if (l10c.PortFacilitySecurityMattersToReport?.Equals("nil", StringComparison.CurrentCultureIgnoreCase) == true)
|
||||
l10c.PortFacilitySecurityMattersToReport = null;
|
||||
if (!reader.IsDBNull(9)) l10c.PortFacilityGISISCodeLocode = reader.GetString(9);
|
||||
|
||||
if (!row.Cell(10).IsEmpty()) l10c.PortFacilityGISISCodeLocode = row.Cell(10).GetString();
|
||||
|
||||
l10c.SEC = this._sec;
|
||||
l10c.IsDirty = true;
|
||||
l10c.Identifier = LastTenPortFacilitiesCalled.GetNewIdentifier(this._sec.LastTenPortFacilitesCalled);
|
||||
@ -362,12 +361,6 @@ namespace ENI2.SheetDisplayControls
|
||||
importL10C.Add(l10c);
|
||||
cnt++;
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importL10C.Count > 0)
|
||||
{
|
||||
@ -376,8 +369,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBox.Show(String.Format(Properties.Resources.textL10PImported, importL10C.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -453,43 +449,40 @@ namespace ENI2.SheetDisplayControls
|
||||
};
|
||||
if (ofd.ShowDialog() ?? false)
|
||||
{
|
||||
FileStream stream;
|
||||
try
|
||||
{
|
||||
stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
|
||||
}
|
||||
catch (Exception ex)
|
||||
using (var workbook = new XLWorkbook(ofd.FileName))
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||
var rows = worksheet.RangeUsed().RowsUsed(); // Get all rows with data
|
||||
|
||||
using (var reader = ExcelReaderFactory.CreateReader(stream))
|
||||
{
|
||||
List<PortOfCallLast30Days> importPoC30 = new List<PortOfCallLast30Days>();
|
||||
|
||||
try
|
||||
foreach (var row in rows)
|
||||
{
|
||||
do
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.FieldCount < 3)
|
||||
if (row.RowNumber() > worksheet.RangeUsed().RowCount()) break;
|
||||
|
||||
if (worksheet.RangeUsed().ColumnCount() < 3)
|
||||
{
|
||||
throw new InvalidDataException("Sheet must have at least 3 Columns of data");
|
||||
}
|
||||
|
||||
PortOfCallLast30Days poc30 = new PortOfCallLast30Days();
|
||||
if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue;
|
||||
if (!reader.IsDBNull(0)) poc30.PortOfCallLast30DaysLocode = reader.GetString(0);
|
||||
if (!reader.IsDBNull(1)) poc30.PortOfCallLast30DaysDateOfDeparture = reader.GetDateTime(1);
|
||||
|
||||
if (row.Cell(1).IsEmpty() && row.Cell(2).IsEmpty()) continue;
|
||||
|
||||
if (!row.Cell(1).IsEmpty()) poc30.PortOfCallLast30DaysLocode = row.Cell(1).GetString();
|
||||
if (!row.Cell(2).IsEmpty()) poc30.PortOfCallLast30DaysDateOfDeparture = row.Cell(2).GetDateTime();
|
||||
|
||||
string boolString = "";
|
||||
if (!reader.IsDBNull(2)) boolString = reader.GetString(2);
|
||||
poc30.PortOfCallLast30DaysCrewMembersJoined = (boolString.Equals("y", StringComparison.OrdinalIgnoreCase) || (boolString.Equals("yes", StringComparison.OrdinalIgnoreCase)) ||
|
||||
if (!row.Cell(3).IsEmpty()) boolString = row.Cell(3).GetString();
|
||||
poc30.PortOfCallLast30DaysCrewMembersJoined = (boolString.Equals("y", StringComparison.OrdinalIgnoreCase) ||
|
||||
(boolString.Equals("yes", StringComparison.OrdinalIgnoreCase)) ||
|
||||
(boolString.Equals("j", StringComparison.OrdinalIgnoreCase)));
|
||||
|
||||
if (reader.FieldCount > 3)
|
||||
if (worksheet.RangeUsed().ColumnCount() > 3)
|
||||
{
|
||||
string allNewCrew = reader.GetString(3)?.Trim();
|
||||
string allNewCrew = row.Cell(4).IsEmpty() ? null : row.Cell(4).GetString()?.Trim();
|
||||
if (!allNewCrew.IsNullOrEmpty())
|
||||
{
|
||||
string[] crewNames = allNewCrew.Split(',', ';');
|
||||
@ -501,7 +494,6 @@ namespace ENI2.SheetDisplayControls
|
||||
poc30Crew.PortOfCallLast30DaysCrewJoinedShipName = crewName;
|
||||
poc30Crew.PortOfCallLast30Days = poc30;
|
||||
poc30.CrewJoinedShip.Add(poc30Crew);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -510,12 +502,6 @@ namespace ENI2.SheetDisplayControls
|
||||
this._mdh.PortOfCallLast30Days.Add(poc30);
|
||||
importPoC30.Add(poc30);
|
||||
}
|
||||
} while (reader.NextResult());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
if (importPoC30.Count > 0)
|
||||
{
|
||||
@ -525,8 +511,11 @@ namespace ENI2.SheetDisplayControls
|
||||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
}
|
||||
|
||||
stream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
//
|
||||
|
||||
using bsmd.database;
|
||||
using ExcelDataReader;
|
||||
|
||||
using System;
|
||||
|
||||
namespace ENI2.Util
|
||||
@ -11,20 +11,6 @@ namespace ENI2.Util
|
||||
internal static class Extensions
|
||||
{
|
||||
|
||||
public static string ReadAsString(this IExcelDataReader reader, int index)
|
||||
{
|
||||
if (index >= reader.FieldCount) return null;
|
||||
Type fieldType = reader.GetFieldType(index);
|
||||
if (fieldType == null) return null;
|
||||
if (fieldType == typeof(string))
|
||||
return reader.GetString(index).Clean();
|
||||
if (fieldType == typeof(DateTime))
|
||||
return reader.GetDateTime(index).ToString();
|
||||
if (fieldType == typeof(int))
|
||||
return reader.GetInt32(index).ToString();
|
||||
if (fieldType == typeof(double))
|
||||
return ((int)reader.GetDouble(index)).ToString();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,28 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="ExcelDataReader" version="3.7.0" targetFramework="net48" />
|
||||
<package id="Extended.Wpf.Toolkit" version="4.7.25104.5739" targetFramework="net48" />
|
||||
<package id="ClosedXML" version="0.105.0" targetFramework="net48" />
|
||||
<package id="ClosedXML.Parser" version="2.0.0" targetFramework="net48" />
|
||||
<package id="DocumentFormat.OpenXml" version="3.3.0" targetFramework="net481" />
|
||||
<package id="DocumentFormat.OpenXml.Framework" version="3.3.0" targetFramework="net481" />
|
||||
<package id="ExcelNumberFormat" version="1.1.0" targetFramework="net48" />
|
||||
<package id="Extended.Wpf.Toolkit" version="5.0.0" targetFramework="net48" />
|
||||
<package id="log4net" version="3.2.0" targetFramework="net48" />
|
||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Bcl.Cryptography" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.DependencyInjection" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Logging" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Logging.Abstractions" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Options" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Primitives" version="9.0.8" targetFramework="net48" />
|
||||
<package id="Microsoft.Office.Interop.Excel" version="15.0.4795.1001" targetFramework="net48" />
|
||||
<package id="PDFsharp" version="6.2.1" targetFramework="net48" />
|
||||
<package id="PDFsharp-MigraDoc" version="6.2.1" targetFramework="net48" />
|
||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Bcl.Cryptography" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Bcl.HashCode" version="6.0.0" targetFramework="net481" />
|
||||
<package id="Microsoft.Extensions.DependencyInjection" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Logging" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Logging.Abstractions" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Options" version="9.0.9" targetFramework="net48" />
|
||||
<package id="Microsoft.Extensions.Primitives" version="9.0.9" targetFramework="net48" />
|
||||
<package id="PDFsharp" version="6.2.2" targetFramework="net48" />
|
||||
<package id="PDFsharp-MigraDoc" version="6.2.2" targetFramework="net48" />
|
||||
<package id="RBush.Signed" version="4.0.0" targetFramework="net48" />
|
||||
<package id="SixLabors.Fonts" version="1.0.0" targetFramework="net481" />
|
||||
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.119.0" targetFramework="net48" />
|
||||
<package id="System.Buffers" version="4.6.1" targetFramework="net48" />
|
||||
<package id="System.Data.SQLite.Core" version="1.0.119.0" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="9.0.8" targetFramework="net48" />
|
||||
<package id="System.Formats.Asn1" version="9.0.8" targetFramework="net48" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="9.0.9" targetFramework="net48" />
|
||||
<package id="System.Formats.Asn1" version="9.0.9" targetFramework="net48" />
|
||||
<package id="System.Memory" version="4.6.3" targetFramework="net48" />
|
||||
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net48" />
|
||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Pkcs" version="9.0.8" targetFramework="net48" />
|
||||
<package id="System.Security.Cryptography.Pkcs" version="9.0.9" targetFramework="net48" />
|
||||
<package id="System.Threading.Tasks.Extensions" version="4.6.3" targetFramework="net48" />
|
||||
<package id="System.ValueTuple" version="4.6.1" targetFramework="net48" />
|
||||
</packages>
|
||||
@ -93,7 +93,7 @@
|
||||
<HintPath>..\ENI2\packages\log4net.3.2.0\lib\net462\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\ENI2\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<HintPath>..\ENI2\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="3.2.0" targetFramework="net48" />
|
||||
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
|
||||
<package id="Newtonsoft.Json" version="13.0.4" targetFramework="net48" />
|
||||
</packages>
|
||||
Loading…
Reference in New Issue
Block a user