使用SpreadSheetGear在Excel中进行Guid

时间:2014-10-21 16:28:59

标签: excel datatable guid spreadsheetgear variable-types

我只需要确认/快速信息。我觉得这是一个显而易见的问题,但只是想确保并完全理解发生了什么。无法在网上找到更多细节。

我使用SpreadSheetGear从数据表转储电子表格中的数据。这些表中有一些Guid。现在当我尝试从我的数据表中复制时,我收到错误的错误数据类型,除非我使用标记AllText导入或删除我的数据中包含Guids的列。

似乎excel不能支持Guids作为变量/数据类型。这是正常的吗?我不需要数据无论如何都可以轻松转换为文本格式,但我只是想完全理解这个问题。

以下是包含以下错误的示例代码:无效的单元格值类型。

public void Test()
{
    DataTable table = new DataTable();
    table.Columns.Add("ID", typeof(Guid));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Patient", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    table.Rows.Add(Guid.NewGuid(), "Indocin", "David", DateTime.Now);
    table.Rows.Add(Guid.NewGuid(), "Enebrel", "Sam", DateTime.Now);
    table.Rows.Add(Guid.NewGuid(), "Hydralazine", "Christoff", DateTime.Now);

    IWorkbook wrk = Factory.GetWorkbook();
    IWorksheet wsht = wrk.Worksheets["Sheet1"];
    IRange rng = wsht.Cells["A1"];
    rng.CopyFromDataTable(table, SpreadsheetGear.Data.SetDataFlags.None);
    wrk.SaveAs("C:\\MyData.xls",FileFormat.OpenXMLWorkbook);
    wrk.Close();
}

1 个答案:

答案 0 :(得分:3)

在没有CopyFromDataTable的情况下使用IRange。SetDataFlags(...)。AllText标志基本上就像使用循环为每个"单元格设置IRange。Value&#34 ; DataTable中的数据,这意味着此传入的DataTable数据中使用的数据类型受IRange。Value的setter要求的约束,其中声明:

  

...将指定单元格的值设置为System.String,   System.Double,System.Int32,System.Int64,System.Int16,System.Char,   System.Boolean,System.DateTime,SpreadsheetGear.ValueError,   System.Decimal,System.DBNull,object [,]或null

由于Guid不是与IRange Value一起使用的有效类型,因此在DataTable中使用此数据类型也无法正常工作。

当您指定SetDataFlags。AllText标志时,SpreadsheetGear首先在每个"单元格上调用ToString()" DataTable中的数据,因此无论是否在上面的列表中,都将接受所有传入的数据类型。