[{"id":"7720ca38-fc98-4fd8-a3a5-3c0e730c3c72","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"247ded67-b050-4436-be40-fe7b0eeabef7","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"9a8c377f-1f1e-476e-b487-c2339da9bed3","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"5e8e6db2-89b9-4184-bbdc-301ee676869e","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"e04b598e-b0d8-4054-bdac-5143d90b3d51","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"edb028d0-a8cc-42b2-acda-42a5515729f0","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"2adde444-20a6-43d7-8896-2b445877327a","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"6ab8ced2-6c7a-41b6-b861-ba066bd40f40","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"0c34aedd-80a3-470b-a0f6-c327a4346be7","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"717a5892-fa23-499b-a61d-cff228943aaf","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"bd9be971-69fc-4793-ad6d-234be7a93048","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"a1e8d38f-43d8-4b3e-b747-3fbf7656fcd9","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"d6995fdf-76ee-421f-9e7a-3fb324d14bbb","tags":[{"product":null,"links":null,"id":"2f522515-8c88-4017-855d-905bc4b0ea3c","name":"Upd","color":"Blue","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"64fa3155-4543-4acd-83b7-f9860fd46673","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"698413bd-0b16-4287-baec-644d98a411d1","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]},{"id":"7e4393a0-21ef-438b-981b-325b64db5baa","tags":[{"product":null,"links":null,"id":"6c1a6899-1b88-404c-9a73-4a0c6c9090a3","name":"New","color":"Red","productId":"66a69675-7df9-45b2-867a-4ab2613535fa"}]}]
        
(Showing Draft Content)

クリップボード変更時のイベント

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

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

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

コードの使用

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

<script>
    window.onload = function() {
        // Spreadを初期化します。
        var spread = new GC.Spread.Sheets.Workbook( 'ss', { sheetCount: 1 });

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

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

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

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

使用例

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

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

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

なお、Excel上の画像、チャート、図形などのオブジェクトをコピーした場合は、SpreadJSではすべて画像として処理されます。

次のサンプルコードは、SpreadJS上の画像のみコピーを許可し、Excelなどの外部アプリからSpreadJSに画像をコピーしないように設定します。

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

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

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

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

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

例えば、ワークシート内に画像、チャート、図形などの複数のオブジェクトがあり、画像を除いてすべてのオブジェクトをコピーしてワークシート内に貼り付けたいとします。この場合、クリップボードイベントの「objects」パラメータを使用して、コピーされたオブジェクトが画像かどうかを判断することができます。

以下のコードでは、 特定のワークシートからの画像のコピーを防ぎ( fromSheet パラメータを使用)、誤って切り取り操作をした場合にユーザーに警告する( 現在のアクションのタイプを示すGC.Spread.Sheet.ClipboardActionType列挙体を使用)方法を示しています。

// ワークブックとワークシートを構成します。
var spread = new GC.Spread.Sheets.Workbook("ss", { sheetCount: 2 });
var activeSheet = spread.getActiveSheet();

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

// 画像を追加します。
spread.getSheet(0).pictures.add("f5", " Capture.PNG ", 2, 2, 200, 200);

spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, (e, args) => {
    // このコードは、内部オブジェクトの画像の貼り付けを防ぎます。
    if (args.objects && (args.objects[0] instanceof GC.Spread.Sheets.FloatingObjects.Picture || args.objects[0] instanceof GC.Spread.Sheets.Shapes.PictureShape) && args.fromSheet.name() == "Sheet1") {
        args.cancel = true;
    }
});

spread.bind(GC.Spread.Sheets.Events.ClipboardChanging, (e, args) => {
    // このコードは、偶発的な切り取り操作を防ぎます。
    if (args.action == GC.Spread.Sheets.ClipboardActionType.cut) {
        if (confirm("選択したデータの切り取りを行ってもよろしいですか?") == true) {
            alert("切り取りを実行します。");
        } else {
            alert("切り取りをキャンセルします。");
            args.cancel = true;
        }
    }
});