gpt4 book ai didi

C# excel数据验证下拉列表throwserror

转载 作者:行者123 更新时间:2023-11-30 21:39:06 24 4
gpt4 key购买 nike

我正在尝试使用 C# 将下拉列表添加到范围。

这是我到目前为止所做的。

 Worksheet ws = PPTAddIn.thisAddin2Obj.Application.ActiveWorkbook.ActiveSheet;
ws.get_Range("a1").Validation.Delete();
ws.get_Range("a1").Validation.InCellDropdown = true;
ws.get_Range("a1").Validation.IgnoreBlank = true;
ws.get_Range("a1").Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertWarning, "opt1,opt2,opt3", Missing.Value);

在第 3 行代码中抛出异常
HRESULT 异常:0x800A03EC

ErrorImage

这是堆栈跟踪

   at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)    at Microsoft.Office.Interop.Excel.Validation.set_InCellDropdown(Boolean ) at MS.ProductionPlanningTool.Excel.Ribbon_PPT.ribbon_signin_Click(Object sender, RibbonControlEventArgs e) in D:\MidasCloud\CloudTFS\ProductionPlanning\MSP2\MS.ProductionPlanningTool.Excel\UI\Ribbon_PPT.cs:line 1328    at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control)    at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args)    at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args)    at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)    at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)

最佳答案

命令顺序不正确。将 Add 语句移动到紧跟在 Delete 语句之后。如果验证不存在,则不能在 Validation 对象上设置其他值。

Worksheet ws = PPTAddIn.thisAddin2Obj.Application.ActiveWorkbook.ActiveSheet;
ws.get_Range("a1").Validation.Delete();
ws.get_Range("a1").Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertWarning, "opt1,opt2,opt3", Missing.Value);
ws.get_Range("a1").Validation.InCellDropdown = true;
ws.get_Range("a1").Validation.IgnoreBlank = true;

边注:

使用 Excel 中的宏记录器获取操作的语法。虽然输出在 VBA 中,但语法并没有太大不同,您无法破译命令并将其转换为 C#。 VBA 与 VB.Net 非常接近,VB 到 C# 转换器将生成您可以清理和使用的代码。唯一的问题是宏记录器广泛使用了 Selection 对象,您应该将其转换为 Selection 对象表示的任何内容(很可能是 Excel.Range).您还需要将 VB 的索引属性更正为等效的方法调用(即:Range("a1") -> get_Range("a1"))。

编辑:我最初没有检查您的 Add 语句的语法,但您似乎缺少一个参数。

来自documentation :

void Add(
XlDVType Type,
Object AlertStyle,
Object Operator,
Object Formula1,
Object Formula2
)

和你的Add语句:

Add(XlDVType.xlValidateList, 
XlDVAlertStyle.xlValidAlertWarning,
"opt1,opt2,opt3",
Missing.Value)

您似乎缺少 Operator 参数。使用宏记录器,默认值似乎是 XlFormatConditionOperator.xlBetween

您还应该定义一个 Validation 对象并使用它代替 ws.get_Range("a1").Validation 来设置/调用每个属性/方法。

关于C# excel数据验证下拉列表throwserror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com