我已经构建了一个excel插件,用数据库中的数据填充工作表.我还添加了一些样式并使用FreezePanes锁定了一些行和列.
worksheet.Activate(); worksheet.Application.ActiveWindow.FreezePanes = false; worksheet.Application.ActiveWindow.SplitRow = 4; worksheet.Application.ActiveWindow.SplitColumn = 11; worksheet.Application.ActiveWindow.FreezePanes = true;
这一切都像excel 2010/2013中的魅力一样,但我最近切换到excel 2016(办公室365),从那时起,当我的excel工作表不在前台时,我遇到了FreezePanes的问题.我搜索了互联网,我遇到的唯一事情就是我只能在活动表上预制FreezePanes,我知道 – 我已经在设置FreezePanes之前激活了表单.这在excel 2010中有效,尽管物理上我的excel没有被发送到前台.
Office 365中的Excel可能真的希望我的excel工作表在物理上位于前台,但workheet.Activate()没有帮助,我也尝试了以下代码:
[DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll",SetLastError = true)] static extern System.IntPtr FindWindow(string lpClassName,string lpWindowName); string caption = oExcel.Caption; IntPtr handler = FindWindow(null,caption); SetForegroundWindow(handler);
但这也行不通.任何人都可以帮我这个吗?
需要说明的是:我的excel版本是2016版本1611(Build 7571.2109)
解决方法
Worksheet.Application.ActiveWindow可能不是包含活动工作表的窗口吗?
在以前的Excel版本中,所有工作簿都具有相同的窗口,但由于Microsoft删除了Excel的MDI,您可能会突然有两个不同的窗口使用与以前相同的代码.混合这些窗口可能会导致遇到问题.
在以前的Excel版本中,所有工作簿都具有相同的窗口,但由于Microsoft删除了Excel的MDI,您可能会突然有两个不同的窗口使用与以前相同的代码.混合这些窗口可能会导致遇到问题.
有关Excel 2013以来的一些更改,请参阅此链接:
https://msdn.microsoft.com/en-us/library/office/dn251093.aspx
您可以尝试的另一件事是在调用FreezePane之前将窗口状态设置为正常:
Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;
而另一种可能性是,这实际上是Excel中的一个错误.我确实找到了其他有同样问题的人,但不清楚这个人是否解决了这个问题或填写了错误报告: