VSTO:使用C#开发Excel、Word【16】

采取工作表对象
Worksheet对象表示Excel工作簿中之工作表。Worksheet有一个Name属性,返回工作表的名(例如“Sheet1”)。

工作表管理
Worksheet对象拥有一个Index属性,它呢工作说明窗口左下角显示的选料项卡式工作表选项卡中的工作表提供依据1之精选项卡位置。您可以Move方法以工作表移动及不同之抉择项卡位置。
Move方法有有限独可选参数:一个Before参数,您可传递要倒工作表之前的工作表,以及一个After参数,您得传递要运动的工作表之后的工作表。如果简单了零星个可选参数,Excel将开创一个新的工作簿,并将工作表移动及新的工作簿。

为得使复制方法制作工作表的副本。像Move方法一致,它用简单个可选取参数:一个Before和After参数,用于指定复制的工作表应该相对于外工作表的岗位。您可指定Before或After,但切莫能够以指定两单参数。如果简单了片只可选取参数,Excel将创设一个新的工作簿,并拿工作表复制到新的工作簿。

一旦激活特定的工作表,请动Activate方法。此方式通过以和工作表相关联的首先只窗口设置也运动窗口来激活工作表。它还挑选跟工作表对应之挑选项卡,并以走窗口被展示该工作表。

一定给右键单击工作表选项卡,并由弹出菜单中选择“删除”由Delete方法供。使用这道时,Excel会显示一个告诫对话框。您得由此动Application对象的DisplayAlerts属性来防止出现此警告对话框,该属性将在本章前面的“控制Excel显示的对话框和警报”一节中讨论。

你可以隐藏工作表,以便通过行使Visible属性完全无显其选择项卡。
Visible属性的门类也XlSheetVisibility,可以安装也xlSheetVisible,xlSheetHidden和xlSheetVeryHidden。最后一个价隐藏工作表,以便只能通过将Visible属性设置也xlSheetVisible来再次显示。将Visible属性设置为xlSheetHidden隐藏工作表,但用户还可透过改动到“格式”菜单并选取“Sheet”,然后单击“隐藏”来取消隐藏工作表。

偶尔,使用Visible属性隐藏工作表,以便该工作表可用于存储应用程序在用户不会见盼的“临时”工作表中使用的别数据。
VSTO的缓存数据功能提供了再好的道,如第18回所陈述。它拥有额外的利益,您可当Excel电子表格中操作隐藏的数码,而无需启动Excel。这使您可于服务器上预填充具有从定义数据的Excel工作表。

呼吁留意,工作簿必须至少含有一个可见的工作表。所以当用Delete方法以及Visible属性时,你必须铭记这限制。如果你的代码尝试隐藏或去工作簿中之最终一个可见表单,则会丢掉来怪。

清单5-23证实了几乎单这些性与方式的用法。

清单5-23 适用于工作表集合的VSTO定制

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
  Excel.Worksheet sheetA = this.Worksheets.Add(
    missing, missing, missing, missing) as Excel.Worksheet;
  sheetA.Name = "SheetA";

  Excel.Worksheet sheetB = this.Worksheets.Add(
    missing, missing, missing, missing) as Excel.Worksheet;
  sheetB.Name = "SheetB";

  Excel.Worksheet sheetC = this.Worksheets.Add(
    missing, missing, missing, missing) as Excel.Worksheet;
  sheetC.Name = "SheetC";

  // Tab indexes
  string msg = "{0} is at tab index {1}";
  MessageBox.Show(String.Format(msg, sheetA.Name, sheetA.Index));
  MessageBox.Show(String.Format(msg, sheetB.Name, sheetB.Index));
  MessageBox.Show(String.Format(msg, sheetC.Name, sheetC.Index));

  sheetC.Move(sheetA, missing);
  MessageBox.Show("Moved SheetC in front of SheetA");

  // Tab indexes
  MessageBox.Show(String.Format(msg, sheetA.Name, sheetA.Index));
  MessageBox.Show(String.Format(msg, sheetB.Name, sheetB.Index));
  MessageBox.Show(String.Format(msg, sheetC.Name, sheetC.Index));

  sheetB.Copy(sheetA, missing);
  Excel.Worksheet sheetD = this.Worksheets.get_Item(
    sheetA.Index - 1) as Excel.Worksheet;

  ((Excel._Worksheet)sheetA).Activate();

  MessageBox.Show(String.Format(
    "Copied SheetB to create {0} at tab index {1}",
    sheetD.Name, sheetD.Index));

  sheetD.Delete();
  sheetA.Visible = Excel.XlSheetVisibility.xlSheetHidden;
  MessageBox.Show("Deleted SheetD and hid SheetA.");
}

动名称
如前所述,您可采取Workbook.Names在工作簿级别定义命名范围。您还好透过采用与Worksheet对象关系的Names属性来定义范围及特定工作表的命名范围。
Names属性返回一个就含作用域到作业表的名目的Names集合。有关Names集合的再次多信息,请参见本章前面的“使用名称集合和名对象”一省。

使工作表自定义属性
你可以增长具有名称和值的自定义属性到工作表。自定义属性是拿其余隐蔽信息及匪思放入单元格的办事表相关联的简便措施。不同为与工作簿关联的文档属性,Excel用户界面中的外位置还无出示自定义属性。工作表级别之自定义属性不备文档属性对其值的256单字符的限定。您可以于干活表自定义属性被存储更老之数据块。

CustomProperties属性返回跟工作表关联的自定义属性的联谊。您可以动用CustomProperties集合的Add方法上加于定义属性,并为使开创的自定义属性的名号传递一个字符串,并也要与由定义属性关联的价传递一个靶。要获得一定的自定义属性,请用CustomProperties.Item方法并传递要赢得之习性之目录。不幸的凡,Item方法只有待一个冲1的目,而未是你添加的自定义属性的名号。因此,您得遍历该集合并检查每个返回的CustomProperty对象的Name属性,以确定是否早已找到所欲的自定义属性。清单5-24来得了创办于定义属性,然后再度走访的言传身教。

清单5-24 访问于定义DocumentProperty对象的VSTO自定义

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
  Excel.Worksheet sheet = this.Worksheets.Add(missing,
    missing, missing, missing) as Excel.Worksheet;

  // Add a custom property

  Excel.CustomProperties props = sheet.CustomProperties;

  props.Add("myProperty", "Some random value");
  props.Add("otherProperty", 1);

  // Now, enumerate the collection to find myProperty again.
  foreach (Excel.CustomProperty prop in props)
  {
    if (prop.Name == "myProperty")
    {
      MessageBox.Show(String.Format(
        "{0} property is set to {1}.",
        prop.Name, prop.Value));
      break;
    }
  }
}

假如您运VSTO将代码和工作簿相关联,通常最好下缓存数据而非是自从定义属性。
缓存的多寡功能可以拿数据集和其它XML可序列化类型放入文档中的数据岛。
该数据岛也足以于服务器上看使不起头动Excel。
有关VSTO的缓存数据功能的再度多信息,请参见第18节。

保护工作表
Protect方法保护工作表,使用户不克改工作表。
当使用Protect方法保护工作表时,工作簿中之有着单元都拿给机关锁定。
保护措施对应于图5-3所出示之“保护工作表”对话框。
您可经甄选工具>保护>保护页面访问该对话框。

图5-3  保护工作表对话框。

银河至尊游戏官网 1

传送给Protect方法的组成部分可选参数精确地操纵可以改的始末,如表5-14所显示。
许多这些选择对应于图5-3所展示之反省列表。

说明5-14  保护方式的可选参数

 银河至尊游戏官网 2

 

 银河至尊游戏官网 3

当工作表受保护时,您来星星点点栽消某些范围的不过元格被锁定的不二法门。
第一种艺术是应用由Worksheet.Protection.AllowEdit-Ranges返回的AllowEditRanges集合来补加祛除对象。
AllowEditRanges集合对应为允许用户编辑范围对话框,如图5-4所展示。
您可以透过选择工具>保护>允许用户编辑范围来拜会是对话框。

希冀5-4  允许用户编辑范围对话框

 银河至尊游戏官网 4

