www.9778.com 5

Spring Framework 5.2.1 发布

Bug 修复

  • 在 registrar
    中重新排序日期格式转换器 #23893
  • 使用合格的注入点重新访问 @Configuration(proxyBeanMethods =
    false) #23887
  • 修复 AbstractNamedValueMethodArgumentResolver 中的
    NPE #23882
  • WebClient onStatus
    顺序已更改 #23880
  • 删除 XpathRequestMatchers
    中未使用的类型参数声明 #23860
  • ……

更多内容见更新说明。

(文/开源中国)    

使用说明

多数情况下,本插件将自动对处理编码相关的事项。

您也可以通过 File > Set File Encoding to
菜单对文件编码进行手工转换。例如,您可以打开一个 UTF-8
编码的文件,指定保存为 GBK,反之亦然。

注意:

  • 如果 convert_on_save 被设置为 false,文件不会被保存成指定编码
  • 在文件编码检测过程完成前请勿编辑文件
  • 若检测结果不准确,请尝试增大 max_detect_lines 的值或手工指定编码
  • 由于 API 限制,在 lazy_reload 设置为 true 时,保存文件后立即退出
    Sublime Text 将造成文件被保存为 UTF-8,正确的内容将在下次 Sublime
    Text 打开时重载

选择和激活一系列单元格
Goto是一种使Excel能够选择一系列单元格并激活与该单元格范围相关联的工作簿的方法。
它需要一个可选的对象参数,可以是包含单元格引用的字符串(“Sheet1!R1C1”格式)或Range对象。
在本章后面的“使用范围对象”一节中,我们将详细介绍单元格参考格式,如“Sheet1!R1C1”。
它还需要一个可选的对象参数,可以将其设置为TRue,以告诉Excel滚动窗口,以便选择位于窗口的左上角。
清单5-5显示了一些调用Goto方法的例子。

在Outlook中阅读邮件时,改进了使用讲述人阅读窗口标题的功能。

Spring Framework 5.2.1 发布了,更新内容如下:

常见问题

  • 问:安装后无法工作,要如何修复?

    答:请尝试以下步骤:

    1. 重启 Sublime Text
    2. 请确认插件目录名为 ConvertToUTF8(如果是通过 Package Control
      安装的可略过此步骤)
    3. 参见上述“注意”条目
    4. 禁用其他编码相关的插件
    5. 联系我
  • 问:这个插件支持哪些编码?

    答:所有 Python
    支持的编码
    都可以,其他编码如 EUC-TW 将不被支持。

  • 问:为何有时重新激活窗口,里面的内容会变乱码?

    答:此问题是由重新载入引起的,且已修复,请更新 ConvertToUTF8
    插件到最新版本。

  • 问:为什么重新激活窗口时,ST2 问我文件“已经被修改。是否要重新载入?”

    答:原因与上一条相同。如果您有未保存的修改,请选择“取消”。

  • 问:在保存文件时,Sublime Text 为什么提示将文件保存为 UTF-8?

    答:没有关系,本插件会自动将文件内容保存为原始编码。

  • 问:我的文件被保存为UTF-8,而且变成了乱码,要如何恢复?

    答:请打开这个文件,并确认它的编码是UTF-8,然后选择菜单项目
    File > Save with Encoding > Western (Windows
    1252),关闭再重新打开该文件即可。

         
C#支持try,catch和finally块来处理异常。您应该将代码设置为ScreenUpdating返回到您的finally块中的原始值,因为该代码将在异常发生时或者没有异常发生时运行。

某些2D应用程序(如反馈中心,Microsoft Store,3D
Viewer)被错误地视为在Windows混合现实中具有受保护的内容。在视频捕获期间,这些2D应用会阻止其内容被录制。

新特性

  • 支持 WebFlux
    编解码器中对输入流处理的限制 #23884
  • 竞争条件会影响 AbstractJaxb2HttpMessageConverter 中的性能
    – JAXBContext
    creation #23879
  • 添加 RSocketRequester resolveAndAwaitOrNull
    扩展 #23874
  • 在注释中支持单向 @AliasFor
    属性映射 #23834
  • 允许在 BeanDefinitionBuilder
    上设置主标志 #23794
  • 引入 requestResultMatchers 中的
    sessionAttributeDoesNotExist #23756
  • EventPublishingTestExecutionListener 不包含在 JUnit 4 和 TestNG
    基类中 #23748
  • 优化 DataSourceUtils.resetConnectionAfterTransaction(…) 中的 
    Connection.setReadOnly(false) #23747
  • ResponseStatusException
    的处理也包括响应头的设置 #23741
  • 修复 OkHttp3ClientHttpRequestFactory
    关闭流程 #23628

