2014-10-21 3 views
2

Мне просто нужно подтверждение/краткая информация. Я чувствую, что это очевидный вопрос, но просто хочу убедиться и полностью понять, что происходит. Не удалось найти много деталей в Интернете.Руководство в Excel Использование SpreadSheetGear

Я использую SpreadSheetGear, чтобы сбрасывать данные в электронных таблицах из datatable. В этих таблицах есть несколько указаний. Теперь, когда я пытаюсь скопировать из моей таблицы данных, я получаю сообщение об ошибке неправильного типа данных, если только я не импортирую с использованием флагов AllText или удаляя столбцы, содержащие Guids, в моем datable.

Кажется, что excel не поддерживает гиды как переменные/тип данных. Это нормально? Я не обязательно нуждаюсь в данных, так или иначе, может легко конвертироваться в текстовом формате, но я просто хочу полностью понять эту проблему.

Вот пример кода со следующей ошибкой: Недопустимый тип значения ячейки.

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

ответ

3

Использование IRange. CopyFromDataTable (...) без SetDataFlags. Флаг AllText в основном похож на использование цикла для установки IRange. Value для каждой «ячейки» данных в вашем DataTable, что означает, что типы данных, используемые в этих входящих данных DataTable, подчиняются требованиям настройки IRange. Value, в котором говорится:

...sets the value of the specified cell as a System.String, System.Double, System.Int32, System.Int64, System.Int16, System.Char, System.Boolean, System.DateTime, SpreadsheetGear.ValueError, System.Decimal, System.DBNull, object[,] or null

Поскольку Guid не является допустимым типом для использования с IRange. Value, использование этого типа данных в DataTable также не будет работать.

Когда вы указываете флаг SetDataFlags. Вкладка «Текст таблицы» сначала запускает ToString() на каждой «ячейке» данных в вашем DataTable, поэтому все входящие типы данных будут приняты независимо от того, находится ли он в указанном выше списке или нет ,

+1

С уважением, у Тима не было рефлекса, чтобы посмотреть в свойство IRange.Value, но это имеет смысл. В то же время имеет смысл, что Excel не может читать Гиды. Спасибо за ваш быстрый ответ!! ура –

Смежные вопросы