作为我正在开展的项目的一部分,我需要能够在Excel电子表格中创建复选框,任何人都可以提供一个简单的示例或指导我有用的参考吗? 我正在使用excel Interop。
提前致谢。
答案 0 :(得分:6)
您可以将两种控件放在工作表上,控件工具箱中的ActiveX控件和窗体(或绘图)工具栏中的窗体控件。
通常,两种类型的控件类似,因为它们的工作方式相同。也就是说,“绘图”工具栏中的文本框是一个控件,您可以在其中键入文本。这基本上与ActiveX文本框相同。两种类型的复选框用于选择或取消选择选项。
显然,决定使用其中一种或另一种是基于它们的差异,而不是它们的相似之处。无论如何,主要区别在于事件和格式。在显示或响应控件事件时,ActiveX控件为电子表格设计人员提供了更大的灵活性。查看ActiveX控件的属性表明,与使用Forms控件相比,您可以使用它们做多少。此外,Forrms控件有一个基本事件,即click事件,您可以通过为控件分配宏来访问该事件。另一方面,ActiveX控件有很多事件。例如,ActiveX组合框有15个事件。
所有这些灵活性都需要付出代价(你知道会这样)。 ActiveX控件带来了更多的开销,并且有着错误的历史。
权衡好坏,我总是使用Forms控件,除非我有特定的理由使用ActiveX。表单控件很精简,使用简单易用。但是,如果我需要一个组合框来显示某种字体,我别无选择,只能使用ActiveX控件。同样,如果我需要避免文本框中的某些字符,我将需要KeyPress事件,这是Form文本框中没有的。所以我的建议和我的做法是使用Forms控件,除非我需要只有ActiveX控件提供的功能。
表单复选框添加代码
ActiveSheet.CheckBoxes.Add 87, 18, 72, 17.25
ActiveX复选框添加代码
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=69.75, Top:=59.25, Width:=117.75, Height _
:=14.25)
此代码是VBA,但可以通过interop轻松地从.Net调用
答案 1 :(得分:1)
这是我用于c#
的内容OLEObjects objs = worksheet.OLEObjects();
OLEObject obj = objs.Add("Forms.CheckBox.1", System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, cell.Left + 1, cell.Top + 1, cell.Width - 2, cell.Height - 2);
obj.Object.Caption = "";
if (text == "TRUE")
{
obj.Object.value = true;
}
else
{
obj.Object.value = false;
}
我使用
cell.Left + 1, cell.Top + 1, cell.Width - 2, cell.Height - 2
来维护单元格四边的边框
答案 2 :(得分:-1)
有趣的问题。我没有尝试过,但我认为您要么将其添加为Worksheet.Shape项,要么将其添加为OLEObject。以下示例显示如何从工作表中读取现有复选框。这可能是一个很好的起点,从后面开始工作: