我想知道有没有办法使用C#复制插入图表对话框功能。我需要的是显示一个弹出窗口,但更重要的是让用户选择数据范围。
我还希望使用Excel的彩色框突出显示范围。这是插入图表时excel如何突出显示范围的图像。我希望能够从我的C#插件中获得这些框。
Excel range highlighting http://img696.imageshack.us/img696/5290/excel.png
答案 0 :(得分:3)
在VBA中有一个RefEdit控件可以让你这样做,并且在这里有一个关于如何使用它的详细演练:How to Use the RefEdit Control with a UserForm。
不幸的是,没有内置控件允许您在C#中执行此操作。你可以使用VBA作为你的前端 - 我非常怀疑你想做什么 - 或者你可以使用C#创建一个RefEdit控件。有一篇关于如何执行此操作的文章,以及一个功能齐全的C#代码示例,这里是:Gabhan Berry的How to Code a RefEdit control。
根据zzandy的评论进行更新:
“实际上问题是关于如何 突出显示所选范围,而不是如何 选择范围。 InputBox (csharp-examples.net/inputbox)是 可从C#获得并允许选择 范围“。
无法以多种颜色突出显示范围。这种突出显示仅在Excel中在工作表上创建公式时发生,而不是在为任何其他目的选择范围时。创建它的唯一方法是需要大量的子类化或挂钩,我不推荐它。
但是,有些解决方案可以让你至少在选择范围内拥有一个选区(也就是“行军蚂蚁”)。如果你使用VBA作为前端,你可以使用我上面提到的内置RefEdit control,它确实将选框范围放在所选范围内。The C# example I gave, above允许您在C#表单中使用类似RefEdit的控件,但在进行选择时不会包含选取框 - 当正常选择范围时,它将简单地利用标准外观。
如果您愿意使用简单的输入框解决方案,而不是表单上的控件,那么C# example you gave将起作用(如果您使用Form.Show()但不是 Form.ShowDialog()),但它不会显示任何特殊的选框或其他突出显示。对于 使用选框带选择的简单输入框,您可以使用Excel.Application.InputBox方法,为'Type'传入值'8',这表示'InputBox'方法返回的值应该是'Excel.Range'数据类型:
Excel.Application excelApp = ...;
string prompt = "Please select the range.";
string title = "Input Range";
int returnDataType = 8;
String DefaultRange = oXL.Selection.Address();
Excel.Range myRange = excelApp.InputBox(
prompt,
title,
DefaultRange,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
returnDataType)
希望这会有所帮助......
麦克
答案 1 :(得分:-1)
我可能在这里有点过时了,但是你试过录制一个能做你想做的宏吗?
然后,您可以查看生成的代码并根据需要进行调整。