有没有办法使用VSTO c#将excel分配的默认数据类型添加到其列中。
答案 0 :(得分:4)
您无法测试整个列的数据类型,因为Excel不会将列中所有单元格的数据类型限制为相同。您必须测试单个单元格中保存的数据类型。
只要单元格不为空,您就可以通过对单元格所持有的值调用Object.GetType()
方法来测试单元格所持有的数据类型:
// Using C# 4.0
Type type = worksheet.Cells[1,1].Value.GetType();
使用C#3.0会有点麻烦:
// Using C# 3.0
Type type = (worksheet.Cells[1, 1] as Excel.Range).get_Value(Type.Missing).GetType();
但是,如果单元格可能为空,则必须对其进行测试,因为空单元格返回的Range.Value
为null
,您无法调用Object.GetType()
在null
。因此,您必须明确地测试null
:
// Testing Cell Data Type via C# 4.0
object value = worksheet.Cells[1,1].Value;
string typeName;
if (value == null)
{
typeName = "null";
}
else
{
typeName = value.GetType().ToString();
}
MessageBox.Show("The value held by the cell is a '" + typeName + "'");
如果使用C#3.0,代码类似:
// Testing Cell Data Type via C# 3.0
object value = (worksheet.Cells[1, 1] as Excel.Range).get_Value(Type.Missing);
string typeName;
if (value == null)
{
typeName = "null";
}
else
{
typeName = value.GetType().ToString();
}
MessageBox.Show("The value held by the cell is a '" + typeName + "'");
希望这会有所帮助......
- 迈克
答案 1 :(得分:2)
创建 ADO.NET DataTable,SqlConnection和SqlDataAdapter。
使用Excel工作表中的数据填充DataTable
然后使用 DataTable->列[列号] - > DataType 属性从数据表中获取基础数据类型。
以下代码可以帮助您更好地理解。但是它可能不完整。
DataTable dtSourceData = new DataTable(); //ADO.NET
string Con_Str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ <Excel file path> + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
OleDbConnection con = new OleDbConnection(Con_Str);//ADO.NET
con.Open();
String qry = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter odp = new OleDbDataAdapter(qry, con);//ADO.NET
odp.Fill(dtSourceData);
con.Close();
答案 2 :(得分:1)
要获取整列的数据类型,您可以使用以下代码
// Using C# 4.0
for (int i = 0; i <= cells.LastColIndex; i++) //looping all columns of row
{
Type type = worksheet.Cells[0,i].Format.FormatType;
}
上面的代码读取第一行中所有列的数据类型。
但请记住, Excel不会将列中所有单元格的数据类型限制为相同。
答案 3 :(得分:0)
Excel中的列和行没有数据类型。 单元格具有依赖于其内容的数据类型(Double,Error,String,Boolean,Empty) 在单元格输入任何内容之前,它是空的。