打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel中,如何在cell处于编辑状态时,对其用代码赋值

 

当我们用Winform程序去自动化Excel的时候,常常要实现这样的功能,给一个cell赋值,貌似很简单,得到range以后,设置它的Value2属性就可以了。但是还是会存在一个小问题,当你要赋值的cell正处于编辑状态的时候,针对该cell的所有代码将被忽略,赋值失败。(如当A1格处于编辑状态时,用代码对A1赋值将没有任何效果)

所以如何判断Excel是否处于编辑状态,成为解决这个问题的关键。很多人都曾试图找一个事件能在Excel进入编辑状态的时候触发,让程序能够得到通知。但是Excel至少可以通过四种方法进入编辑状态:

·         双击一个cell

·         F2

·         选中一个cell,直接输入

·         选中一个cell,单击激活公式栏的输入框

Excel只提供了一个Worksheet. BeforeDoubleClick能够帮助我们检测到第一个事件,对于另外三个,我们无能为力。怎么办?

           当时困惑了很久,但是后来突然发现,当Excel处于编辑状态的时候,工具栏上很多很多的按钮都会被禁用。这下问题就简单了,选取一个按钮,获取它的句柄,在我们给cell赋值之前,测试这个按钮的Enabled状态,如果为false,表明Excel正处于编辑状态,调用APIExcel窗口激活,再给程序发送一个ESC键以退出编辑状态,然后实行赋值。整个代码如下:(我选择了Format Painter按钮来测试它的Enable状态。关于如何获得一个按钮的句柄,本blog上有文章详细解释,见 :“无敌的CommandBar和它的Control)

        private Excel.Application app = null;

        private object missing = Type.Missing;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            app = Marshal.GetActiveObject("Excel.Application") as Excel.Application;

        }

 

        [DllImport("User32.Dll")]

        public static extern void SetForegroundWindow(int h);

 

        private void button1_Click(object sender, EventArgs e)

        {

            try

            {               

                if (!app.CommandBars["Standard"].Controls["&Format Painter"].Enabled)

                {

                    SetForegroundWindow(app.Hwnd);

                    app.SendKeys("{ESC}", missing);

                }

                app.get_Range("A1", missing).Value2 = "Test";

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

测试以上Demo:关闭电脑中所有Excel的实例,新打开一个Excel,运行本程序。切换回Excel,使A1格处于编辑状态。切换到本程序,点击button1,会看到Excel的窗口被激活,并且A1的值变为“Test”。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
完全手册Excel VBA典型实例大全:通过368个例子掌握
Excel vba双击单元格代码
一款在Excel中进行Python编程的插件
一键合体,将多个Excel文件合并为一个文件
所有代码的粘贴法(献给初学者)
Excel让选定单元格所在行和列颜色突出高亮显示
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服