Excel中使用SpreadSheetGear的Guid



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

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

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

使用不带SetDataFlags.AllText标志的IRange.CopyFromDataTable(…)基本上就像使用循环为DataTable中的每个数据"单元格"设置IRange.Value,这意味着此传入DataTable数据中使用的数据类型受IRange.VValue的设置器要求的约束,该设置器声明:

将指定单元格的值设置为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首先对DataTable中的每个数据"单元格"调用ToString(),因此无论它是否在上面的列表中,所有传入的数据类型都将被接受。

相关内容

  • 没有找到相关文章

最新更新