[ETSH05665]仮想モードでセルをコピーしたとき、クリップボードに値がコピーされない

文書番号 : 22502     文書種別 : 制限事項     最終更新日 : 2006/09/02
文書を印刷する
対象製品
El Tabelle Sheet 4.0J
発生環境
動作保証環境と同じ
詳細
仮想モード (Sheet.VirtualMode = True ) を使用しているとき、非編集状態でセルやセル範囲をコピーしてもクリップボードに値が格納されません。
このため、テキストエディタや Excel に値を貼り付けることができません。
回避方法
この現象は仮想モードの制限によるものです。Sheet では値のほかに罫線や背景などのクリップボード操作もサポートしているため、仮想モードではクリップボード操作自体が無効となります。この制限はドラッグ&ドロップでも同様です。
この制限を回避するには、値をクリップボードに格納する処理を作成します。このとき、Sheet.AllowClipboard プロパティは false に設定する必要があります。

[Visual Basic]
Private Sub Sheet1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Sheet1.KeyDown
  Dim objSheet As GrapeCity.Win.ElTabelle.Sheet = _
    CType(sender, GrapeCity.Win.ElTabelle.Sheet)

  If e.KeyData = CType(Keys.Control Or Keys.C, Keys) Then
    Dim copyData As String = ""
    Dim objRanges() As GrapeCity.Win.ElTabelle.Range
    objRanges = Sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection)
    Dim objRange As GrapeCity.Win.ElTabelle.Range = objRanges(0)
    For j As Integer = objRange.TopRow To objRange.BottomRow
      For i As Integer = objRange.LeftColumn To objRange.RightColumn
        copyData = copyData & objSheet(i, j).Value
        If Not i = objRange.RightColumn Then
          copyData = copyData & vbTab
        End If
      Next
      copyData = copyData & vbCrLf
    Next
    Clipboard.SetDataObject(copyData)
  End If
End Sub

[C#]
private void sheet1_KeyDown(object sender, KeyEventArgs e)
{
  GrapeCity.Win.ElTabelle.Sheet objSheet =
    (GrapeCity.Win.ElTabelle.Sheet)sender;

  if (e.KeyData == (Keys)(Keys.Control | Keys.C))
  {
    string copyData = "";

    GrapeCity.Win.ElTabelle.Range[] objRanges = sheet1.GetBlocks(GrapeCity.Win.ElTabelle.BlocksType.Selection);
    GrapeCity.Win.ElTabelle.Range objRange = objRanges[0];
    for (int j = objRange.TopRow; j <= objRange.BottomRow; j++)
    {
      for (int i = objRange.LeftColumn; i <= objRange.RightColumn; i++)
      {
        copyData = copyData + (string)objSheet[i, j].Value;
        if (i != objRange.RightColumn)
        {
          copyData = copyData + "¥t";
        }
      }
      copyData = copyData + "¥r¥n";
    }
    Clipboard.SetDataObject(copyData);
  }
}

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