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

原创 2007年10月09日 16:34:00

 

 

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”。

 

UITableView实现选择框和编辑状态时cell向右移动的自定义方法

转自:http://www.2cto.com/kf/201607/532203.html 一.首先我们先做一个tableview的demo看一下初始的效果 ? ...

UITableView实现选择框和编辑状态时cell向右移动的自定义方法

一.首先我们先做一个tableview的demo看一下初始的效果// // TableViewController.m // UITableView实现选择框和编辑状态时cell向右移动UITab...

DataGridView在Cell编辑状态响应回车键下的KeyPress/KeyDown/KeyUp事件

我们知道由于DataGridView的单元格DataGridCell处于编辑的时候,当你按Enter键,那么DataGridView是不会激发KewPress/KeyDown/KeyUp这些事件的,因...

unity3d编辑器界面扩展,编辑状态下显示选择对象的所有脚本组件代码内容

using UnityEngine; using UnityEditor; using System; using System.Collections; using System.Collectio...

详讲:C#快速导出多个sheet到excel的两种方法(Cell和Range方法), 解决了(导入时外部表不是预期的格式)

C# 导出的表加载时报错:外部表不是预期的格式。的解决方案 在网卡找了一些Excel导出的方法,大部分能导出,但时不能将导出的Excel导入。总是报:外部表不是预期的格式 找了好久终于找到了解决方...
  • lybwwp
  • lybwwp
  • 2012年12月03日 22:58
  • 4420

Java的poi技术遍历Excel时进行空Cell,空row,判断

/** * 导入信息 */ @Override public List add(HttpServletRequest request) { // TODO Auto-generated metho...

使用xib的UITableViewCell在编辑状态下时,排版发生变化及解决

xib如下,需求,灰色框及里面的数字随前面文木王
  • zttjhm
  • zttjhm
  • 2014年07月21日 08:35
  • 2607

JTable 失去焦点时取消编辑状态

转载地址: http://www.cnblogs.com/aquar/p/3263761.html 当JTable的单元格处于编辑状态时,如果用户触发以下事件,表格就会退出编辑状态,进而调用Ta...

easyui datagrid 编辑状态时,为列添加文本改变事件

最近用到jQuery EasyUI 的时候在datagrid编辑状态的时候,输入值统计合计的时候没有文本改变事件. 所以特地加上了文本改变事件用于统计合计...easyui的版本是1.4.3 第一...
  • xnlzg
  • xnlzg
  • 2015年11月14日 23:11
  • 3190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Excel中,如何在cell处于编辑状态时,对其用代码赋值
举报原因:
原因补充:

(最多只允许输入30个字)