2013-11-21 143 views
0

Excel窗口保持最小化。我该如何将它带到浏览器的前端。无法激活Excel窗口

using Microsoft.Office.Interop; 
using Excel = Microsoft.Office.Interop.Excel; 

protected void btnOpen_Click(object sender, EventArgs e) 
{ 
    OpenExcel(); 
} 

private void OpenExcel() 
{ 
    Excel.Application app = new Excel.Application(); 
    Excel.Workbook wb = null; 
    Excel.Worksheet ws = null; 
    Excel.Range range = null; 

    app.visible = true; 
    wb = app.Workbooks.Add(1); 
    ws = (Excel.Worksheet)wb.WorkSheets[1]; 
    range = ws.get_Range("A1","D1"); 

    ws.Cells[1,1]="Date"; 
    ws.Cells[1,2]="Code"; 
    ws.Cells[1,3]="Name"; 
    app.WindowState = Excel.XlWindowState.xlNormal;  
    app.ActiveWindow.Activate(); 
} 
+1

将无法使用与您当前在桌面上打开的实例相同的实例。即使你在同一台计算机上运行它们,它们也可以使用不同的Excel实例。 –

+1

从ASP.NET或其他服务器技术使用Office Interop是一个可怕的想法。这些API被编写用于桌面应用程序,用于自动化Office(一套桌面应用程序)。服务器应用程序在许多方面有所不同,因此在其中使用Office Interop是非常非常糟糕的主意。它也不受Microsoft的支持,并可能违反您的Office许可证。请参阅[服务器端自动化办公室的注意事项](http://support.microsoft.com/kb/257757) –

回答

3

为了保证这一点,在我的经验,我必须做到以下几点:如果你这样做在ASP.Net那么

if (app.WindowState == XlWindowState.xlMinimized) 
{ 
    app.WindowState = XlWindowState.xlNormal; 
} 
app.WindowState = XlWindowState.xlMaximized; 
app.ShowWindowsInTaskbar = true; 
app.Visible = true; 

IntPtr hwnd = new IntPtr(app.Hwnd); 
Win32Helper.SetForegroundWindow(hwnd); 

SetForegroundWindow是互操作

[DllImport("user32.dll")] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 
+0

-1:这将与asp.net一起工作吗? –

+0

我不会推荐在ASP.NET中进行COM互操作。 – billb

+0

但这就是你刚才回答的问题。 –