c# – “无法设置Window类的FreezePanes属性”Excel 2016(office 365)

前端之家收集整理的这篇文章主要介绍了c# – “无法设置Window类的FreezePanes属性”Excel 2016(office 365)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经构建了一个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 2013以来的一些更改,请参阅此链接
https://msdn.microsoft.com/en-us/library/office/dn251093.aspx

您可以尝试的另一件事是在调用FreezePane之前将窗口状态设置为正常:

Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;

而另一种可能性是,这实际上是Excel中的一个错误.我确实找到了其他有同样问题的人,但不清楚这个人是否解决了这个问题或填写了错误报告:

https://social.msdn.microsoft.com/Forums/office/en-US/7e6ff1ed-b4c6-4c75-82be-14175f44df55/freezepanes-throws-an-exception-when-excel-is-minimized?forum=exceldev

您可以向Microsoft提交错误报告,并等待他们是否可以将此确认为错误.

猜你在找的C#相关文章