在C#中从.xls中读取文本

时间:2013-05-10 06:29:51

标签: c# asp.net excel

我尝试在c#中阅读.xls苍蝇。 如果第一个数据列是文本,那么它会显示DBNull.Value =true。 但如果它的数量是可以的。 那么如何阅读文本?

这是我的代码:

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 ) // problem is here.... if the first column is text then it true. I want to tead text as well.
    {
    }
}

3 个答案:

答案 0 :(得分:2)

尝试:

string dval = dv[i][0] as string;
if(dval != null)
{
    //use string

要使用该字符串,您必须调用ToString()方法。即:

dv[i][0].ToString()

答案 1 :(得分:0)

  1. 对于DBNull检查,请使用Convert.IsDBNull(object)方法。
  2. 要将值读取为文本,请使用Convert.ToString(object, IFormatProvider)方法或类型转换。
  3. 即。可能你需要下一件事:

    if(!Convert.IsDBNull(dv[i][0])) {…
    // or
    var text = Convert.ToString(dv[i][0], CultureInfo.CurentCulture);
    if(!String.IsNullOrEmpty(text)) {…
    // or
    var text = dv[i][0] as string;
    if(text != null) {…
    

    取决于你需要的东西。

答案 2 :(得分:0)

您是否仅限于使用OleDbDataAdapter或是否可以使用其他库?如果可以的话,你可能想给linqtoexcel一个机会。我发现它更容易使用,因为我是linq的忠实粉丝。它可以从上面的链接获得,但它也可以在nuget上使用。

这是您正在使用的一种语法:

var excel = new ExcelQueryFactory("excelFileName");
var indianaCompanies = from c in excel.Worksheet()
                       where c["State"] == "IN" || c.Zip == 46550
                       select c;

如果您有一个名为excelFileName的电子表格,并且您想要的数据位于第一个工作表上,则可以选择State列(假定列名称位于第一行)的任何行等于INZip列= 46550。他们有一个wiki页面,在here

上加载了更多示例