Guid在Excel中使用SpreadSheetGear

我只需要一个确认/快速信息。 我觉得这是一个显而易见的问题,但只是要确保和充分理解发生的事情。 在网上找不到更多的细节。

我使用SpreadSheetGear从数据表转储电子表格中的数据。 这些桌子上有一些Guid。 现在,当我尝试从我的数据表中复制时,我得到一个错误,说错误的数据types,除非我导入使用标志AllText或通过删除我的datable中包含GUID的列。

看起来像excel不能支持guids作为variables/数据types。 这是正常的吗? 我不需要这些数据,无论如何都能以文本格式轻松转换,但我只想完全理解这个问题。

这是一个示例代码,出现以下错误:单元格值types无效。

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(); } 

使用IRange。 没有SetDataFlags .AllText标志的CopyFromDataTable (…)基本上就像使用循环来设置IRange。 DataTable中数据的每个“单元”的值 ,这意味着此传入DataTable数据中使用的数据types受到IRange的设置要求的限制。 价值 ,其中指出:

…将指定单元格的值设置为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一起使用。 在DataTable中使用此数据types的值也不起作用。

当您指定SetDataFlags .AllText标志时,SpreadsheetGear首先调用DataTable中数据的每个“单元”上的ToString(),因此所有传入的数据types都将被接受,而不pipe它是否在上面的列表中。