您现在的位置是:首页 >技术交流 >C#调用office interop接口打开word、excel、ppt,拦截处理关闭、保存事件网站首页技术交流

C#调用office interop接口打开word、excel、ppt,拦截处理关闭、保存事件

daqinzl 2024-07-10 06:01:02
简介C#调用office interop接口打开word、excel、ppt,拦截处理关闭、保存事件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WordLib = Microsoft.Office.Interop.Word;
using ExcelLib = Microsoft.Office.Interop.Excel;
using PptLib = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;

namespace openOfficeFile
{
    public partial class Form1 : Form
    {
        private WordLib.Application myWordApp = null;
        private ExcelLib.Application myExcelApp = null;
        private PptLib.Application myPptApp = null;

        public Form1()
        {
            InitializeComponent();
        }


        private void openWord_Click(object sender, EventArgs e)
        {
            object missing = System.Type.Missing;
            object readOnly = false;
            object confirm = false;

            if (myWordApp == null)
                myWordApp = new WordLib.Application();

            //设置word应用的用户名
            //myWordApp.UserName = parentMainWind.currentMeet.MeetingUser;
            String fileNameAllPath = "D:/test.docx";
            try
            {
                //打开word文档
                //以读写模式打开
                WordLib.Document wordDoc =
                myWordApp.Documents.Open(fileNameAllPath, ref confirm, ref readOnly, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing);
                //设置修订模式
                //wordDoc.TrackRevisions = true;
                //显示修订模式
                //wordDoc.ShowRevisions = true;

                //WordLib.WdWindowState wsw = myWordApp.ActiveWindow.WindowState;
                //将WORD应用窗口最大化,即设置为最当前
                myWordApp.ActiveWindow.WindowState = WordLib.WdWindowState.wdWindowStateMaximize;

                //关联:文件关闭事件
                myWordApp.DocumentBeforeClose += new WordLib.ApplicationEvents4_DocumentBeforeCloseEventHandler(wordApp_DocumentBeforeClose);
                //关联:文件保存事件
                myWordApp.DocumentBeforeSave += new WordLib.ApplicationEvents4_DocumentBeforeSaveEventHandler(wordApp_DocumentBeforeSave);
                //打开word.exe并显示
                myWordApp.Visible = true;
                myWordApp.Activate();
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }

        void wordApp_DocumentBeforeClose(WordLib.Document Doc, ref bool Cancel)
        {
            try
            {

                //关闭文档
                Doc.Close();

                //检查,是否需退出word应用
                int aa = myWordApp.Documents.Count;
                if (myWordApp.Documents.Count == 0)
                {
                    myWordApp.Application.Quit();
                    myWordApp = null;
                }
            }
            catch (Exception ex)
            {
                //string str1 = string.Format("关闭文档{0}错误,错误信息{1}",Doc.Name, ex.Message);
                //MessageBox.Show(str);
            }
        }

        void wordApp_DocumentBeforeSave(WordLib.Document Doc, ref bool SaveAsUI, ref bool Cancel)
        {
            //文件没有修改过,直接返回
            if (Doc.Saved) return;

            Doc.Save();

        }


        private void openExcel_Click(object sender, EventArgs e)
        {

            try
            {
                string filename = "D:/test.xlsx";
                object missing = System.Reflection.Missing.Value;  //TODO
                
                myExcelApp = new ExcelLib.Application();//引用Excel对象
                myExcelApp.Workbooks.Open(filename, missing, false,
                    missing, missing, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing);
                //myExcelApp.Workbooks.Add(filename); //不要加上这句

                myExcelApp.WorkbookBeforeClose += new ExcelLib.AppEvents_WorkbookBeforeCloseEventHandler(excelApp_DocumentBeforeClose);
                myExcelApp.WorkbookBeforeSave += new ExcelLib.AppEvents_WorkbookBeforeSaveEventHandler(excelApp_DocumentBeforeSave);
                

                myExcelApp.Visible = true;//设置Excel为可见  
                
            }
            catch (Exception ex)
            {
                //ex.StackTrace
            }

        }

        private void excelApp_DocumentBeforeClose(Workbook Wb, ref bool Cancel)
        {
            int xxx = 0;
            xxx++;
        }

        private void excelApp_DocumentBeforeSave(Workbook Wb, bool SaveAsUI, ref bool Cancel)
        {
            Wb.Save();
            int xxx = 0;
            xxx++;

        }

        private void openPpt_Click(object sender, EventArgs e)
        {
            String filePath = "D:/test.pptx";
            myPptApp = new PptLib.Application();
            //以非只读方式打开,方便操作结束后保存.
            Presentation PPTPresentation = myPptApp.Presentations.Open(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue);
            SlideShowSettings slideShow = PPTPresentation.SlideShowSettings;//.SlideShowSettings;

            myPptApp.PresentationClose += new PptLib.EApplication_PresentationCloseEventHandler(pptApp_DocumentBeforeClose);
            myPptApp.PresentationBeforeSave += new PptLib.EApplication_PresentationBeforeSaveEventHandler(pptApp_DocumentBeforeSave);

            slideShow.Run();
            //PPTPresentation.SlideShowWindow.View.GotoSlide(1);
        }

        void pptApp_DocumentBeforeClose(Presentation Pres)
        {
            int xxx = 0;
            xxx++;
        }

        void pptApp_DocumentBeforeSave(Presentation Pres, ref bool Cancel)
        {            
            Pres.Save();
            int xxx = 0;
            xxx++;
        }


    }
}
 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。