须事先以AllowEditRanges集合进行清除,然后再度用Protect方法来保护工作表。
在保障工作表之后,在再次取消保护工作表之前,不能够针对AllowEditRanges集合进行其他改变。
以此方式开展消除,可以被闹题目,并出示在“允许用户编辑范围”对话框中。
以这种方式由维护遭到祛的限将从今其Range.AllowEdit属性返回TRue。
清单5-25显了一个VSTO自定义,它用AllowEditRanges创建两只保安之败,然后使Protect方法保护工作表。

清单5-25  使用AllowEditRanges将禁止上加到保护的VSTO自定义

 

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
  Excel.Worksheet sheet = this.Worksheets.Add(missing,
    missing, missing, missing) as Excel.Worksheet;

  Excel.AllowEditRanges allowEdits = sheet.Protection.
    AllowEditRanges;

  allowEdits.Add("Editable Cell",
    sheet.get_Range("A1", missing), missing);

  sheet.Protect(missing, missing, missing, missing,
    missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing,
    missing, missing);

  Excel.Range protectedRange = sheet.get_Range("A2", missing);


  MessageBox.Show(String.Format(
    "A2's Locked is set to {0}", protectedRange.Locked));

  MessageBox.Show(String.Format(
    "A2's AllowEdit is set to {0}", protectedRange.AllowEdit));

  try
  {
    protectedRange.Value2 = "Should fail";
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }

  try
  {
    allowEdits.Add("This should fail",
      sheet.get_Range("A2", missing), missing);
  }
  catch (Exception ex)
  {
    // You can't add to the AllowEditRanges collection
    // when the worksheet is protected
    MessageBox.Show(ex.Message);
  }

  Excel.Range allowEditRange = sheet.get_Range("A1", missing);

  MessageBox.Show(String.Format(
    "A1's Locked is set to {0}", allowEditRange.Locked));

  MessageBox.Show(String.Format(
    "A1's AllowEdit is set to {0}", allowEditRange.AllowEdit));

  allowEditRange.Value2 = "Should succeed";
}

当工作表被保安时,排除某些范围的仅元格被锁定的次种植艺术是用Range.Locked属性。
以这种办法消除之才元格不会见来得在“允许用户编辑范围”对话框中。
清单5-26出示了应用Range.Locked属性添加排除对保障。

清单5-26 使用Range.Locked添加排除对象的VSTO自定义

 

private void ThisWorkbook_Startup(object sender, EventArgs e)
{
  Excel.Worksheet sheet = this.Worksheets.Add(missing,
    missing, missing, missing) as Excel.Worksheet;

  Excel.Range range1 = sheet.get_Range("A2", missing);
  range1.Locked = false;

  sheet.Protect(missing, missing, missing, missing,
    missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing,
    missing, missing);

  MessageBox.Show(String.Format(
    "A2's Locked is set to {0}", range1.Locked));

  MessageBox.Show(String.Format(
    "A2's AllowEdit is set to {0}", range1.AllowEdit));

  range1.Value2 = "Should succeed";
}

办事表受保护后,可以由此多独特性来检查文档的护装置,并进一步修改保护选项,如表5-15所展示。

表明5-15  允许你检查并进而修改文档保护之性

 银河至尊游戏官网 5

使用OLEObjects
除了含有单元格,工作表还可分包来自外程序(如嵌入式Word文档)和ActiveX控件的内置对象。要用这些目标,可以以Worksheet对象及用OLEObjects方法。
OLEObjects方法接受一个可选的Index对象参数,您可以传递OLEObject的称号或者集合中OLEObject的根据1之目录。
OLEObjects方法呢可看做一如既往栽访问OLEObjects集合的艺术,这说不定令人困惑。如果您传递一个字符串,它象征为一个名字或者一个因1的目作为一个int,它回到指定的OLEObject。如果你传递它Type.Missing,它回到OLEObjects集合。

另外时刻,将OLEObject添加到工作表中,Excel还包自“工作表”对象吃之“样式”属性返回的“形状”集合中之拖欠目标。要获取取OLEObject唯一的性质,可以使用Shape.OLEFormat属性。

