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

这篇具有很好参考价值的文章主要介绍了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++;
        }


    }
}
 文章来源地址https://www.toymoban.com/news/detail-470363.html

到了这里,关于C#调用office interop接口打开word、excel、ppt,拦截处理关闭、保存事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# 使用Microsoft.Office.Interop.Excel 对Excel操作

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 Microsoft.Office.Interop.Excel的读取,保存,内容写入和打印。 提示:以下是本篇文章正文内容,下面案例可供参考     首先于Proj

    2024年02月03日
    浏览(34)
  • Microsoft.Office.Interop.Word的COM 对象强制转换为接口类型失败

    System.InvalidCastException:“无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库

    2024年02月12日
    浏览(36)
  • 【word】无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的COM对象强制转换为接口类型

    #问题描述: 使用某软件需要弹出word窗口时出现问题 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的COM对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对IID为 “00020970-0000-0000-C000-000000000046}”的接口的COM组件调用QueryInterface因以下

    2024年02月16日
    浏览(50)
  • 无法将为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型

    报错: 无法将为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型 安装了多版本的Office 安装过WPS后没正常卸载 以下四个操作基本覆盖常见原因了,可以从2.1.1尝试,每尝试一种,就去试一下看问题解决了没有,如果已经解决了,其他操作就不用试了 2.

    2024年02月04日
    浏览(36)
  • C# WinForm 使用Microsoft.Office.Interop.Excel对Excel文件表格的单元格值进行修改操作

    在引用位置点击右键 点击管理NUGet程序包 搜索Excel,在搜索结果中点击Microsoft.Office.Interop.Excel 然后点击安装即可,搜不到的话,在右侧程序包源位置改成全部再次搜索 。 对准项目,点击右键,在弹出菜单选择添加,选择类 类名称随意,然后清空新建类得到全部内容,把下面

    2024年02月13日
    浏览(40)
  • OFFICE报错:无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型

    无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x

    2024年02月11日
    浏览(46)
  • office的文件(word、excel、ppt)图标变白

    之前用过WPS,后来卸载了,之后图标就变成白的了,但是word、Excel、PPT等都可以正常使用,说明不是打开方式的问题,然后就找问题所在。 看b站视频得知有可能是卸载wps之后,注册表里的图标路径仍然是之前的WPS图标路径,但是这个路径已经不存在了, 所以显示图标一片空

    2024年04月25日
    浏览(24)
  • 修复Microsoft Office的Word、Excel、PPT丢失图标

    使用注册表方式修复,删除Word、Excel、PPT的对应文件夹,那个丢失,就删除那个,然后修复 Windows + R 打开电脑中的运行界面,输入命令回车: regedit 目录位置:计算机HKEY_CLASSES_ROOTWord.Document.12 目录位置:计算机HKEY_CLASSES_ROOTExcel.Sheet.12 目录位置:计算机HKEY_CLASSES_ROOTPower

    2024年02月11日
    浏览(31)
  • Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)

    选住 一级标题 ,之后进行“定义新的多级列表”    正常插入题注后就可以了。如果一级标题是 “汉字序号”,那么需要对题注进行修改: 从原来的 图 { STYLEREF 1 s }-{ SEQ 图 * ARABIC s 1 } 修改为 图 { Quote “二零二五年一月{ STYLEREF 1 s }日” @”d” }-{ SEQ 图 * ARABIC s 1 } 注

    2024年02月08日
    浏览(46)
  • 新建文件没有word、ppt、excel,office图标显示为白色,不能正常显示

    解决办法: 1、按“win+R”输入“regedit”运行,打开系统注册表; 2、找到HKEY_CLASSES_ROOT下的.doc、.docx、.ppt、.pptx、.xls、.xlsx,删除。 3、找到HKEY_CLASSES_ROOT下的 Word.Document.8、Word.Document.12、PowerPoint.Show.8、PowerPoint.Show.12、Excel.Sheet.8、Excel.Sheet.12,删除。 4、找到HKEY_CURRENT_USERSo

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包