[GcSpreadGrid] 下から上方向にセル範囲を選択してコピーした値を貼り付けると、選択範囲外に貼り付けられる

文書番号 : 85090     文書種別 : 技術情報     登録日 : 2020/05/21     最終更新日 : 2020/05/21
文書を印刷する
対象製品
SPREAD for WPF 3.0J
詳細
下から上方向にセル範囲を選択して、Ctrl + Vでコピーした値の貼り付けを行うと、現在選択されているセル範囲ではなく、最初に選択したセルを起点にして下方向のセル範囲に値が貼り付けられます。

例えばB2セルを起点にA1セルまでの範囲を選択した状態で、Ctrl + Vを押下すると、B2セルからC3セルまでの範囲に値が貼り付けられます。

製品では、このようなセル範囲の選択方法でデータの貼り付けを行うケースに対応した機能が備えられておりません。必ず、最初に選択したセルを左上の起点にしたセル範囲に値が貼り付けられます。

このようなケースに対応するためには、コード処理で貼り付け処理を独自に実装する必要があります。下記のサンプルコードのような処理を実装することをご検討ください。

◎サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid;
using System.Windows.Forms;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Spread.ClipboardPasting += Spread_ClipboardPasting;
        Spread.ClipboardPasted += Spread_ClipboardPasted;
    }

    private bool _clipboardPastingEntered;
    private CellPosition _oldActiveCell;
    private void Spread_ClipboardPasting(object sender, ClipboardPastingEventArgs e)
    {
        if (_clipboardPastingEntered)
        {
            _clipboardPastingEntered = false;
            return;
        }
        var selection = Spread.SelectedRanges.FirstOrDefault();
        if (selection != null)
        {
            e.Handled = true;
            _clipboardPastingEntered = true;
            _oldActiveCell = Spread.ActiveCellPosition;
            Spread.ActiveCellPosition = new CellPosition(selection.Row, selection.Column);
            Spread.Select(selection, SelectionType.New);
            Dispatcher.BeginInvoke((Action)(() => SendKeys.SendWait("^{v}")));
        }
    }

    private void Spread_ClipboardPasted(object sender, EventArgs e)
    {
        var selection = Spread.SelectedRanges.FirstOrDefault();
        Spread.ActiveCellPosition = _oldActiveCell;
        Spread.Select(selection, SelectionType.New);
    }
}