【问题标题】:How can I populate a comboBox using the fields in an excel column? C#如何使用 excel 列中的字段填充组合框? C#
【发布时间】: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


【解决方案1】:

不是将d添加到comboBox1,而是像这样添加d.Value是否有效?

comboBox1.Items.Add(d.Text);

(您可能需要转换为字符串,尽管 .Text 属性已经应该返回一个字符串:

comboBox1.Items.Add((string)d.Text);

)

【讨论】:

  • 谢谢,但它似乎仍然不起作用,我认为我的问题在代码的前面,我如何在我的 foreach() 中对范围进行分组和迭代。也许我把它放在列表中是错误的,或者不应该一起使用列表
  • @NicolePinto:请参阅我上面关于使用列表的评论 - 创建列表需要很长时间并占用大量内存。
  • 我认为我的版本可以使用 .Text 代替。我发布代码时无法测试代码,但根据您的工作版本, .Text 属性应该可以工作。如果您可以尝试并告诉我们,它可能会对其他人有所帮助。
  • @Jazimov 我在下面发布了对我有用的内容。谢谢:)
【解决方案2】:

想通了,我必须在我的 foreach 语句中修复一些 excel 命名约定,并将它们转换为语句中的字符串!

            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 range = xlWorksheet.get_Range("B1:B40");


        foreach (Excel.Range item in range.Cells)
        {

            string lst = (string)item.Text;
            comboBox1.Items.Add(lst);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多