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++;
        }


    }
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目使用VS2017打开,.net 2.0下运行。 项目使用的微软官方的插件方法,可以将doc, docx, xls, xlsx, ppt, pptx文件转换为pdf文件,但是需要: 1、用户需要首先安装一个SaveAsPDFandXPS.exe的工具; 2、如果用户是xp系统,则: 2.1 如果用户安装的是office 2007,则用户在安装office 2007的时候必须要安装Visual Basic for Application 和 Microsoft Office Document Imaging这2个选项,否则转换失败; 2.2 如果用户安装的是office 2010,则在安装office 2010时必须要安装Visual Basic for Application选项,然后从office 2007安装包里面安装Microsoft Office Document Imaging(因为2010删除了这个选项,好麻烦~),否则转换失败; 2.3 xp不能安装office 2013/2016; 3、如果用户是win7系统,则: 3.1 如果用户安装的是office 2007,则用户在安装office 2007的时候必须要安装Visual Basic for Application 和 Microsoft Office Document Imaging这2个选项,否则转换失败; 3.2 如果用户安装的是office 2010,则在安装office 2010时必须要安装Visual Basic for Application选项(win7 + office 2010不需要安装Microsoft Office Document Imaging) 3.3 如果用户安装的是office 2013或2016,则不需要额外选项; 4、如果用户是win10系统,则: 4.1 如果用户安装的是office 2007,则用户在安装office 2007的时候必须要安装Visual Basic for Application这个选项,(win10 + office 2007不需要安装Microsoft Office Document Imaging)否则转换失败; 4.2 如果用户安装的是office 2010,则在安装office 2010时必须要安装Visual Basic for Application选项(win10 + office 2010不需要安装Microsoft Office Document Imaging) 4.3 如果用户安装的是office 2013或2016,则不需要额外选项; 5、如果用户安装了wps 2016或者wps 2019也可以正常转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值