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

利用工作表对象
Worksheet对象表示Excel工作簿中的工作表。Worksheet有1个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的缓存数据功用提供了更好的章程,如第③8章所述。它抱有额外的功利,您能够在Excel电子表格中操作隐藏的数量,而无需运维Excel。那使你能够在服务器上预填充具有自定义数据的Excel工作表。

请留心,工作簿必须至少含有3个可见的工作表。所以当使用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用户界面中的任何地点都不显得自定义属性。工作表级其他自定义属性不享有文书档案属性对其值的257个字符的限定。您可以在劳作表自定义属性中蕴藏更大的数据块。

CustomProperties属性重临与工作表关联的自定义属性的联谊。您可以行使CustomProperties集合的Add方法添加自定义属性,并为要开创的自定义属性的称号传递1个字符串,并为要与自定义属性关联的值传递几个对象。要获取一定的自定义属性,请使用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的缓存数据作用的越来越多新闻,请参见第壹8章。

保卫安全工作表
Protect方法敬重工作表,使用户不可能改改工作表。
当使用Protect方法爱戴工作表时,工作簿中的全部单元都将被电动锁定。
保养办法对应于图5-3所示的“珍贵工作表”对话框。
您能够因而增选工具>尊敬>珍视页面访问该对话框。

图5-3  珍视工作表对话框。

银河至尊游戏官网 1

传送给Protect方法的局地可选参数精确地操纵可以修改的内容,如表5-14所示。
许多那几个选取对应于图5-3所示的反省列表。

表5-14  爱惜办法的可选参数

 银河至尊游戏官网 2

 

 银河至尊游戏官网 3

当工作表受珍爱时,您有两种排除某个范围的单元格被锁定的格局。
第②种形式是应用从Worksheet.Protection.Allow艾德it-Ranges重回的AllowEditRanges集合来添加扫除对象。
Allow艾德itRanges集合对应于允许用户编辑范围对话框,如图5-4所示。
您能够透过增选工具>爱护>允许用户编辑范围来拜访此对话框。

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

 银河至尊游戏官网 4

必须先选取Allow艾德itRanges集合举行破除,然后再采用Protect方法来维护理工科人作表。
在维护理工科人作表之后,在再一次废除珍贵工作表此前,不能够对Allow艾德itRanges集合进行任何变更。
以此情势展开割除,能够付出标题,并显示在“允许用户编辑范围”对话框中。
以那种办法从掩护中消除的限定将从其Range.Allow艾德it属性再次回到TRue。
清单5-25展现了二个VSTO自定义,它接纳Allow艾德itRanges创制四个保险的解除,然后利用Protect方法珍视工作表。

清单5-25  使用Allow艾德itRanges将禁止添加到爱抚的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个字符串,它意味着为三个名字或三个基于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控件的支撑的更加多新闻,请参见第一4章“在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也有1个再次回到图表的性质。
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
二〇〇一引入了从一层层单元格创建列表的功效。只需采纳一各类单元格,右键单击选拔,然后选取成立列表。列表具有列标题和下拉选项,使用户能够轻松地对列表中的数据开展排序和选择过滤器。它有三个总共行,能够自动求和并对一列数码进行其余操作。它在列表底部有多少个标有星号的插入行,允许用户向列表中添加其他行。图5-6展现了Excel中的列表示例。

图5-6  Excel中的列表

银河至尊游戏官网 7

您能够选择ListObjects属性访问工作表中的列表。
ListObjects属性重回ListObjects集合。
ListObjects集合有3个Count属性来鲜明Worksheet中有微微列表。
它还有二个Item方法,它将3个依据索引的目录或列表对象的称谓作为1个字符串来从集合中取得多少个ListObject对象。
您还足以应用foreach枚举ListObjects集合。

表5-16展示了ListObject对象的一对最常用的质量。
您将在第27章“VSTO数据编程”中钻探VSTO对数码的协理的更加多音讯。

表5-16  ListObject的要害质量

 银河至尊游戏官网 8

 

相关文章