设置

请查看 ConvertToUTF8.sublime-settings
文件获取详细信息。为防止更新插件时被覆盖,请将个人设置保存到 User
目录中名为 ConvertToUTF8.sublime-settings 文件中。您可以在
.sublime-project 文件(可通过 Project > Edit Project
打开)中指定项目专属设置(除 encoding_list 和 max_cache_size 外)。

  • encoding_list:检测失败时显示的编码列表
  • max_cache_size:最大编码缓存数量,0 表示不缓存(默认为 100)
  • max_detect_lines:最大检测行数,0 表示不限制(默认为 600)
  • preview_action:预览文件时是否将其内容转换为 UTF-8(默认为 false)
  • default_encoding_on_create:指定新建文件的默认编码(如
    GBK),空值表示使用 Sublime Text 的 default_encoding 设置(默认为
    “”)
  • convert_on_load:文件装载时是否将其内容转换成 UTF-8(默认为 true)
  • convert_on_save:文件保存时是否将其内容转换成原有(或指定)编码(默认为
    true)
  • convert_on_find:将 Find Results 窗口里的内容转换成 UTF-8(默认为
    false)
  • lazy_reload:将文件保存到临时位置,并在切换窗口或标签时在后台自动重载(默认为
    false)
  • confidence:最低可信率,检测时超过这个值将触发自动转换(默认为0.95)
private void Sheet1_Startup(object sender, System.EventArgs e)
{
  Excel.WorksheetFunction func = this.Application.WorksheetFunction;
  double result = func.Acos(.1);
  double result2 = func.Atan2(.1, .2);
  double result3 = func.Atanh(.1);
}

修复了即在使用讲述人编辑内容时,某些网页上的编辑字段未在配置的盲文显示器上正确更新的问题。

注意

** Windows 7(Sublime Text
3):当设置Windows自定义文本大小(DPI)超过100%时,文件名可能无法正确显示,请尝试在Sublime
Text 3的用户设置中添加"dpi_scale": 1

** Linux(Sublime Text 2 & 3)及OSX(Sublime Text
3):你需要安装一个额外插件以便ConvertToUTF8能正常工作:Codecs26(针对
Sublime Text 2)或
Codecs33(针对
Sublime Text 3)。

 

修复了可能导致上一个版本上登录屏幕acrylic有时会意外地显示UI元素周围的方块的问题。

安装

推荐使用 Package
Control
查找 ConvertToUTF8 进行自动下载安装与更新。

如需手工安装,请将本项目打包下载并解压,将解压后的文件夹名修改为
ConvertToUTF8 ,然后将此文件夹移动到 Sublime Text 的 Packages
文件夹下(可通过 Sublime Text 菜单中的 Preferences > Browse Packages
找到 Packages 文件夹)。

您的文件夹应该看起来是这样的:

www.9778.com 1

Folder Hierarchy

应用程序对象的操作
本章将介绍从Application对象开始的Excel对象模型中的一些主要对象。
Excel对象模型中的主要对象有许多方法和属性,完全描述这些对象超出了本书的范围。相反,本章重点介绍最常用的方法和属性。

  • 因为Cortana是受服务支持的,微软将继续在未来几个月内添加新语言。

联系我

请发送您的问题或建议给我:sunlxy (at)
yahoo.com 或
http://weibo.com/seanliang

编辑单元格后按Enter键,Excel通常会移动到正在编辑的单元格下面的单元格中。您可以在“选项”对话框的“编辑”选项卡中控制此行为。
MoveAfterReturn属性和MoveAfterReturnDirection属性使您能够在代码中控制此行为。通过将MoveAfterReturn设置为true,您可以在用户按Enter键后通知Excel更改所选单元格。如果MoveAfterReturn设置为TRue,则MoveAfterReturnDirection控制用户按Enter后Excel移动到的单元格。
MoveAfterReturnDirection可以设置为XlDirection枚举的成员:xlDown,xlToLeft,xlToRight或xlUp。

