OfficeのVisual Studioツール:エクセル、ワード、Outlook、およびInfoPathのと使ってC#【16】

ワークシートオブジェクトの使用
ワークシートオブジェクトは、Excelワークシートでのワークブックを表します。ワークシートには、Nameプロパティは、ワークシート(たとえば、「シート1」)の名前を返しています。

ワークシート管理
ワークシートオブジェクトは、ワークシートのウィンドウベースのワークシートタブ1位の左下隅を示しプロパティインデックス、タブ付きのワークシートのタブがあります。あなたは、別のタブの位置にワークシートを移動するには、Moveメソッドを使用することができます。Moveメソッドは、2つのオプションのパラメータがあります。ワークシートワークシートを移動する前に、パラメータの前に、あなたが渡すことができ、パラメータの後、ワークシートの後に移動するワークシートを渡すことができます。2つのオプションの引数が省略されている場合、Excelが新しいワークブックに新しいワークブックとワークシートを作成します。

また、レプリケーション方式を使用してワークシートのコピーを作成することができます。移動方法と同様に、2つのオプションのパラメータが必要です前後のコピー用紙を指定するパラメータは、他のシートに対してであるべきです。あなたは前または後に指定することができますが、同時に両方のパラメータを指定することはできません。2つのオプションの引数が省略されている場合、Excelが新しいブックを作成し、新しいブックにワークシートをコピーします。

特定のワークシートをアクティブにするには、Activateメソッドを使用します。ワークシートに関連付けられた最初のウィンドウによって提供されるこの方法は、ワークシートをアクティブにするアクティブウィンドウです。また、対応するワークシートのタブを選択し、アクティブなウィンドウでワークシートを表示します。