足编制将ActiveX控件添加到工作表中的C#代码,并经过将OLEObject.Object或Shape.OLEFormat.Object转换为宜的型以及它进行交谈。您必须于C#项目面临添加与如采取的ActiveX控件相关联的COM库的援。这样做会招致Visual
Studio生成一个互操作程序集并拿其上加到公的项目蒙。或者,如果也COM库注册了主互操作程序集,Visual
Studio将自动抬高对预生成的主互操作程序集的援。然后,您可以拿OLEObject.Object或Shape.OLEFormat.Object转换为Visual
Studio为跟ActiveX控件相呼应的COM库对象添加的不错类型。

VSTO使你能够以Windows
Forms控件添加至办事表中,功能重新强硬,以.NET为主干的拍卖控件的法门。因此,我们无会见以本书中又多地用ActiveX控件。有关VSTO对Windows
Forms控件的支撑之再多信息,请参见第14章节“在VSTO中行使Windows窗体”。

银河至尊游戏官网用形态
Shapes属性返回Shape对象的Shapes集合集合。
Shape对象表示足插到Excel电子表格中的各种对象,包括图片,AutoShape,艺术字,嵌入对象要ActiveX控件或图片。

“形状”集合有“Count”属性,用于确定“工作表”中有略只形状。它还有一个Item方法,它采取基于1底目录来抱集合中之一定形状。您还可以下foreach枚举Shapes集合。

“形状”集合上之几种办法好加上足代表为“形状”的各种对象。这些方式包括AddCallout,AddConnector,AddCurve,AddDiagram,AddLabel,AddLine,AddOLEObject,AddPicture,AddPolyline,AddShape,AddTextbox和AddTextEffect。

Shape对象拥有用Shape置于工作表上的特性和章程。它还具备允许格式化和修改Shape对象的性能和法。
Shape对象及之性返回的一对靶要图3-20所显示。

使用ChartObjects
以本书中,当引用工作簿中之工作表的图纸时,我们采用了短语图表。图5-5显得了以插入新图片时展示的图样向导的末尾一页。
Excel使您能够用图片插入新的图纸,我们称之为图表单,并同意而将图片作为对象上加到办事表中。对象模型调用在表单中补充加为对象的图片。

图5-5 图表向导的图位置步骤

银河至尊游戏官网 6

作业再次扑朔迷离的凡,图表表的靶子模型中之对象是一个图形,但ChartObject也发一个赶回图表的性。
ChartObject具有温馨之同一组属性,用于控制工作说明中图纸的职务。但是,由ChartObject.Chart属性返回的Chart对象好找到实际操作图表内容之属性与措施。

苟以ChartObjects,可以在Worksheet对象上以ChartObjects方法。
ChartObjects方法接受类型对象的可选索引参数,您得传递集合中ChartObject的称谓或ChartObject的冲1底目录。
ChartObjects方法吗可以当获得ChartObjects集合的同一种办法,这可能会见令人困惑。如果你传递一个代表也名称或冲1之目录的字符串,则回指定的ChartObject。如果您传递它Type.Missing,它回到ChartObjects集合。

假定用ChartObject添加到工作表中,可以下ChartObjects.Add方法,它将“左”,“顶”,“宽”和“高”作为点的对精度值。每当你将ChartObject添加到工作表中时,Excel也会见当“工作表”对象吃之“Shapes”属性返回的“Shapes”集合中蕴含该目标。

行使列表
Excel
2003引入了起同名目繁多单元格创建列表的职能。只待选择相同文山会海单元格,右键单击选择,然后选取创建列表。列表具有列标题和下拉选项,使用户可轻松地指向列表中的数量进行排序和使用过滤器。它起一个累计行,可以自动求和连对一列数额实行外操作。它以列表底部有一个标号有星号的插入行,允许用户为列表中补充加另执行。图5-6显了Excel中之列表示例。

祈求5-6  Excel中之列表

银河至尊游戏官网 7

您得运用ListObjects属性访问工作表中的列表。
ListObjects属性返回ListObjects集合。
ListObjects集合有一个Count属性来规定Worksheet中生出多少列表。
它还有一个Item方法,它将一个根据索引的目或列表对象的称作为一个字符串来打集合中获取一个ListObject对象。
您还好使用foreach枚举ListObjects集合。

发明5-16显示了ListObject对象的一对极其常用之属性。
您将在第17节“VSTO数据编程”中讨论VSTO对数据的支持的再多信息。

发明5-16  ListObject的要害特性

 银河至尊游戏官网 8

 

相关文章