Skip to content

Commit

Permalink
optional argument for table origin on generic import/export
Browse files Browse the repository at this point in the history
  • Loading branch information
mstijak committed Aug 5, 2014
1 parent 3f16b83 commit a577cf6
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Source/Codaxy.Xlio.Tests/Generic/ImportExportTests.cs
Expand Up @@ -8,7 +8,7 @@
namespace Codaxy.Xlio.Generic
{

[TestFixture]
[TestFixture(Active=true)]
class ImportExportTests
{
class C1
Expand Down
13 changes: 8 additions & 5 deletions Source/Codaxy.Xlio/Generic/XlioExporter.cs
Expand Up @@ -24,11 +24,14 @@ public static void Export<T>(IEnumerable<T> data, Stream stream, TableInfo<T> t
wb.SaveToStream(stream, IO.XlsxFileWriterOptions.AutoFit);
}

public static void Export<T>(IEnumerable<T> data, Sheet sheet, TableInfo<T> t = null) where T : new()
public static void Export<T>(IEnumerable<T> data, Sheet sheet, TableInfo<T> t = null, Cell tableOrigin = null) where T : new()
{
if (t == null)
t = TableInfo<T>.Build();

if (tableOrigin == null)
tableOrigin = new Cell(0, 0);

var exportColumns = t.Columns.Where(a => a.Getter != null).ToArray();

var headerStyle = new CellStyle
Expand All @@ -39,8 +42,8 @@ public static void Export<T>(IEnumerable<T> data, Sheet sheet, TableInfo<T> t =

for (var i = 0; i < exportColumns.Length; i++)
{
sheet[0, i].Value = exportColumns[i].Caption ?? exportColumns[i].Name;
sheet[0, i].Style = headerStyle;
sheet[tableOrigin.Row, tableOrigin.Col + i].Value = exportColumns[i].Caption ?? exportColumns[i].Name;
sheet[tableOrigin.Row, tableOrigin.Col + i].Style = headerStyle;
}

int row = 1;
Expand All @@ -52,14 +55,14 @@ public static void Export<T>(IEnumerable<T> data, Sheet sheet, TableInfo<T> t =
if (exportColumns[i].Exporter != null)
{
var cell = exportColumns[i].Exporter(record);
sheet[row, i] = cell;
sheet[tableOrigin.Row + row, tableOrigin.Col + i] = cell;
}
else
{
var value = exportColumns[i].Getter(record);
if (exportColumns[i].ExportConverter != null)
value = exportColumns[i].ExportConverter(value);
sheet[row, i].Value = value;
sheet[tableOrigin.Row + row, tableOrigin.Col + i].Value = value;
if (exportColumns[i].ExportFormatter != null)
exportColumns[i].ExportFormatter(sheet[row, i], record, i, value);
}
Expand Down
22 changes: 14 additions & 8 deletions Source/Codaxy.Xlio/Generic/XlioImporter.cs
Expand Up @@ -15,22 +15,28 @@ class ImportedColumnInfo<T>
public ColumnInfo<T> Column { get; set; }
}

public static List<T> Import<T>(Sheet sheet, TableInfo<T> t = null, bool skipEmptyRows = true) where T : new()
public static List<T> Import<T>(Sheet sheet, TableInfo<T> t = null, bool skipEmptyRows = true, Cell tableOrigin = null) where T : new()
{
if (t == null)
t = TableInfo<T>.Build();

if (tableOrigin == null)
tableOrigin = new Cell();

var importColumns = new List<ImportedColumnInfo<T>>();
var firstRow = sheet[0];
foreach (var cell in firstRow)
var headerRow = sheet[tableOrigin.Row];
foreach (var cell in headerRow)
{
var name = cell.Value.Value as String;
if (!String.IsNullOrEmpty(name))
if (cell.Key >= tableOrigin.Col && cell.Key <= tableOrigin.Col + t.Columns.Count)
{
var c = t.Columns.FirstOrDefault(a => a.Name == name) ?? t.Columns.FirstOrDefault(a => a.Caption == name);
if (c != null && c.Setter!=null)
var name = cell.Value.Value as String;
if (!String.IsNullOrEmpty(name))
{
importColumns.Add(new ImportedColumnInfo<T> { Index = cell.Key, Column = c });
var c = t.Columns.FirstOrDefault(a => a.Name == name) ?? t.Columns.FirstOrDefault(a => a.Caption == name);
if (c != null && c.Setter != null)
{
importColumns.Add(new ImportedColumnInfo<T> { Index = cell.Key, Column = c });
}
}
}
}
Expand Down

0 comments on commit a577cf6

Please sign in to comment.