Util.ToSpreadsheet() - add support for dynamic types and DataRows

Since dynamic types can be dumped perfectly fine, would it be possible to add support for these cases:

Example 1:

Util.ToSpreadsheet(ExecuteQueryDynamic("SELECT * FROM sys.tables")).Open();

Current result 1:

Example 2:

var dt = new DataTable();
dt.Columns.Add("Foo");
dt.Columns.Add("Bar");
dt.Rows.Add(dt.NewRow());
dt.Rows.Add(dt.NewRow());

Util.ToSpreadsheet(dt.Rows.Cast<DataRow>()).Open();

Current result 2:

Example 3:

var obj = new ExpandoObject();
((IDictionary<string, object>)obj)["Foo"] = "Bar";

var list = new List<dynamic>() { obj };

Util.ToSpreadsheet(list).Open();

Current result 3:

Workaround to get the actual data with column names: Dump(true) then export to Excel via grid.

Best Answer

Answers

  • nescafe
    edited May 22

    Can confirm it's working! (all presented cases). Thank you very much Joe!

    Util.ToSpreadsheet(ExecuteQueryDynamic("SELECT * FROM sys.tables")).Open();

  • nescafe
    edited May 25

    Another scenario:

    Util.ToSpreadsheet(Enumerable.Range(0, 10).Select(i => Util.HighlightIf(i % 2 == 0, new { i, j = i * 2 }))).Open();

    Current output:

    Beta:

    Expected output:

    (Note that 'Open in Excel) from datagrid works, but does not highlight the rows)