我希望阅读一个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时会增加,但它只会增加一件事。
答案 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返回时...如果数据不在连续的行中,则可能包含空行。
希望这有帮助!