我正在开发Excel加载项。 我需要从A1单元格中获取值,所以我使用此代码
value = workbook.Worksheets[1].Range["A1:A1"].Value2;
这很有效,但如果:
- 上一个单元格值为" 1"
- 用户类型" 2"但不按Enter键或Tab键
- 用户按下按钮
从此代码示例获得的值2是" 1" (之前的价值)不是" 2" (当前值显示在单元格中但未经过验证)。这在我的情况下是错误的,我需要" 2"。
我该如何解决这个问题?
我尝试强制选择另一个单元格
Application.ActiveCell.Offset[1, 0].Select();
或
Application.ActiveSheet.Range["A2"].Select();
但没办法.." 2"价值丢失了。
我也尝试从工具栏中的文本区域获取值(" 2"显示在那里)但是不知道要做什么!
答案 0 :(得分:1)
当Excel处于编辑模式时(类似于在Excel的单元格中按 F2 ),功能区上的大多数按钮和VBA编辑器无法访问。
话虽如此, VBA代码可以在编辑模式下运行吗?是的,它可以如THIS链接
中所示要回答您的问题,您必须使用API来捕获密钥,然后找出该单元格的当前值。相信我,这不值得痛苦。
简单替代:
使用ExcelApp.Interactive
检查Excel的编辑模式。如果Excel处于编辑模式,则通知用户退出单元格并再试一次。快速检查了网络并找到了类似示例HERE请参阅所有Excel版本的正确解决方案,2000 - 2010
此代码位于vb.net中,但可以轻松转换为C#
Function IsEditing() As Boolean
If ExcelApp.Interactive = False Then Return False
Try
ExcelApp.Interactive = False
ExcelApp.Interactive = True
Catch
Return True
End Try
Return False
End Function
来自聊天的C#代码
bool IsEditing()
{
if (Globals.ThisAddIn.Application.Interactive == false)
return false;
try
{
Globals.ThisAddIn.Application.Interactive = false;
Globals.ThisAddIn.Application.Interactive = true;
}
catch (Exception e)
{
return true;
}
return false;
}