读取excel表,并在读取后添加到列表框。 C#

时间:2016-09-30 14:52:07

标签: c# excel listbox

我希望阅读一个excel文件并将其发布到一个带有名称的listBox(employeeBox)(始终位于excel表的第一列)。然后,一旦我在列表框中选择了名称,我就会删除该名称。我的第一个问题和主要问题是,它会在列表框中加载名称。当我调试它时,它看起来甚至看起来都没有加载excel来读取。我把代码放在按钮中,它加载正常。有人可以帮忙吗?这是我的第一篇文章。因此,如果有任何关于如何提问的建议,请告诉我。 附:设置代码只是为了得到单元格的值。不是名字。

private void Form3_Load(object sender, EventArgs e)
{
    Excel.Application xlexcel = new Excel.Application();
    xlexcel.Visible = true;
    string fileName = "C:\\MyExcel.xlsx";
    Excel.Workbook xlWorkBook = xlexcel.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets[1];

    Excel.Range usedRange = xlWorkSheet.UsedRange;
        string data = "";
        Excel.Range curRange;
        List<string> itemsToAdd = new List<string>();

        try
        {
            foreach (Excel.Range row in usedRange.Rows)
            {
                curRange = (Excel.Range)row.Cells[1, 1];
                data = curRange.Cells.Value.ToString();
                itemsToAdd.Add(data);
                xlWorkBook.Close();
                xlexcel.Quit();
            }
            employeeBox.DataSource = itemsToAdd;
        }
        catch(Exception)
        {
            Console.WriteLine();
        }
}

private void employeeBox_SelectedIndexChanged(object sender, EventArgs e)
{
    employeeBox.Click += employeeBox_Click;
}

private void employeeBox_Click(object sender, EventArgs e)
{
    throw new NotImplementedException();
}     

经过适当的更正之后,它给了我一个运行时异常..这促使我使用了try catch ..它消除了错误,但它仍然没有添加。它显示了MessageBox但没有添加到列表框中。现在..我进行了实验,发现它在你关闭excel时会增加,但它只会增加一件事。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

这应该可以通过数据循环每一行,并从第1列获取值。

Range usedRange = xlWorkSheet.UsedRange;
string data = "";
Excel.Range curRange;
List<string> itemsToAdd = new List<string>();
foreach (Excel.Range row in usedRange.Rows)
{
  curRange = (Excel.Range)row.Cells[1, 1];
  if (curRange.Cells.Value2 != null)
  {
    data = curRange.Cells.Value2.ToString();
    itemsToAdd.Add(data);
  }
}
listBox1.DataSource = itemsToAdd;
xlWorkBook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);  
xlexcel.Quit();

更新要忽略空行 - 当usedRange返回时...如果数据不在连续的行中,则可能包含空行。

希望这有帮助!