进行了一些调整,以帮助你在搜索时改善“设置”中“应用和功能”页面的效果。

Sublime Plugin : Convert​To​UTF8

标签(空格分隔): SublimePlugin


作为示例,另一个加载项可能运行自己的长操作,该加载项可能将ScreenUpdating属性设置为false以加速该操作。该加载项执行一个触发代码处理的事件的操作。如果您的代码将ScreenUpdating属性设置为false,执行某些操作,然后将其设置为TRue完成后,现在已经打败了加载项加速自己的长时间操作的尝试,因为您现在已经重新启用屏幕更新。如果您将存储ScreenUpdating的值设置为false,然后将ScreenUpdating设置为原始值,则与Excel中运行的其他代码更好地共存。

IT之家9月12日消息今天凌晨微软推送了最新的Windows 10
20H1快速预览版18980系统更新,本次更新带来了新的Cortana
App,面向所有受语言支持的用户推出。另外改进了Windows
Linux子系统,针对ARM64设备添加了WSL2支持。

说明

通过本插件,您可以编辑并保存目前编码不被 Sublime Text
支持的文件,特别是中日韩用户使用的 GB2312,GBK,BIG5,EUC-KR,EUC-JP
等。ConvertToUTF8 同时支持 Sublime Text 2 和 3。

返回重要收藏的属性
Application对象是对象模型的根对象,并具有返回几个重要集合的属性。
Workbooks属性返回Excel中打开的工作簿的集合。
Windows属性返回一个表示Excel中打开的窗口的集合。本章后面将更详细地讨论工作簿和Windows集合。

修复了影响WIN +可靠性的问题。

确保在更改之前获取光标的原始值,并使用try,catch和finally块将其设置回原始值。清单5-2显示了使用Cursor属性。

有些Realtek SD卡读卡器无法正常工作。微软正在调查这个问题。

 www.9778.com 2

安装特定可选功能时,重置此PC云下载选项当前不工作。该过程会开始,但会发生错误并回滚更改。要解决此问题,请在尝试云下载选项之前删除可选功能。一旦此问题得到解决,我们会通知你。可选功能包括:用于Windows
10的EMS和SAC工具集,IrDA红外,打印管理控制台,RAS连接管理器管理工具包,RIP侦听器,所有RSAT工具,简单网络管理协议,Windows传真和扫描,Windows存储管理,无线显示和WI
SNMP提供程序。

清单5-6  使用CheckSpelling方法的VSTO定制

在Windows混合现实中通过反馈中心提交错误时捕获重新监视视频时,由于上面提到的受保护内容问题,你将无法选择停止视频。如果你想提交一个重复视频,需要等待5分钟才能使录制超时。如果想在没有重新制作视频的情况下提交错误,则可以关闭“反馈中心”窗口以结束录制,并在“反馈”>“草稿”中重新打开应用程序时继续归档错误。

www.9778.com,控制文件和打印机设置
您可以通过SheetsInNewWorkbook属性创建新的空白工作簿时配置该行为。此属性对于应在新工作簿中创建的空白工作表数量使用一个int值。默认是三个空白工作表。与大多数这些设置一样,您还可以在Excel的“选项”对话框的“常规”页面中进行设置。

PC的一般更改,改进和修复

www.9778.com 3

有些内部测试人员可能会在Windows 10 Builds
18967+上遇到netprofmsvc.dll死锁问题。这可能导致升级到98%的构建进度时冻结,或者如果你已经在构建中,你可能会发现系统的各个方面意外冻结并变得无响应。微软正在修复处理。

控制Excel的屏幕更新行为
当您的代码对工作簿执行一组更改时,您可能需要将ScreenUpdating属性设置为false,以防止Excel在代码运行时更新屏幕。将其设置回TRue将刷新屏幕,并允许Excel继续更新屏幕。

使用“从此处读取”按钮或Ctrl + Alt
+鼠标左键单击键盘快捷键时,放大镜读数不再单击应用程序。

 

关于Cortana的更新

Application对象在Excel对象模型中具有最大数量的方法,属性和任何对象的事件。
Application对象也是Excel对象模型层次结构中的根对象。您可以通过从Application对象开始访问对象模型中的所有其他对象,并访问其属性及其返回的对象的属性。
Application对象还具有许多有用的应用程序级设置。

