列のデータを自動的にマージする

文書番号 : 11246     文書種別 : 使用方法     最終更新日 : 2003/07/07
文書を印刷する
対象製品
El Tabelle for .NET
詳細
El Tabelle には自動マージの機能は備わっていないため、コーディングでセルの値をチェックし、マージする必要があります。
次の AutoColumnMerge 関数は自動マージのコーディング例です。引数に対象となる Sheet コントロールと列の番号を指定すると、同じデータが隣り合っているセルを連結します。

[Visual Basic]
Private Sub AutoColumnMerge(ByRef TargetSheet As GrapeCity.Win.ElTabelle.Sheet, ByVal ColumnNumber As Integer)
  Dim intCounterA, intCounterB As Integer

  For intCounterA = 0 To TargetSheet.MaxRows - 1
    For intCounterB = intCounterA To TargetSheet.MaxRows - 1
      If Not TargetSheet.Item(ColumnNumber, intCounterB).Value = TargetSheet.Item(ColumnNumber, intCounterA).Value Then Exit For
    Next
    If intCounterB > intCounterA + 1 Then
      TargetSheet.Merge(New GrapeCity.Views.ElTabelle.Range(ColumnNumber, intCounterA, ColumnNumber, intCounterB - 1, GrapeCity.Views.ElTabelle.RangeStyle.Cells))
      intCounterA = intCounterB - 1
    End If
  Next
End Sub


[C#]
private void AutoColumnMerge(GrapeCity.Win.ElTabelle.Sheet TargetSheet, int ColumnNumber)
{

  int intCounterA, intCounterB;

  try
  {
    for (intCounterA = 0; intCounterA < TargetSheet.MaxRows; intCounterA++)
    {
      for (intCounterB = intCounterA; intCounterB < TargetSheet.MaxRows; intCounterB++)
      {
        if (TargetSheet[ColumnNumber,intCounterB].Value.ToString() !=
          TargetSheet[ColumnNumber,intCounterA].Value.ToString()) break;
      }
      if (intCounterB > intCounterA + 1)
      {
        TargetSheet.Merge(new GrapeCity.Views.ElTabelle.Range(
          ColumnNumber, intCounterA, ColumnNumber, intCounterB - 1,
          GrapeCity.Views.ElTabelle.RangeStyle.Cells));
        intCounterA = intCounterB - 1;
      }
    }
  }
  catch
  {
  }
}


使い方

[Visual Basic]
'Sheet1の一列目を自動マージする
AutoColumnMerge(Sheet1, 0)

[C#]
//Sheet1の一列目を自動マージする
AutoColumnMerge(sheet1, 0);

なお、AutoColumnMerge 関数ではセル型を考慮していない点に注意してください。

2003年12月22日以降のトライアル版、修正版にこのコードを使用したサンプルプロジェクトが含まれています。
キーワード
HowTo

この文書は、以前は次のFAQ IDで公開されていました : 3236