概要

您可以在 Visual C# .NET 中使用该分步指南,以便处理 Windows 窗体中的 Office XP 电子表格组件的事件。

返回页首

分步指南

开始执行下列步骤之前,您必须修改 Visual Studio .NET 为 Office XP Web 组件 (OWC) 生成的类包装。必须修改 Visual Basic .NET 的类包装才能正确处理 OWC 事件。有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
328275 HOW TO:Handle Events for the Office Web Components in Visual Studio .NET
1. 新建一个新的 Visual C# .NET Windows 应用程序项目。将该项目命名为 SheetEvents

将创建 Form1,然后在“设计”视图中打开它。
2. 视图菜单上,单击工具箱
3. 电子表格组件从工具箱中拖放到 Form1。
4. 视图菜单上,单击代码
5. 在 Form1.cs 文件中的 NAMESPACE 语句前面添加下面几行代码:
using System.Diagnostics;
            using OWC10 = Microsoft.Office.Interop.OWC;
            
6. 将以下代码添加到 EndEditBeforeContextMenuCommandExecute 事件中:
private void BeforeContextMenu(object sender,
            AxMicrosoft.Office.Interop.OWC.ISpreadsheetEventSink_BeforeContextMenuEvent e)
            {
            Debug.WriteLine("BeforeContextMenu Event: Create Custom Menu");
            // Build the menu structure:
            // Menu Item        Submenu Item
            // ==============   ============
            // - Format As...   - Blue
            //                  - Red
            // - Enter Date
            object[] oAction1 = new object[]{"&Blue","FormatAsBlue"};
            object[] oAction2 = new object[]{"&Red", "FormatAsRed"};
            object[] oAction3 = new Object[]{"&Green","FormatAsGreen"};
            object[] oSubMenu1 = new object[]{oAction1, oAction2, oAction3};
            object[] oMenu1 = new Object[]{"&Format As...", oSubMenu1};
            object[] oMenu2 = new object[]{"&Enter Date", "EnterDate"};
            object[] oMenu = new object[]{oMenu1, oMenu2};
            e.menu.Value=oMenu;
            }
            private void CommandExecute(object sender,
            AxMicrosoft.Office.Interop.OWC.ISpreadsheetEventSink_CommandExecuteEvent e)
            {
            Debug.WriteLine("CommandExecute Event: Menu action = " +
            e.command.ToString());
            OWC10.Range sel = axSpreadsheet1.Selection;
            object oColor = null;
            // Take the action selected on the context menu.
            switch(e.command.ToString())
            {
            case "FormatAsRed":
            oColor = "red";
            sel.Font.set_Color(ref oColor);
            break;
            case "FormatAsBlue":
            oColor = "blue";
            sel.Font.set_Color(ref oColor);
            break;
            case "FormatAsGreen":
            oColor = "green";
            sel.Font.set_Color(ref oColor);
            break;
            case "EnterDate":
            sel.Formula="=TODAY()";
            break;
            }
            }
            private void EndEdit(object sender,
            AxMicrosoft.Office.Interop.OWC.ISpreadsheetEventSink_EndEditEvent e)
            {
            Debug.Write("EndEdit Event: ");
            // Verify if the cell that is being edited is cell A1.
            object oOpt = System.Reflection.Missing.Value;
            string sAddr = axSpreadsheet1.ActiveCell.get_Address(
            ref oOpt, ref oOpt, OWC10.XlReferenceStyle.xlA1, ref oOpt,
            ref oOpt);
            if(sAddr!="$A$1")
            {
            Debug.WriteLine("Cell is Not A1, Allow edit");
            return;
            }
            // If it is cell A1, confirm that the value entered is a number
            // between zero and 100.
            string sMsg = "Cell A1 must contain a number between 0 and 100.";
            string sCaption = "Spreadsheet10 Event Demo";
            try
            {
            double dVal =
            System.Double.Parse(e.finalValue.Value.ToString());
            if((dVal<0)||(dVal>100))
            {
            // Value not between 0 and 100.
            Debug.WriteLine(
            "Cell is A1 but value is not between 0 & 100. Cancel.");
            System.Windows.Forms.MessageBox.Show(sMsg, sCaption);
            e.cancel.Value=true;	// Cancel the edit.
            }
            else
            {
            Debug.WriteLine(
            "Cell is A1 and value is between 0 & 100. Allow edit.");
            }
            }
            catch (System.FormatException fe)
            {
            // Cannot convert to a double.
            Debug.WriteLine(
            "Cell is A1 but the value is not a number. Cancel.");
            System.Windows.Forms.MessageBox.Show(sMsg, sCaption);
            e.cancel.Value=true;	// Cancel the edit.
            }
            }
            
7. F5 键生成并运行该示例。
8. 在单元格 A1 中输入一个值。

如果该值不是 0 到 100 之间的数字,将会出现一条消息并且编辑操作被取消。
9. 右键单击任一单元格以显示快捷菜单,然后单击菜单中的任一命令以便查看结果。
返回页首

参考

有关其他信息,请访问下面的 Microsoft Web 站点:
使用 Visual Studio 进行 Microsoft Office 开发 http://msdn.microsoft.com/library/en-us/dnoffdev/html/vsofficedev.asp
posted on 2007-02-01 11:16  Dragon-China  阅读(491)  评论(1编辑  收藏  举报