使用讲述人改进了Outlook中的自动阅读功能,使其更加可靠。

在您的代码中使用内置的Excel函数
WorksheetFunction属性返回一个WorksheetFunction对象,使您能够从代码调用内置的Excel公式。它提供访问超过180个公式。清单5-4说明了其中的三个。

放大镜阅读现在可以在Google Chrome和Firefox等应用中更好地运行。

清单5-5  使用Goto方法的VSTO定制

为了让你可以根据需要选择节省磁盘空间,微软已将MS
Paint和WordPad转换为可选功能。你可以选择卸载它们或通过“设置”中的“可选功能”重新安装它们。

此属性尝试修复的问题是您的代码调用方法的问题,从而引发代码上的事件。您可能不希望引发该事件,因为您调用该方法,因此您不希望将代码通知其已知的内容。

下面是更新内容:

private void Sheet1_Startup(object sender, System.EventArgs e)
{
  object oldValue = this.Application.StatusBar;

  try
  {
    Random r = new Random();

    for (int i = 1; i < 2000; i++)
    {
      string address = String.Format("A{0}", i);
      Excel.Range range = this.Range[address, missing];
      range.Value2 = r.Next();

      string status = String.Format("Updating {0) of 2000...", i);
      this.Application.StatusBar = status;
    }
  }
  finally
  {
    this.Application.StatusBar = oldValue;
  }
}

解决了文本光标指示器有时会出现在屏幕的只读区域的问题。

列表5-1显示了使用VSTO使用ScreenUpdating属性的示例。

修复了导致某些Wi-Fi适配器在从以前版本的Windows升级后无法加载,需要被禁用并重新启用才能工作的问题。

清单5-7  邮件工作簿的VSTO定制

修复了在任务管理器的性能选项卡中将可移动设备错误地标记为HDD的问题。它们现在将被标记为可移动。

你不应该使用的属性
Excel提供了一个名为EnableEvents的属性,可以设置为false,以防止Excel引发其任何事件。虽然你可能会试图使用这个属性,不要这样做。再想一想,您的代码几乎不会在Excel中自行运行。其他开发人员将会在Excel中运行的文档中创建加载项和代码。通过将此属性设置为false,您可以有效地将所有其他代码加载到Excel中,直到将其设置为TRue为止。

已知问题

控制Excel的外观
您可以通过表5-1中列出的属性来控制Excel的外观。

已经做了一些工作来帮助解决如果你单击传入的电子邮件通知Outlook无法启动的问题。

处理文件时的另一个有用的属性是RecentFiles属性,它返回一个包含所有最近打开的文件名称的字符串集合。

修复了即文本光标指示器将出现在“开始”菜单上,而不是在“搜索”编辑框中键入文本后停留在“搜索”编辑框中的问题。

发送键盘命令到Excel
Excel提供了一种名为SendKeys的方法,当您无法找到通过对象模型完成命令的方法时,您可以将其用作最后的手段,但您知道如何通过键盘命令完成命令。它需要您作为字符串发送到应用程序的密钥,如果设置为true,则等待参数会导致Excel在将控件返回到代码之前等待Excel处理按键。您可以通过预先设定要由其他角色发送的按键来指定Alt,Ctrl和Shift等修饰键。例如,要发送Alt
+
T键命令,您可以调用SendKeys(“%t”,Type.Missing),因为%是SendKeys识别为Alt的符号。符号SendKeys识别为Ctrl为^,Shift为+。另外,特殊的字符串对应于诸如向下箭头的键。要向Excel发送向下箭头键盘,您可以调用SendKeys(“{DOWN}”,Type.Missing)。表5-3列出了与普通键对应的其他特殊字符串。

微软正在研究一个问题,在更新到此版本后,添加新的语言包报告成功安装但结果未安装。

在Excel中撤消
Excel具有撤消方法,可用于撤消用户执行的最后几个操作。但是,Excel不支持撤消您的代码执行的操作。一旦您的代码触及对象模型,Excel会清除撤消历史记录,并且不会将代码执行的任何操作添加到撤消历史记录中。

在这个版本中,微软为ARM64设备添加了对WSL2的支持!还添加了使用/etc/wsl.conf文件设置发行版默认用户的功能。此版本还包含多个错误修复,包括遗留Windows符号链接的长期问题。

