c# - 读取 Excel 工作表,并在读取后添加到列表框。 C#

标签 c# excel listbox

我希望读取一个 Excel 文件并将其发布到一个带有名称的列表框(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..这消除了错误,但它仍然没有添加。它显示了消息框但没有添加到列表框。现在..我试验了一下,发现当你关闭excel时它会添加,但它只添加一件事。

enter image description here enter image description here

最佳答案

这应该可以循环遍历每一行数据并从第 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返回时...如果数据不在连续行中,它可能包括空白行。

希望这有帮助!

关于c# - 读取 Excel 工作表,并在读取后添加到列表框。 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794351/

相关文章:

wpf - 从 WPF 中的 ListBox 中删除项目?

c# - 如何清除列表框中的所有数据?

c# - 如何实现 EMS 竞争消费者和分销商

excel - 如何将变量传递到范围? (VBA)

c# - 如何在 ListBox 中显示类的属性?

excel - 设置动态公式 VBA

c# - ShowDialog 关闭后, View 上的 RelayCommand 仍在评估中

c# - 代码首先在运行时添加属性

c# - GnuPG 加密不适用于进程错误代码 2