如何用C#读取Excel下拉框值?代码编译报错求助
修复C#读取Excel下拉框选中值的编译错误
错误原因分析
oSheet.DropDowns(Type.Missing):DropDowns是工作表的属性而非方法,无需传入参数。allDropDowns.Item("1"):Item方法接受整数索引(从1开始)或控件的名称字符串。如果是按序号访问,应传入整数而非字符串;如果是按名称,需确保下拉框的Name属性确实是"1"。- 原代码中
oneDropdown.get_List已过时,可直接使用List属性替代。
修复后的完整代码
using Microsoft.Office.Interop.Excel; using System; class ExcelDropdownReader { static void Main() { Application oXL = new Application(); _Workbook oWB; _Worksheet oSheet; try { // 打开指定Excel文件 oWB = (_Workbook)oXL.Workbooks.Open(@"D:\testexcel.xls"); // 获取第1个工作表(注意:Sheets索引从1开始) oSheet = (_Worksheet)oWB.Sheets.Item[1]; // 获取工作表中所有下拉框控件集合 DropDowns allDropDowns = oSheet.DropDowns; // 方式1:按整数索引访问下拉框(第1个下拉框,索引从1开始) DropDown oneDropdown = allDropDowns.Item[1]; // 方式2:按控件名称访问(需确保下拉框的Name属性为"DropDown1") // DropDown oneDropdown = allDropDowns.Item["DropDown1"]; // 判断是否有选中项(ListIndex为0表示未选中) if (oneDropdown.ListIndex > 0) { // 获取选中项的文本 string selectedText = oneDropdown.List[oneDropdown.ListIndex]; Console.WriteLine($"选中值:{selectedText}"); } else { Console.WriteLine("未选中任何项"); } } catch (Exception ex) { Console.WriteLine($"错误:{ex.Message}"); } finally { // 释放资源,避免Excel进程残留 oWB?.Close(false); oXL?.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL); } } }
关键修复点说明
- 移除
DropDowns(Type.Missing)的参数,直接通过oSheet.DropDowns获取控件集合。 - 将
allDropDowns.Item("1")改为整数索引allDropDowns.Item[1],或使用下拉框实际名称的字符串索引。 - 用
oneDropdown.List[oneDropdown.ListIndex]替代过时的get_List方法。 - 添加资源释放逻辑,防止Excel进程在后台残留。
内容的提问来源于stack exchange,提问作者Nirav Darji
相关产品推荐
相关产品推荐