www.9778.com 4

修复了某些本地体验包可能会恢复为英语的问题。

如果已将“计算”设置为xlCalculationManual或xlCalculationSemia自动,则可以使用Calculate方法强制对所有打开的工作簿进行完全重新计算。如果要更新公式引用的大量单元格,则使用手动计算可能是加快代码的另一种方法。与其他应用程序级属性一样,您应该在finally块中恢复属性的原始值,如本章前面所示。

轻松访问设置不再参与设置同步。因此,我们现在已删除设置>帐户>同步你的设置中的轻松访问切换。

在电子邮件中发送工作簿
Excel提供了一种使用称为MailLogon,Workbook.SendMail和MailLogoff的三种方法将工作簿作为电子邮件发送的简单方法。
MailLogon登录到邮件系统,并将用户名作为字符串,用户的密码作为字符串,以及是否立即下载新邮件作为bool。
检查MailSession属性以确保邮件会话尚未建立也很重要。
如果MailSession不为空,则不需要调用MailLogon方法。
如果有多个收件人,如果只有一个收件人或字符串数组,Workbook的SendMail方法将收件人作为必需的字符串。
它还将消息的主题用作字符串,以及是否请求读取收据作为bool。
清单5-7显示了一个邮件工作簿的简单示例。

如果没有足够的磁盘空间可以继续,那么重置此PC云下载选项当前不会计算释放所需的正确空间量。要解决此问题直到修复程序可用,释放超出提示的额外5GB。

 

在扫描模式下使用Shift +
Tab命令时,在读取时使用讲述人更可靠地读取消息标题。

   
注:因为在代码运行后将ScreenUpdating设置为原始值很重要,您应该使用C#对异常处理的支持,以确保即使代码中出现异常,ScreenUpdating也将恢复到其原始值。

“可选功能”设置部分的改进

返回活动或选定对象的属性
Application对象具有许多属性,返回活动对象,表示在Excel中处于活动状态或选择的内容。表5-2显示了其中的一些属性。

修复了最近版本中发生的netprofmsvc.dll中的死锁问题。受影响用户症状可能包括升级到98%的构建冻结,或者系统的各个方面意外冻结并变得无法响应。

控制工作簿的计算
Excel提供了一些与“选项”对话框的“计算”页面中的某些选项对应的设置和方法。
Application对象提供了XlCalculation类型的“计算”属性,可用于设置Excel的计算行为。默认情况下,“计算”设置为自动计算或xlCalculationAutomatic。您还可以将计算设置为xlCalculationSemia自动,这意味着计算除数据表之外的所有从属公式。最后,计算可以设置为xlCalculationManual,这意味着当用户或您的代码强制计算时,Excel只会重新计算工作簿。

微软已经添加了多选、搜索和通常使用的工作,以使这一部分更容易使用:

您可以将DisplayAlerts属性设置为false,以防止Excel在代码运行时显示对话框和消息。将此属性设置为false会导致Excel对任何可能显示的对话框或消息选择默认响应。确保获取此属性的原始值,并在代码运行后将属性设置为原始值。使用try,catch和finally块来确保您始终将属性重新设置为其原始值,如清单5-1所示。

在最近的版本中修复了影响触摸键盘可靠性的问题。

 

修复了当你在“任务视图”中右键单击它们时,可能会导致某些应用缩略图意外变为空白的问题。

DefaultFilePath属性对应于Excel“选项”对话框的“常规”页面中的默认文件位置设置。您可以将其设置为表示您希望Excel在打开和保存文件时默认使用的文件路径的字符串。

修复了影响最近几次版本中屏幕剪切可靠性的问题。

清单5-2 设置游标属性的VSTO自定义

此版本存在一个问题,某些本地体验包可能会恢复为英语。微软正在努力修复。

清单5-1  设置ScreenUpdating属性的VSTO自定义

Insiders的其他更新

一个更好的约定,而不仅仅是将ScreenUpdating属性设置为true,就是在更改ScreenUpdating属性之前保存ScreenUpdating属性的值,并在完成后将其设置回该值。在开发Office时,要记住的一件重要的事情是,您的代码不会成为在特定Office应用程序中运行的唯一代码。加载项可能正在运行,以及其他文档背后的其他代码等等。您需要考虑代码如何影响其他运行在Excel内的代码。

