【问题标题】:count number of rows in excel using c#使用c#计算excel中的行数
【发布时间】:2012-07-19 11:53:31
【问题描述】:

我有一个带有类似代码的 excel 表

VPUDB001
VPUDB002
VPUDB003
VPUDB004
VPUDB005
VPUDB006
VPUDB007
VPUDB008
VPUDB009
VPUDB010
VPUDB011

VPULN001
VPULN002
VPULN003
VPULN004
VPULN005
VPULN006
VPULN007
VPULN008
VPULN009

我想在excel中显示以VPUDBVPULN开头的行数。

private void browse_Click(object sender, EventArgs e)
{
    DialogResult fileopen = openFileDialog1.ShowDialog();
    string filename = openFileDialog1.FileName;
    textBox1.Text = filename;
    try
    {
        olecon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filename + "';Extended Properties=Excel 12.0");
        olecon.Open();
        DataTable dt = new DataTable();
        dt = olecon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        string[] excelsheetnames = new string[dt.Rows.Count];
        int i = 0;
        foreach (DataRow row in dt.Rows)
        {
            excelsheetnames[i] = row["TABLE_NAME"].ToString();
            string sheetnamealone = excelsheetnames[i].Remove(excelsheetnames[i].IndexOf('$'));
            comboBox1.Items.Add(sheetnamealone);
            i++;
        }
        //comboBox1.SelectedIndex = 1;

    }
    catch
    {

    }
    finally
    {
        olecon.Close();
    }
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    OleDbCommand cmd = new OleDbCommand("Select [code] FROM ["+comboBox1.SelectedItem+"$] ", olecon);
    olecon.Open();
    OleDbDataReader dReader;
    dReader = cmd.ExecuteReader();
    while (dReader.Read())
    {
        string s = dReader[0].ToString();


    }
    olecon.Close();
}

在这里,我浏览 excel 表,并在组合框中计数并显示,然后在组合选择事件中,我需要如上所述计算特定的表行。

【问题讨论】:

  • 为什么不使用COUNTIF()工作表功能?

标签: c# asp.net excel


【解决方案1】:

像这样尝试 linq 将解决您的问题

 var query = from row in dTable.AsEnumerable()
             where ((row.Field<string>("columnname")).contains("VPUDB")
                   || (row.Field<string>("columnname")).contains("VPULN"))

      select row;

【讨论】:

  • 但是先生,我的 id 会动态变化,它不是静态的..它可能是 AAAAB 或其他的东西
  • 嗨,Pranay Rana,我使用了以下字符串 [] strarray = strlst.ToArray(); var distinctValues = (从 strarray 中的值选择值).Distinct(); //或者甚至更好 distinctValues = strarray.Distinct();我使用了distint代码,我需要distint代码和count...你能帮忙吗
  • @chitra - 您可以为此使用 Count() 函数............类似 distinctValues = strarray.Distinct();和 int count = distinctValues.Count();
  • 嗨,Pranay Rana,count=distinctvalues.count() 给我的值是 2。我想像 VPUDB-12 和 VPULN-10 一样显示。我的意思是值重复的次数。
【解决方案2】:

当您最初为您的组合框计数时,使用字符串比较来查看它是否包含VPUDBVPULN,如果包含,则增加一个计数器。

【讨论】:

  • 但我有不同的列表组合...它不包含特定的单词
  • 你可以这样使用: if(string contains VPUDB) add to list A else if(string contains VPULN) add to list B
  • Mac-感谢回复我,我的代码是动态的,它会有不同的组合。它可能是 SFTEG 等。我想从字符串数组中选择前 5 个字符并将其与下一行进行比较,如果计数相同,则下一个组合,我想显示 VPUDB-20、VPULN-35、SFTEG-12。
  • 好的,如果您需要这样做,那么只需读取一个单元格,读取下一个单元格并进行比较。如果相同,则根据单元格内的文本增加一个计数器。这个程序的要求是一个简单的文本比较...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多