您现在的位置是:首页 >技术交流 >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++;
}
}
}