Windows Linux子系统改进

与本节中的其他应用程序属性一样,您希望在更改之前保存StatusBar属性的原始值,并确保使用TRy,catch和finally块将其设置回原始值。
记住将StatusBar属性的值保存到对象变量中,因为它可以返回一个字符串或一个bool值。
清单5-3显示了一个例子。

与游戏一起使用的旧版反作弊软件存在一个问题,在更新到最新的19H1 Insider
Preview版本后可能会导致PC闪退。微软正在与合作伙伴合作,通过修复程序更新其软件,大多数游戏都发布了补丁,以防止PC遇到此问题。为了尽量减少遇到此问题的可能性,请在尝试更新操作系统之前确保你运行的是最新版本的游戏。微软还与反作弊者和游戏开发者合作,以解决20H1
Insider
Preview构建中可能出现的类似问题,并将努力将这些问题的可能性降至最低。

在Excel状态栏中显示消息
StatusBar是一种属性,允许您设置Excel窗口左下角Excel状态栏中显示的消息。
您可以将StatusBar属性设置为表示要在状态栏中显示的消息的字符串。
您也可以将StatusBar设置为false以显示Excel的默认状态栏消息。
如果Excel显示默认状态栏消息,则StatusBar属性将返回false值。

为了响应反馈,微软正在执行一项计划,使所有Windows
10用户都能更轻松地使用Cortana。作为第一步,从今天的版本开始,全球所有Insiders将看到Cortana图标和新应用程序。在未来的Cortana应用程序更新中,如果他们使用受支持的语言,用户就可以选择使用Cortana。新的Cortana应用程序目前支持英语

www.9778.com 5

修复了一个问题,在更新帐户图片时可能会导致设置崩溃。

拼写检查
Excel提供了一种名为CheckSpelling的方法,可用于检查单个单词的拼写。
它需要一个包含要检查的字符串的必需字符串参数。
它还需要一个可选的对象参数,可以将其设置为要使用的自定义字典的文件名的字符串。
最后,它需要一个可选的对象参数,可以设置为true,以便在拼写检查时忽略大写字母。
如果传递给它的单词拼写错误,CheckSpelling返回false。
清单5-6显示了调用CheckSpelling方法的示例。

修复了当从左到右和从右到左语言切换时,文本光标指示器不会显示的问题。

 

在详细级别一级阅读列表时,改善了讲述人的冗长程度。

private void Sheet1_Startup(object sender, System.EventArgs e)
{
  bool oldScreenUpdatingSetting = this.Application.ScreenUpdating;

  try
  {
    this.Application.ScreenUpdating = false;
    Random r = new Random();

    for (int i = 1; i < 1000; i++)
    {
      string address = String.Format("A{0}", i);
      Excel.Range range = Range[address, missing];
      range.Value2 = r.Next();
    }
  }
  finally
  {
    this.Application.ScreenUpdating = oldScreenUpdatingSetting;
  }
}

在之前的版本上有升级模块,以确保具有某些版本的Outlook测试用户不受构建中问题的影响,这导致一些内部人员在上周检查更新时没有找到Build版本。此版本已删除此内容。

图5-1  当您呼叫退出并且需要保存工作簿时,Excel会提示您

显示设置中添加功能部分之前和之后的内容。你现在可以进行多选和搜索。

表5-3  SendKeys使用的代码

private void Sheet1_Startup(object sender, System.EventArgs e)
{
  Excel.Application app = this.Application;

  app.Goto("R3C3", missing);
  app.Goto("Sheet2!R10C5", true);
  app.Goto("[BOOK1.XLS]Sheet1!R4C4", true);
  app.Goto(this.get_Range("R8C2", missing), true);
  app.Goto(this.get_Range("R1C1", "R20C3"), true);
}

控制Excel显示的对话框和警报
偶尔,您编写的代码将导致Excel显示对话框,提示用户作出决定或提醒用户即将发生的事情。如果在运行代码的一部分时发现这种情况发生,您可能希望防止显示这些对话框。

表5-1 控制Excel用户界面元素的属性

表5-2 返回活动对象的应用程序属性

