C#调用office interop接口打开word、excel、ppt,拦截处理关闭、保存事件 | 您所在的位置:网站首页 › ppt播放状态下打开word › 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++; } } } |
CopyRight 2018-2019 实验室设备网 版权所有 |