Den*_*der 7 c# excel office365 excel-2016
我已经构建了一个excel插件,用数据库中的数据填充工作表.我还添加了一些样式并使用FreezePanes锁定一些行和列.
worksheet.Activate();
worksheet.Application.ActiveWindow.FreezePanes = false;
worksheet.Application.ActiveWindow.SplitRow = 4;
worksheet.Application.ActiveWindow.SplitColumn = 11;
worksheet.Application.ActiveWindow.FreezePanes = true;
Run Code Online (Sandbox Code Playgroud)
这一切都像excel 2010/2013中的魅力一样,但我最近切换到excel 2016(办公室365),从那时起,当我的excel工作表不在前台时,我遇到了FreezePanes的问题.我搜索了互联网,我遇到的唯一事情就是我只能在活动表上预制FreezePanes,我知道 - 我已经在设置FreezePanes之前激活了表单.这在excel 2010中有效,尽管物理上我的excel没有被发送到前台.
来自办公室365的Excel可能真的希望我的excel工作表在物理上处于前台但worksheet.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);
Run Code Online (Sandbox Code Playgroud)
但这也行不通.任何人都可以帮我这个吗?
需要说明的是:我的excel版本是2016版本1611(Build 7571.2109)
是否有可能worksheet.Application.ActiveWindow不是包含活动工作表的窗口?在以前的 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;
Run Code Online (Sandbox Code Playgroud)
还有一种可能性是这实际上是 Excel 中的一个错误。我确实找到了有同样问题的其他人,但不清楚这个人是解决了问题还是填写了错误报告:
您可以向 Microsoft 提交错误报告,然后等待他们是否将其确认为错误。
是的!我像 Xatoo 建议的那样修复了这个问题,添加了:
Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;
Run Code Online (Sandbox Code Playgroud)
重要的是要补充一点,此解决方案仅在窗口实际最小化时才有效,因此您需要检查这一点。
有趣的细节是,这仍然不会将窗口发送到前台。
| 归档时间: |
|
| 查看次数: |
4990 次 |
| 最近记录: |