Excel可以通过“选项”对话框的“编辑”选项卡中的“直接编辑单元格”选项来控制单元格内容是否可以直接在单元格内编辑。
EditDirectlyInCell属性可以让您在代码中更改此设置。将此属性设置为false会使用户只能使用公式栏编辑单元格的内容。

清单5-4 使用WorksheetFunction对象的VSTO自定义

控制Excel中的编辑体验
Excel提供了许多可用于控制Excel中编辑体验的属性。要了解这些属性控件的部分Excel编辑体验,请启动Excel实例并创建一个空白工作表。单击该工作表中的单元格,然后键入一个数字。请注意,Excel可以在单元格中输入,也可以在窗口顶部显示公式栏。您可以移动单元格内的插入点,以进一步编辑单元格的内容。编辑单元格后按Enter键,Excel将移动到下一个单元格。
(您的编辑设置可能不同,但此说明代表Excel 2003的默认行为。)

更改鼠标指针
在大型操作期间,您可能希望将Excel的鼠标指针的外观更改为沙漏,让用户知道他们正在等待某些事情完成。
Cursor属性是XlMousePointer类型的属性,可以更改Excel的鼠标指针的外观。它可以设置为以下值:xlDefault,xlIBeam,xlNorthwestArrow和xlWait。

除了在代码运行时不强制用户观看Excel更改单元格的优点之外,ScreenUpdating属性证明对加速代码非常有用。每次操作后重新画屏可能相当昂贵。确保在您的代码完成时将此属性设置为true,用户将留下不绘制的Excel。如下所示,try-finally块是确保即使抛出异常也会重置属性的方便方法。

private void Sheet1_Startup(object sender, System.EventArgs e)
{
  XlMousePointer originalCursor = this.Application.Cursor;

  try
  {
    this.Application.Cursor = XlMousePointer.xlWait;
    Random r = new Random();

    for (int i = 1; i < 2000; i++)
    {
      string address = String.Format("A{0}", i);
      Excel.Range range = this.Range[address, missing];
      range.Value2 = r.Next();
    }
  }
  finally
  {
    this.Application.Cursor = originalCursor;
  }
}

您可以设置Excel使用DefaultSaveFormat属性保存文件时使用的默认文件格式。此属性的类型为XlFileFormatan枚举,具有Excel支持的各种文件格式的值。例如,要将Excel文件默认保存为Excel
5格式,请将此属性设置为xlExcel5。

退出Excel
您可以使用“退出”方法退出Excel。
如果任何未保存的工作簿打开,Excel将提示用户保存每个未保存的工作簿。
您可以通过将DisplayAlerts属性设置为false来禁止提示,这将导致Excel退出而不保存工作簿。
您还可以检查每个工作簿上的Workbook.Saved属性,并调用Workbook.Save保存每个未保存的工作簿。
请记住,当用户被提示保存时,会出现如图5-1所示的对话框。
如果用户单击“取消”按钮,或者正在运行的代码正在处理BeforeClose事件并将取消参数设置为“TRue”,Excel将不会退出。

例如,您的代码可能会调用一个方法,例如在工作簿上关闭,这将导致Excel引发BeforeClose事件。在这种情况下,如果要防止BeforeClose事件处理程序运行,您有几个选项比使用EnableEvents更好。第一个选项是在调用Close方法之前停止侦听BeforeClose事件。第二个选项是创建一个保护变量,您可以在调用关闭之前设置。
BeforeClose的事件处理程序可以检查保护变量,如果设置了保护变量,则立即返回。

清单5-3 使用StatusBar属性显示进度的VSTO自定义

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
  Excel.Application app = this.Application;

  if (app.MailSession == null)
  {
    app.MailLogon(@"DOMAINJOHN", @"JOHN", missing);
  }

  this.SendMail(@"bar@domain.com", "Test message", missing);
  app.MailLogoff();
}
private void Sheet1_Startup(object sender, System.EventArgs e)
{
  Excel.Application app = this.Application;

  if (!app.CheckSpelling("funtastic", missing, missing))
  {
    MessageBox.Show("Funtastic was not spelled correctly".);
  }

  if (!app.CheckSpelling("fantastic", missing, missing))
  {
    MessageBox.Show("Fantastic was not spelled correctly.");
  }

  if (!app.CheckSpelling("FUNTASTIC", missing, true))
  {
    MessageBox.Show("FUNTASTIC was not spelled correctly.");
  }
}