我有一个代码,可以使用Excel加载项项目列出Excel 2010中SQL的所有员工的时间输入(In Time,Out Time,Comments,Employee Name)信息。在这里,我想提前一步,从ComboBox控件列出所选员工的时间输入信息(分别在标签和标签属性中保存员工姓名和员工ID),使用Excel加载项放置在Excel功能区中。
在这里,我无法从我添加的ComboBox中获取所选员工的标签(Id)。
请任何人帮我解决此问题。
由于
答案 0 :(得分:3)
这有点棘手但可行。首先,你只能通过Ribbon XML(不是通过设计师 - ,至少我不知道它)来做到这一点
我创建了非常简单的XML
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup"
label="My Group">
<dropDown id ="cbTest"
label="Test Item"
getItemID="GetItemID"
getItemLabel="GetItemLabel"
getItemCount="GetItemCount"
onAction="OnAction">
</dropDown >
</group>
</tab>
</tabs>
</ribbon>
</customUI>
关键部分是 GetItemCount (您可以根据需要命名) 如果没有此回调,您将永远不会获得getItemID或getItemLabel的任何回调。
其余的很简单,创建一个存储所需信息的对象,例如
public class Employee
{
public Employee(int id, string name)
{
this.ID = id;
this.Name = name;
}
public int ID { get; set; }
public string Name { get; set; }
}
使用下面的值启动对象(为了更容易跟随我将所有内容放在Ribbon类中,但这绝对是错误的方法)
public class Ribbon1 : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
private List<Employee> _employees = new List<Employee>();
public Ribbon1()
{
_employees.Add(new Employee(1, "John"));
_employees.Add(new Employee(2, "Mark"));
_employees.Add(new Employee(3, "Tom"));
}
// ... rest of the code here
}
然后回调(仍在Ribbon1类中) (有关回调列表,请参阅here)
public int GetItemCount(Office.IRibbonControl control)
{
return _employees.Count;
}
public string GetItemID(Office.IRibbonControl control, int index)
{
var employee = _employees[index];
return employee.ID.ToString();
}
public string GetItemLabel(Office.IRibbonControl control, int index)
{
var employee = _employees[index];
return employee.Name;
}
public void OnAction(Office.IRibbonControl control, string selectedId, int selectedIndex)
{
var selected = string.Format("{0} ({1})", _employees[selectedIndex].Name, _employees[selectedIndex].ID);
System.Windows.Forms.MessageBox.Show(selected);
}
然后,您应该在Office应用程序中看到DropDown列表,在此示例中带有树值的加载项选项卡下,当您选择一个时,您应该获得该员工的姓名和ID。