C# 用C语言读取excel表格单元格

C# 用C语言读取excel表格单元格,c#,asp.net,C#,Asp.net,我试着用c读.xls文件 这是我的密码 OleDbCommand command = new OleDbCommand("Select [Id], [Name], [Email] from [sheet$]", connection); OleDbDataAdapter objAdapter = new OleDbDataAdapter(); objAdapter .SelectCommand = command; DataSet objDataset = new DataSet(); o

我试着用c读.xls文件

这是我的密码

OleDbCommand command = new OleDbCommand("Select [Id], [Name], [Email] from [sheet$]", connection);

OleDbDataAdapter objAdapter = new OleDbDataAdapter();
objAdapter .SelectCommand = command;

DataSet objDataset = new DataSet();

objAdapter .Fill(objDataset1);
DataView dv = objDataset .Tables[0].DefaultView;

for (int i = 0; i < dv.Count; i++)
{
    if (dv[i][0] != DBNull.Value ) 
    {
    }
}
但在excel工作表中,单元格有一个绿色标记,它不会读取

它说它是空的。 那么我怎么能像这样阅读呢


谢谢。

根据我过去的经验,Excel可能对每一列的数据类型都做出了最好的猜测,有时会出错。任何与假定的数据类型不匹配的内容都将返回为null。请看以下内容,特别是有关IMEX设置的内容


从OleDbCommand读取Excel工作表时,您的工作表必须格式化为表格,列标题位于第1行,而您的小屏幕截图下面的数据似乎不符合此要求。我不知道如果工作表不是这样设置的,你会得到什么样的读数,但是DBNull.Value听起来是一种合理的可能性

至于绿色标记,单元格可能被格式化为文本-从内存中我会说,如果你将鼠标悬停在绿色标记上,Excel会说数字值被格式化为文本;如果您只有其中的两个,您可以尝试Ctrl+F1来修复格式设置,使其成为常规格式,并尝试F2+输入Enter cell/确认条目来修复值。当然,如果有5000行数据,这不是您想要做的事情-您可以复制并粘贴这些值,也就是说,不使用新工作表的格式

如果您的数据从$A$1开始,但仍然得到的是DBNull.Value,那么我会尝试类似的方法,假设您从OLE驱动程序得到的是object:

另外,请确保在保存和关闭工作簿时,要从中读取的工作表处于活动状态。或者,如果可能的话,将其作为工作簿中唯一的工作表

for (int i = 0; i < dv.Count; i++)
{
    var value = dv[i][0].ToString();
    if (!string.IsNullOrEmpty(value)) 
    {
        var intValue = Convert.ToInt32(value);
        ...
    }
}