Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取excel工作表,并在读取后添加到列表框。C#_C#_Excel_Listbox - Fatal编程技术网

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

读取excel工作表,并在读取后添加到列表框。C#,c#,excel,listbox,C#,Excel,Listbox,我希望读取一个excel文件并将其发布到一个带有名称的列表框(employeeBox)(始终位于excel工作表的第一列)。然后,我希望在列表框中选择名称后删除该名称。我的第一个也是主要的问题是,它不会在列表框中加载名称。当我调试它时,它看起来甚至不像是在加载excel来读取。我已经把代码放在按钮中,它可以正常加载。有人能帮忙吗?这是我的第一篇文章。因此,如果有任何关于如何提问的建议,请让我知道。 另外,设置代码只是为了获取单元格的值。。还没有名字 private void Form3_Load

我希望读取一个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();
}     
private void Form3\u加载(对象发送方,事件参数e)
{
Excel.Application xlexcel=新的Excel.Application();
xlexcel.Visible=true;
string fileName=“C:\\MyExcel.xlsx”;
Excel.Workbook xlWorkBook=xlexcel.Workbooks.Open(文件名,类型.Missing,类型.Missing,类型.Missing,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失);
Excel.Worksheet xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets[1];
Excel.Range usedRange=xlWorkSheet.usedRange;
字符串数据=”;
Excel.Range curRange;
List itemsToAdd=新列表();
尝试
{
foreach(usedRange.Rows中的Excel.Range行)
{
curRange=(Excel.Range)row.Cells[1,1];
data=curRange.Cells.Value.ToString();
itemsToAdd.Add(数据);
xlWorkBook.Close();
xlexcel.Quit();
}
employeeBox.DataSource=itemsToAdd;
}
捕获(例外)
{
Console.WriteLine();
}
}
私有void employeeBox\u SelectedIndexChanged(对象发送方,事件参数e)
{
employeeBox。单击+=employeeBox\u单击;
}
私有void employeeBox\u单击(对象发送者,事件参数e)
{
抛出新的NotImplementedException();
}     
在进行了适当的更正之后,它给了我一个运行时异常。。这促使我使用try-catch。。这消除了错误,但仍然没有增加。它显示了MessageBox,但没有添加到listbox。现在。。我做了实验,发现当你关闭excel时它会增加,但它只增加了一件事


这应该可以使用数据循环遍历每一行,并从第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();
Range usedRange=xlWorkSheet.usedRange;
字符串数据=”;
Excel.Range curRange;
List itemsToAdd=新列表();
foreach(usedRange.Rows中的Excel.Range行)
{
curRange=(Excel.Range)row.Cells[1,1];
if(curRange.Cells.Value2!=null)
{
data=curRange.Cells.Value2.ToString();
itemsToAdd.Add(数据);
}
}
listBox1.DataSource=itemsToAdd;
xlWorkBook.Close(false,System.Reflection.Missing.Value,System.Reflection.Missing.Value);
xlexcel.Quit();
更新以忽略空行-当usedRange返回时。。。如果数据不在连续行中,则可能包含空行


希望这有帮助

你在哪里把名字添加到列表框中?@Magnetron我还没弄清楚。。它现在应该只是读取单元格的值,但它甚至没有这样做。有什么建议吗@Magnetron@I我只是一个有趣的程序员。。。在你的foreach循环中。。。范围在哪里定义?是你定义了这些范围。。。示例如果要从单元格A1、A1获取文本。。。你会用。。。Excel.Range range1=xl工作表。获取范围(“A1”、“A1”);然后你就可以设置。。字符串值=range1.Text.ToString();我只是在猜…@JohnG。。我是从“.Cells”得到的。。它应该读取excel工作表中包含数据的所有单元格。我确实试过你刚才说的,它仍然显示一个空白列表框。编译很好。。没有给出消息框@JohnG@I我只是一个有趣的程序员。。。我更新了代码,包括将项目放入列表框。。。我在你的原始代码中看不到你在做什么。太棒了!!当它忽略空白行时,这是有效的。非常感谢。如果我能给你1000个喜欢,我会的@我只是个有趣的程序员。。在上面更新的代码中。。。您正在关闭循环中的电子表格。。。在读取所有数据之前不要关闭excel。。。将关闭并退出excel移出foreach循环!