[シート]タブと同等のものを右クリックし、[Deleteメソッドが提供するポップアップメニューから「削除」を選択します。この方法を使用する場合、Excelが警告ダイアログボックスが表示されます。あなたは、この章の「Excelを箱警報制御および表示」、このプロパティはで説明される表示されるダイアログボックスを警告このDisplayAlertsのを防ぐために、Applicationオブジェクトのプロパティを使用することができます。

あなたは、Visibleプロパティを使用することによって、そのタブが表示されていない完了するために、ワークシートを非表示にすることができます。Visibleプロパティの種類は、あなたがxlSheetVisible、xlSheetHiddenとxlSheetVeryHiddenを提供することができる、XlSheetVisibilityです。のみ再びxlSheetVisibleを表示するには、Visibleプロパティを設定することによって、そのワークシートを隠された最後の値。ワークシートを非表示にするには、VisibleプロパティをXlSheetHidden、あなたはまだシートを再表示するために、「非表示」をクリックし、「書式」メニューに移動し、「シート」を選択することができます。

時には、ワークシートは、「一時的な」ワークシートのユーザーに使用される他のデータアプリケーションを格納するために使用することができるようにワークシートを非表示にするVisibleプロパティを使用してでは表示されません。第18章に記載されているようにVSTOデータのキャッシング機能は、より良い方法を提供します。それはあなたがExcelを起動せずにExcelのスプレッドシートのデータを非表示にすることができます追加の利点を持っています。これは、サーバー上のカスタムデータと事前移入Excelワークシートにことができます。

ワークブックは、少なくとも一つの目に見えるのワークシートが含まれている必要がありますのでご注意ください。ときDeleteメソッドとVisibleプロパティだから、あなたは心の中でこの制限を維持する必要があります。あなたのコードは、最後の目に見える形を非表示にしたり、ワークブックを削除しようとすると、例外がスローされます。

5-23リストは、これらのプロパティとメソッドのいくつかの使用を示します。

リスト5-23は、VSTO・カスタマイズ・ワークシートのコレクションに適用されます

コードをコピー
プライベートボイドThisWorkbook_Startup(オブジェクト送信者、のEventArgs電子)
{ 
  Excel.Worksheetシータ= this.Worksheets.Add(
    Excel.Worksheetとして、欠落している欠落し、欠落し、欠落しています)。
  sheetA.Name =「シータ」。

  Excel.Worksheet sheetB = this.Worksheets.Add(
    Excel.Worksheetとして、欠落している欠落し、欠落し、欠落しています)。
  sheetB.Name = "SheetB"。

  Excel.Worksheet sheetC = this.Worksheets.Add(
    Excel.Worksheetとして、欠落している欠落し、欠落し、欠落しています)。
  sheetC.Name = "SheetC"。

  //タブインデックス
  =列MSG "{0}タブインデックスである{1}"。
  MessageBox.Show(String.Formatの(MSG、sheetA.Name、sheetA.Index))。
  MessageBox.Show(String.Formatの(MSG、sheetB.Name、sheetB。
  MessageBox.Show(String.Formatの(MSG、sheetC.Name、sheetC。

  sheetC.Move(シータは、不足しています)。
  MessageBox.Show(「シータの前にSheetC移動」)。

  //タブインデックス
  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(シータは、不足しています)。
  Excel.Worksheet sheetD = this.Worksheets.get_Item(
    sheetA.Index - 1)Excel.Worksheetなど。

  ((Excel._Worksheet)シータ).Activate(); 

  MessageBox.Show(String.Formatの(
    "タブインデックス{1}に{0}を作成するためにコピーSheetB" 
    sheetD.Name、sheetD.Index))。

  sheetD.Delete(); 
  sheetA.Visible = Excel.XlSheetVisibility.xlSheetHidden。
  MessageBox.Show( "削除されたSheetDとシータを隠しました。"); 
}
コードをコピー

名前を使用し
言及を、あなたは、ブックレベルの定義にWorkbook.Names名前付き範囲を使用することができます。また、名前のワークシートオブジェクトに関連付けられた属性を使用して、特定のワークシートにスコープの名前付き範囲を定義することができます。名前プロパティは、ジョブテーブルセットの範囲のみを含む名前の名前を返します。名前のコレクションの詳細については、「コレクションの名前とオブジェクトの名前を使用して」は、この章で参照してください。

ワークシートのカスタムプロパティを使用し
ますが、カスタムプロパティは、ワークシートに名前と値を持って追加することができます。カスタムプロパティは、情報を非表示にし、関連するワークシート内の他の細胞を入れたくない便利な方法です。ワークブックに関連付けられたドキュメントのプロパティとは異なり、Excelのユーザーインターフェイスは、カスタムプロパティを表示するにはどこにもありません。ワークシートレベルのカスタムプロパティには、その文書のプロパティ値のための256文字の制限はありません。ワークシートのカスタムプロパティのデータの大きなブロックを格納することができます。

CUSTOMPROPERTIESプロパティは、ワークシートに関連付けられているカスタムプロパティのセットを返します。カスタムを作成すると、オブジェクトのプロパティのカスタム値に関連付けられて渡されるカスタムプロパティの名前の文字列を渡し、Addメソッドを使用してCUSTOMPROPERTIESコレクションを属性を追加することができます。特定のカスタムプロパティを取得するには、インデックスを取得するためにCustomProperties.Itemメソッドを使用してプロパティを渡します。残念ながら、Itemメソッドではなく、追加、カスタムプロパティベースのインデックスの名前だけが必要です。したがって、あなたが希望のカスタム属性を発見したかどうかを判断するために戻るCustomPropertyコレクションを歩くと、各オブジェクトのNameプロパティを確認する必要があります。リスト5-24は、カスタム属性を作成する例を示してから、再度アクセスしてください。

5-24アクセスリストのカスタムは、VSTOのカスタムオブジェクトDocumentProperty

コードをコピー
プライベートボイドThisWorkbook_Startup(オブジェクト送信者、のEventArgs電子)
{ 
  Excel.Worksheetシート= this.Worksheets.Add(欠落
    Excel.Worksheetとして行方不明、行方不明、行方不明)。

  //カスタムプロパティの追加

  Excel.CustomPropertiesの小道具= sheet.CustomPropertiesを。

  props.Add( "myPropertyに"、 "いくつかのランダムな値"); 
  props.Add( "otherProperty"、1); 

  //今、再びmyPropertyにを見つけるために、コレクションを列挙。
  foreachの(小道具でExcel.CustomProperty支柱)
  { 
    (prop.Name == "myPropertyに")場合
    、{ 
      MessageBox.Show(String.Formatのは、(
        "{0}プロパティは、{1}に設定されている。"、
        prop.Name、小道具。値)); 
      ブレーク;
  } 
}
コードをコピー

ワークブックに関連付けられているVSTOコードを使用している場合は、キャッシュされたデータは、カスタム属性の代わりに使用するのが最善です。キャッシュされたデータの機能が設定でき、任意のXMLデータ型は、文書内のシーケンスデータ島に配置することができます。島はまた、Excelを起動せずに、サーバー上のデータにアクセスすることができます。VSTOデータ・キャッシング機能の詳細については、第18章を参照してください。

シートの保護
、ユーザーがワークシートを変更できないようにワークシートを保護する保護方法が。保護シートは、保護方法を使用する場合、ブック内のすべてのセルが自動的にロックされます。図5-3「シートの保護」ダイアログボックスに対応する保護方法。このダイアログボックスにアクセスするにはツール>保護>ページを選択することができます。


図5-3は、シートダイアログボックスを保護します。

表5-14に示すように、いくつかのオプションのパラメータが正確コンテンツを変更するように制御することができるプロセスに渡さ保護します。これらのオプションの多くは、図5-3に示すチェックリストに対応しています。

表5-14オプションのパラメータの保護方法

 

 

 

ワークシートが保護されているときは、細胞の特定の範囲を除外するための2つのメソッドを持ってロックされています。第一の方法は、除外を追加Worksheet.Protection.AllowEdit的な範囲から返さAllowEditRangesのセットを使用することです。ダイアログボックスに対応して設定AllowEditRangesは、ユーザが図5-4に示される範囲を編集することを可能にします。あなたは>ツール>保護を選択し、ユーザーがこのダイアログにアクセスするには、範囲の編集を許可することができます。


図5-4のダイアログは、ユーザーが範囲を編集することができます

 

ワークシートを保護するために、Protectメソッドを使用し、その後、除外AllowEditRangesコレクションを使用する必要があります。後に、ワークシートを保護する再プロテクト解除のワークシートの前に、AllowEditRangesは、コレクションを変更することはできません。このように除外された、それはタイトルを与えられ、「ユーザーが範囲の編集を許可」ダイアログボックスに表示することができます。そのRange.AllowEditプロパティからの保護の範囲から除外このように、trueを返します。5-25カスタムVSTOを示しリスト、それはAllowEditRangesが保護さ2は、ワークシートを保護するために、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  允许您检查并进一步修改文档保护的属性

 

使用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 图表向导的图表位置步骤

事情更复杂的是,图表表的对象模型中的对象是一个图表,但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中的列表

ワークシートにアクセスするには、リストListObjectsプロパティを使用することができます。ListObjectsプロパティはListObjectsコレクションを返します。ListObjectsコレクションは、ワークシートのリストのどのくらいを決定するために、Countプロパティを持っています。それは名前のリストオブジェクトのインデックスに基づいて、文字列またはインデックスとしてコレクションオブジェクトからListObjectを取得し、また、項目の方法です。また、foreachの列挙ListObjectsコレクションを使用することができます。

表5-16は、最も一般的に使用されるプロパティListObjectオブジェクトのいくつかを示しています。あなたは、第17章「VSTOデータプログラミング」で詳しくVSTOデータのサポートについて説明します。

表5-16 ListObjectのキー属性

 

おすすめ

転載: www.cnblogs.com/qiys/p/11367308.html