在我的C#應用程序中,可以通過單擊按鈕打開新的Excel進程。 然後,它等待輸入空閒並加載新的Excel文件。我必須完成它,因爲我希望在加載文檔之前加載所有的宏和工具(否則,存在渲染錯誤)。關閉文檔時加載Excel進程並關閉整個進程
進程ID保存在一個變種,當我在那個按鈕再次點擊,與PID,如果該進程已經存在,進程具有焦點,否則,將創建一個新的進程:
Process processExcel = null;
if (pId_m.HasValue)
{
try
{
processExcel = Process.GetProcessById(pId_m.Value);
}
catch (Exception ex)
{
Log.MonitoringLogger.Error("Unable to find Pid : " + pId_m,ex);
}
}
if (processExcel != null && (processExcel.HasExited == false))
{
AutomationElement element = AutomationElement.FromHandle(processExcel.MainWindowHandle);
if (element != null)
{
element.SetFocus();
}
}
else
{
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "Excel.exe";
info.Arguments = " /e ";
processExcel_l = Process.Start(info);
pId_m = processExcel_l.Id;
processExcel_l.WaitForInputIdle();
processExcel_l.StartInfo = new ProcessStartInfo(path);
processExcel_l.Start();
}
問題是:當我關閉Excel文檔窗口(而不是Excel窗口)時,我點擊了按鈕,焦點被設置爲Excel進程,但沒有任何文檔... 此行爲是邏輯,但沒有爲我想要的工作...
我見過一個軟件,加載一個新的進程和一個新的文件,但是當點擊文檔關閉按鈕,整個過程被退出... 如何重現相同的?
編輯:好吧,
最後反而將焦點設置的過程中,我發起了這個過程(這將焦點設置該文件是否已經打開)的文件。
這不是我真正想做的事,但它解決我的問題......
我知道COM,但我認爲不可能通過COM在用戶的新過程中顯示Excel窗口。 我想我只能使用Excel中的數據,而不會向用戶顯示任何Excel窗口... – metalcam