Используя SpreadSheetgear, есть ли способ получить «вероятный» тип данных для столбца, исключая строку заголовка (если она существует) и достаточно терпимую к разреженной популяции без необходимости делать выборку самому ...уже способ сделать это?
так, например, если бы у меня была строка Excel, такая как
| Customers | Sales Item | Sale Date | Contact | Quantity |
| IBM | Keyboard | 28-10-2011 | | 2 |
| MS | Mouse | 27-09-2011 | joe | 5 |
, я бы ожидал увидеть
String, String, DateTime, String, Numeric
РЕДАКТИРОВАТЬ
Таким образом, я закончил с выборкой, как предложил @Tim Anderson, но мне нужно было обработать случай разреженных данных и установить значение по умолчанию для строки при конфликте типов в столбце.(это вызывается в цикле, который обходит столбцы, я не могу опубликовать его, так как он содержит некоторый IP-адрес). DataValueType - это просто локальное перечисление, а rowcount - это количество строк для выборки, а поскольку я уже выполняю выборку, я просто игнорирую строку 0.в случае, если это строка заголовка.
private DataType GetDataTypeFromColRange(IRange range, int rowcount, int col)
{
var dtlist = GetValueTypes(range, rowcount, col).Distinct();
// If conflicting types for the col default to string.
if (dtlist.Count() != 1)
{
return new DataType(DataTypeValue.String);
}
else
{
return new DataType(dtlist.First());
}
}
private IEnumerable<DataTypeValue> GetValueTypes(IRange range, int rowcount, int col)
{
for (int i = 1; i < rowcount; i++)
{
switch (range[i, col].ValueType)
{
case SpreadsheetGear.ValueType.Text:
yield return DataTypeValue.String;
break;
case SpreadsheetGear.ValueType.Number:
if (range[i, col].NumberFormatType == NumberFormatType.Date || range[i, col].NumberFormatType == NumberFormatType.DateTime)
{
yield return DataTypeValue.Date;
}
else
{
yield return DataTypeValue.Numeric;
}
break;
case SpreadsheetGear.ValueType.Logical:
yield return DataTypeValue.Bool;
break;
default: // ignore empty or errored cells.
continue;
}
}
}
Я уверен, что это можно еще улучшить, поэтому, пожалуйста, не стесняйтесь публиковать улучшения, но это делает то, что мне сейчас нужно.