【发布时间】:2019-01-24 03:34:01
【问题描述】:
我的 Excel 工作表的 B 列中有数据,我想用它来填充组合框,该行中的每个单元格都是组合框下拉列表中的一个值。
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("X:\\Private\\Users\\Temp\\testexcel.xlsm");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.Range["B1:B40"];
foreach (var d in xlRange)
{
comboBox1.Items.Add(d);
}
我的代码似乎不起作用,我无法确定应该在哪里转换为字符串,这样它就不会作为 system.COMobject 返回,而是将 excel 单元格中的所有字符串作为组合框中的值。我应该使用数组还是列表,或者两者都不使用?我是否正确获取了列范围?
【问题讨论】:
-
这可能非常低效,因为该范围将包括 B 列的所有行 - 超过 100 万。如果您知道数据在第一个空白单元格处停止,最好避免创建大量列表并使用 for 循环遍历单元格,直到获得空值。正如 Jazimov 所说 - 你应该使用 d.Value(或 d.Value2)。如果您确实遍历 Cells 属性 - 您应该注意,虽然它作为数组访问,但第一个值是 Cells[1,1] 而不是 Cells[0,0]
-
我已将代码编辑为具有特定范围 (B1-B40),而不是整个列。组合框填充了项目,但每个项目只显示 System.COM 对象,而不是实际值。我尝试使用“comboBox1.Items.Add(d.Value);”就像 Jazimov 说的,但它给出了一个错误“对象不包含值的定义”。你能看看我上面编辑的代码吗?我想我需要以某种方式将所有对象转换为适当的数组或字符串或其他东西。
-
没关系,我已经找到办法了,谢谢!
标签: c# excel visual-studio combobox