从excel粘贴到WinForms的电子表格工具删除了对目标单元格的验证
本文关键字:删除 目标 验证 单元格 工具 电子表格 excel WinForms | 更新日期: 2023-09-27 18:03:04
我在电子表格齿轮上的一个单元格上只有数字验证,它在输入数字以外的任何东西时都出错,但我面临的问题是,用户只需在excel中键入他喜欢的任何东西,并将单元格本身粘贴到电子表格齿轮表上,导致它失去验证。
现在,我浏览了其他线程,发现你可以禁用单元格上的所有"编辑"操作,但我想让用户能够从excel中粘贴单元格。
那么,我的问题是是否有一个事件在粘贴单元格时被击中?我可以使用该事件来验证数据并生成自定义消息。我不关心excel的错误信息,因为我计划处理onError事件,并为其他情况生成相同的自定义错误信息。
完成任务的任何其他方法也会有所帮助。
调用粘贴操作时不会触发事件。至少,没有一个对你的场景有任何用处。但是,粘贴会生成一个CommandRange。粘贴命令。因此,您可以将自己的自定义CommandManager附加到WorkbookView的工作簿集,并覆盖粘贴命令的默认行为,以执行您的任何特殊要求。
例如,您可以有效地强制使用Edit ->选择性粘贴……→每当调用Paste command时,Values命令,这样格式就不会被更改,这可能会删除单元格验证。您可以通过PasteType enum查看其他粘贴选项。例子:
using SpreadsheetGear;
using SpreadsheetGear.Commands;
public class MyCommandManager : CommandManager
{
internal MyCommandManager(IWorkbookSet workbookSet)
: base(workbookSet)
{ }
...
// Gets called anytime a Paste command is invoked (i.e., Ctrl+V, context
// menu item, WorkbookView.Paste(), etc)
public override Command CreateCommandPaste(IRange range)
{
// Anytime a CommandRange.Paste command is invoked, we'll instead invoke a
// CommandRange.PasteSpecial with "Paste Values" (PasteType.Values) so that
// values are pasted but not cell formatting, which could remove cell
// validation.
return new CommandRange.PasteSpecial(range, PasteType.Values,
PasteOperation.None, false, false);
}
...
}
当你创建MyCommandManager的实例时,它将自动成为指定IWorkbookSet的CommandManager,即:
new MyCommandManager(workbookView.ActiveWorkbookSet);
显然,这种方法意味着你想从Excel中调出的任何格式都会丢失。
找到另一个解决方案。也许可以帮助别人。
void wbViewWorkflowData_KeyDown(object sender, KeyEventArgs e)
{
WorkbookView wbView = (WorkbookView)sender;
if (e.Control && e.KeyCode == Keys.V)
{
wbView.GetLock();
try
{
e.SuppressKeyPress = true;
wbView.PasteSpecial(PasteType.Values, PasteOperation.None, false, false);
//Additional stuff here.
}
catch (Exception ex)
{
}
finally
{
wbView.ReleaseLock();
}
}
}