Feature: MS Excel (xlsx) Import/Export

Microsoft Excel files can be used to import/export devices. Several
import bugs were also fixed in the process.
This commit is contained in:
Gary Sharp
2017-03-25 15:37:28 +11:00
parent ed66f4f285
commit 5ce9e51ae7
51 changed files with 1959 additions and 1083 deletions
@@ -0,0 +1,14 @@
using System;
namespace Disco.Models.Services.Devices.Importing
{
public interface IDeviceImportColumn
{
int Index { get; }
string Name { get; }
DeviceImportFieldTypes Type { get; }
Type Handler { get; }
IDeviceImportField GetHandlerInstance();
}
}
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Models.Services.Devices.Importing
{
@@ -10,11 +7,19 @@ namespace Disco.Models.Services.Devices.Importing
{
string SessionId { get; }
string Filename { get; }
List<Tuple<string, DeviceImportFieldTypes>> Header { get; }
List<Tuple<string, DeviceImportFieldTypes, Func<string[], string>, Type>> ParsedHeaders { get; }
List<string[]> RawData { get; }
string DatasetName { get; }
int ColumnCount { get; }
IEnumerable<IDeviceImportColumn> Columns { get; }
IDeviceImportColumn GetColumn(int Index);
void SetColumnType(int Index, DeviceImportFieldTypes Type);
int? GetColumnByType(DeviceImportFieldTypes FieldType);
List<IDeviceImportRecord> Records { get; }
int AffectedRecords { get; }
int RecordCount { get; }
IDeviceImportDataReader GetDataReader();
IEnumerable<KeyValuePair<DeviceImportFieldTypes, Type>> GetFieldHandlers();
List<IDeviceImportRecord> Records { get; set; }
int AffectedRecords { get; set; }
}
}
@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Models.Services.Devices.Importing
{
public interface IDeviceImportDataReader : IDisposable
{
void Reset();
bool Read();
int Index { get; }
int GetRowNumber(int Index);
string GetString(int ColumnIndex);
IEnumerable<string> GetStrings(int ColumnIndex);
bool TryGetNullableInt(int ColumnIndex, out int? value);
bool TryGetNullableBool(int ColumnIndex, out bool? value);
bool TryGetNullableDateTime(int ColumnIndex, out DateTime? value);
bool TestAllNotEmpty(int ColumnIndex);
bool TestAllNullableInt(int ColumnIndex);
bool TestAllInt(int ColumnIndex);
bool TestAllNullableBool(int ColumnIndex);
bool TestAllNullableDateTime(int ColumnIndex);
}
}
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace Disco.Models.Services.Devices.Importing
{
@@ -9,6 +9,7 @@ namespace Disco.Models.Services.Devices.Importing
{
public interface IDeviceImportRecord
{
int Index { get; }
string DeviceSerialNumber { get; }
IEnumerable<IDeviceImportField> Fields { get; }