使用電子表格工具,是否有任何方法可以獲得列的「可能」數據類型,不包括標題行(如果存在)以及合理容忍稀疏人口而不必自己做一個樣本...有沒有辦法做到這一點?不包括標題行的Excel列數據類型
因此,例如,如果我有一個excel行像
| Customers | Sales Item | Sale Date | Contact | Quantity |
| IBM | Keyboard | 28-10-2011 | | 2 |
| MS | Mouse | 27-09-2011 | joe | 5 |
我希望看到
字符串,字符串,日期時間,字符串,數字
編輯
所以我最終不得不像@Tim Anderson所建議的那樣進行採樣,但我需要處理稀疏數據的情況,並且默認t o當col中的類型衝突時的字符串。 (這是在一個遍歷cols的循環中調用的,我不能發佈它,因爲它包含一些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;
}
}
}
我相信這可以進一步改善,所以請隨時發佈改進,但這是我現在需要的。
謝謝@Tim Anderson。事實上,我最終做了類似的事情,儘管我還需要對一些行進行抽樣以處理稀疏數據。如果有人需要做類似的事情,我會編輯我的文章。 –