最近在用VSTO開發(fā)WORD插件,了解過(guò)程中發(fā)現(xiàn)如果Word插件設(shè)置為啟動(dòng)時(shí)加載,那么它的說(shuō)法就是啟動(dòng)一個(gè)Word進(jìn)程的時(shí)候加載,
?1.如果只是打開一個(gè)WORD文件的話那么并不會(huì)新建一個(gè)WINWORD進(jìn)程,從而導(dǎo)致我的插件沒(méi)法加載
?2.如果使用 MSWord.Application app = new MSWord.Application();對(duì)象去打開WORD話,在插件獲取過(guò)程中有一定問(wèn)題,問(wèn)題就是我會(huì)用到插件Globals.ThisAddIn.Application.ActiveDocument獲取文檔,它會(huì)提示我文件還沒(méi)有打開,在折騰至于我在網(wǎng)上看見了別人寫的一篇文章代碼如下:
?
? /// <summary>
/// 打開Word
/// </summary>
/// <param name="WordPath"></param>
public static void OpenWord(string WordPath)
{
//string tempPath = System.Environment.GetEnvironmentVariable("TEMP");
//var filepath = Path.Combine(tempPath, WordPath);
string winwordPath = "";
Process[] wordProcesses = Process.GetProcessesByName("WINWORD");
foreach (Process process in wordProcesses)
{
// Debug.WriteLine(process.MainWindowTitle);
// 如果有的話獲得 Winword.exe 的完全限定名稱。
winwordPath = process.MainModule.FileName;
break;
}
? Process wordProcess = new Process();
if (winwordPath.Length > 0) // 如果有 Word 實(shí)例在運(yùn)行,使用 /w 參數(shù)來(lái)強(qiáng)制啟動(dòng)新實(shí)例,并將文件名作為參數(shù)傳遞。
{
wordProcess.StartInfo.FileName = winwordPath;
wordProcess.StartInfo.UseShellExecute = false;
wordProcess.StartInfo.Arguments = WordPath + " /w";
wordProcess.StartInfo.RedirectStandardOutput = true;
}
else
{ // 如果沒(méi)有 Word 實(shí)例在運(yùn)行,還是
wordProcess.StartInfo.FileName = WordPath;
wordProcess.StartInfo.UseShellExecute = true;
}
wordProcess.Start();
// 當(dāng)前進(jìn)程一直在等待,直到該 Word 實(shí)例退出。
wordProcess.WaitForExit();
wordProcess.Close();
}
?
?但是值得注意的是:WordPath的路徑不是隨便都可以的,必須使用System.Environment.GetEnvironmentVariable("TEMP");的一個(gè)路徑。實(shí)際值如下:C:\Users\ADMINI~1\AppData\Local\Temp\。如果是自己創(chuàng)建的文件夾路徑會(huì)打不開。就這個(gè)要命的問(wèn)題折騰了我2小時(shí),所以寫下此篇文章
?
?
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。