SpreadJS製品ヘルプ
クリップボード変更時のイベント
イベントに関するサンプルコード > クリップボード変更時のイベント

クリップボード変更に対して、ClipboardChangedClipboardChangingClipboardPastedClipboardPastingの4つのイベントを使用できます。ClipboardChangedイベントはクリップボードの変更が起こったとき、およびClipboardChangingイベントはクリップボードが変更されるときに発生します。また、ClipboardPastedイベントはユーザーがクリップボードから貼り付けたとき、およびClipboardPastingイベントはユーザーがクリップボードから貼り付けるときに発生します。これらのイベントを使用すると、ExcelからSpreadへ、ワークシート内およびワークシート間で、テキスト、セルのデータ、画像、チャート、図形、スライサー、カスタムフローティングオブジェクトをコピーおよび貼り付けることができます。

ソースシートや範囲情報などの値をアクセスしたり、クリップボードのコピーと切り取りの操作を実行するときに切り取り操作が実行されているかどうかを確認したりすることもできます。

現在、SpreadJSからExcelへのテキスト以外のコピーと切り取りの操作はサポートされていません。

コードの使用

次のサンプルコードは、さまざまなクリップボードイベントを使用します。

Javascript
コードのコピー
<script>
    $(document).ready(function () {
        // Spreadを初期化します。
        var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
        // アクティブシートを取得します。
        var activeSheet = spread.getActiveSheet();

        // allowCopyPasteExcelStyleをtrueに設定します。
        spread.options.allowCopyPasteExcelStyle = true;

        // クリップボードイベントをバインドします。
        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardChanged, function (sender, args) {
            console.log("ClipboardChanged.");
        });

        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardChanging, function (sender, args) {
            console.log("ClipboardChanging");
        });

        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
            console.log("ClipboardPasted");
        });

        activeSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
            console.log("ClipboardPasting");
        });
    });
</script>

使用例

次のケースではクリップボードイベントを使用できます。

ExcelからSpreadJSへのコピーと貼り付け

例えば、Excelに画像、チャート、図形などの複数のオブジェクトがあり、画像を除いてすべてのオブジェクトをコピーしてスプレッドシートに貼り付けたいとします。このため、ClipboardPastingイベントの「cancel」パラメータはtrueに設定されます。

また、画像、チャート、図形などのオブジェクトをExcelからスプレッドシートにコピーおよび貼り付けるには、「allowCopyPasteExcelStyle」プロパティをtrueに設定する必要があります。 ExcelオブジェクトをSpreadにコピーする方法については、このトピックを参照してください。

次のサンプルコードは、ExcelからSpreadに画像をコピーしないように設定します。

Javascript
コードのコピー
<script>
    $(document).ready(function () {
        // Spreadを初期化します。
        var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
        // アクティブシートを取得します。
        var activeSheet = spread.getActiveSheet();

        // allowCopyPasteExcelStyleをtrueに設定します。
        spread.options.allowCopyPasteExcelStyle = true;

        // 画像を追加します。
        activeSheet.pictures.add("f2", "Capture.PNG", 100, 60, 200, 100);

        // このコードは、ExcelからSpreadJSへの画像のコピーを防ぎます。
        spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, (e, args) => {
            if ((args.pasteData && args.pasteData.image)) {
                args.cancel = true;
            }
        });
    });
</script>

ワークシート内のコピーと貼り付け

例えば、ワークシート内に画像、チャート、図形などの複数のオブジェクトがあり、画像を除いてすべてのフローティングオブジェクトをコピーして同じワークシート内に貼り付けたいとします。クリップボードイベントの「objects」パラメータを使用して、テキスト、セルのデータ、画像、カスタムフローティングオブジェクト、スライサー、チャート、および図形をコピーと貼り付けることができます。

以下のコードでは、cancelパラメータをtrueに設定することで、特定のワークシートからの画像のコピーを防ぎ(fromSheetパラメータを使用)、誤って切り取り操作をした場合にユーザーに警告する(isCuttingパラメータを使用)方法を示しています。

JavaScript
コードのコピー
// ワークブックとワークシートを構成します。
var spread = new GC.Spread.Sheets.Workbook("ss", { sheetCount: 2 });
var activeSheet = spread.getActiveSheet();
    
// allowCopyPasteExcelStyleをtrueに設定します。
spread.options.allowCopyPasteExcelStyle = true;

// 画像を追加します。
activeSheet.pictures.add("f2", "Capture.PNG", 100, 60, 200, 100);
spread.getSheet(1).pictures.add("f2", "Capture.PNG", 100, 60, 200, 100);

spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, (e, args) => {
    // このコードは、内部フローティング要素のコピーと貼り付けを防ぎます。
    if (args.objects && args.objects.length > 0 && args.fromSheet._id == 1) {
        args.cancel = true;
    } 
    // このコードは、偶発的な切り取り操作を防ぎます。
    else if (args.isCutting == true) {
        if (confirm("You are performing a Cut operation.\nGo ahead?") == true) {
          text = "You pressed OK!";
        } else {
          text = "You canceled!";
          args.cancel = true;
        } 
    }
});