From c2fdd0e20916925404885f626cad988f0515ebfc Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 31 Mar 2025 20:42:21 -0700 Subject: [PATCH 01/16] [Excel] (Range) Add cell control snippet --- .../excel/42-range/range-cell-control.yaml | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 samples/excel/42-range/range-cell-control.yaml diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml new file mode 100644 index 00000000..76d7c900 --- /dev/null +++ b/samples/excel/42-range/range-cell-control.yaml @@ -0,0 +1,120 @@ +order: 23 +id: excel-cell-controls +name: Checkboxes +description: This sample shows how to add and remove checkboxes from a table. +host: EXCEL +api_set: + ExcelApi: '1.18' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); + document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); + + // Add checkboxes to the table. + async function addCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); + } + + // Remove checkboxes from the table. + async function removeCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); + } + + // Set up the sample content. + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const expensesTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + expensesTable.name = "FruitTable"; + + expensesTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["Apple", "TRUE"], + ["Kale", "FALSE"], + ["Orange", "TRUE"], + ["Pear", "TRUE"], + ["Mango", "TRUE"], + ["Dog", "FALSE"], + ["Strawberry", "TRUE"], + ["Chair", "FALSE"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+

This sample creates and table and then shows how to programmatically add and remove checkboxes from that table.

+
+
+

Set up

+ +
+
+

Try it out

+ + +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css From 74f1e20690d4a9c3053db5daf5f663b38a17b70d Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 31 Mar 2025 21:45:55 -0700 Subject: [PATCH 02/16] [Excel] (Notes) Add Notes snippet --- samples/excel/36-notes/excel-note-basics.yaml | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 samples/excel/36-notes/excel-note-basics.yaml diff --git a/samples/excel/36-notes/excel-note-basics.yaml b/samples/excel/36-notes/excel-note-basics.yaml new file mode 100644 index 00000000..77f8e52f --- /dev/null +++ b/samples/excel/36-notes/excel-note-basics.yaml @@ -0,0 +1,156 @@ +order: 1 +id: excel-notes +name: Notes +description: Adds, edits, and removes notes. +host: EXCEL +api_set: + ExcelApi: '1.18' +script: + content: |- + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-note-to-selected-cell").addEventListener("click", () => tryCatch(addNoteToSelectedCell)); + document.getElementById("add-note-to-cell").addEventListener("click", () => tryCatch(addNoteToCell)); + document.getElementById("change-note-visibility").addEventListener("click", () => tryCatch(changeNoteVisibility)); + document.getElementById("edit-note-content").addEventListener("click", () => tryCatch(editNoteContent)); + document.getElementById("edit-note-size").addEventListener("click", () => tryCatch(editNoteSize)); + document.getElementById("delete-note").addEventListener("click", () => tryCatch(deleteNote)); + + async function addNoteToSelectedCell() { + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); + } + + async function addNoteToCell() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + + // Note that an InvalidArgument error is thrown if multiple cells are passed to `notes.add`. + sheet.notes.add("A2", "The second note."); + await context.sync(); + }); + } + + async function changeNoteVisibility() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); + } + + async function editNoteContent() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); + } + + async function editNoteSize() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); + } + + async function deleteNote() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItem("A2"); + note.delete(); + + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Notes").delete(); + const sheet = context.workbook.worksheets.add("Notes"); + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + + language: typescript +template: + content: |- +
+

This sample shows how to work with notes: add notes, edit content, size, and visibility, and remove notes.

+
+
+

Setup

+ +
+
+

Try it out

+ +

+ +

+ +

+ +

+ +

+ +

+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + + https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file From 684c2a1573ff208f63abb48d9dca03ef4b0089d9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 10:15:10 -0700 Subject: [PATCH 03/16] Refactor, move Notes sample to Comments folder --- .../{12-comment => 12-comments-and-notes}/comment-basics.yaml | 0 .../{12-comment => 12-comments-and-notes}/comment-mentions.yaml | 0 .../{12-comment => 12-comments-and-notes}/comment-replies.yaml | 0 .../comment-resolution.yaml | 0 .../{36-notes => 12-comments-and-notes}/excel-note-basics.yaml | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-basics.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-mentions.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-replies.yaml (100%) rename samples/excel/{12-comment => 12-comments-and-notes}/comment-resolution.yaml (100%) rename samples/excel/{36-notes => 12-comments-and-notes}/excel-note-basics.yaml (99%) diff --git a/samples/excel/12-comment/comment-basics.yaml b/samples/excel/12-comments-and-notes/comment-basics.yaml similarity index 100% rename from samples/excel/12-comment/comment-basics.yaml rename to samples/excel/12-comments-and-notes/comment-basics.yaml diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comments-and-notes/comment-mentions.yaml similarity index 100% rename from samples/excel/12-comment/comment-mentions.yaml rename to samples/excel/12-comments-and-notes/comment-mentions.yaml diff --git a/samples/excel/12-comment/comment-replies.yaml b/samples/excel/12-comments-and-notes/comment-replies.yaml similarity index 100% rename from samples/excel/12-comment/comment-replies.yaml rename to samples/excel/12-comments-and-notes/comment-replies.yaml diff --git a/samples/excel/12-comment/comment-resolution.yaml b/samples/excel/12-comments-and-notes/comment-resolution.yaml similarity index 100% rename from samples/excel/12-comment/comment-resolution.yaml rename to samples/excel/12-comments-and-notes/comment-resolution.yaml diff --git a/samples/excel/36-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml similarity index 99% rename from samples/excel/36-notes/excel-note-basics.yaml rename to samples/excel/12-comments-and-notes/excel-note-basics.yaml index 77f8e52f..1d113782 100644 --- a/samples/excel/36-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 5 id: excel-notes name: Notes description: Adds, edits, and removes notes. From 92883f67282a4372e379bd702fd70c873da8179e Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 16:03:57 -0700 Subject: [PATCH 04/16] Add comments to note snippet --- .../excel-note-basics.yaml | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/samples/excel/12-comments-and-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml index 1d113782..009f9e88 100644 --- a/samples/excel/12-comments-and-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -16,6 +16,7 @@ script: document.getElementById("delete-note").addEventListener("click", () => tryCatch(deleteNote)); async function addNoteToSelectedCell() { + // This function adds a note to the selected cell. await Excel.run(async (context) => { const selectedRange = context.workbook.getSelectedRange(); @@ -26,6 +27,7 @@ script: } async function addNoteToCell() { + // This function adds a note to cell A2. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Notes"); @@ -36,6 +38,7 @@ script: } async function changeNoteVisibility() { + // This function sets the note on cell A1 to visible. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Notes"); const firstNote = sheet.notes.getItem("A1"); @@ -48,6 +51,7 @@ script: } async function editNoteContent() { + // This function changes the content in the first note. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Notes"); const note = sheet.notes.getItemAt(0); @@ -57,6 +61,7 @@ script: } async function editNoteSize() { + // This function changes the height and width of the first note. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Notes"); const note = sheet.notes.getItemAt(0); @@ -67,6 +72,7 @@ script: } async function deleteNote() { + // This function deletes the note from cell A2. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Notes"); const note = sheet.notes.getItem("A2"); @@ -76,6 +82,7 @@ script: }); } + /** Set up Sample worksheet. */ async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Notes").delete(); @@ -100,39 +107,39 @@ script: template: content: |-
-

This sample shows how to work with notes: add notes, edit content, size, and visibility, and remove notes.

+

This sample shows how to work with notes: Add notes, edit content, size, and visibility, and remove notes.

Setup

+ Create a worksheet +

Try it out

+ Add a note to selected cell +

+ Add a note to cell A2 +

+ Make first note visible +

+ Edit content of first note +

+ Edit size of first note +

+ Remove note at A2 +

language: html style: From f479f8a5151aeee355fe8a988070958916ac8aac Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 16:04:11 -0700 Subject: [PATCH 05/16] Add new snippets to excel.xlsx --- snippet-extractor-metadata/excel.xlsx | Bin 28252 -> 28642 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 0daeeb2d254f73ce314a6906e19ff6d3f47aba49..987c52df3c142c0d1753ef574eb79c4950f0732e 100644 GIT binary patch delta 18451 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

DJs&k?j!+mqUso`TO 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 P0|0#J9_ZWP?>T=1WsBNk delta 18049 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 Date: Tue, 1 Apr 2025 16:42:22 -0700 Subject: [PATCH 06/16] Run yarn start --- playlists-prod/excel.yaml | 34 ++- playlists/excel.yaml | 34 ++- .../excel-note-basics.yaml | 261 +++++++++--------- .../excel/42-range/range-cell-control.yaml | 140 +++++----- snippet-extractor-output/snippets.yaml | 217 ++++++++++++++- view-prod/excel.json | 10 +- view/excel.json | 10 +- 7 files changed, 471 insertions(+), 235 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 9a3f0428..3b67eee0 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -173,8 +173,8 @@ fileName: comment-basics.yaml description: 'Adds, edits, and removes comments.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-mentions @@ -182,8 +182,8 @@ fileName: comment-mentions.yaml description: Mentions someone in a comment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml + group: Comments And Notes api_set: ExcelApi: '1.11' - id: excel-comment-replies @@ -191,8 +191,8 @@ fileName: comment-replies.yaml description: 'Adds, edits, and removes comment replies.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-resolution @@ -200,10 +200,19 @@ fileName: comment-resolution.yaml description: Resolves and reopens a comment thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' +- id: excel-note-basics + name: Notes + fileName: excel-note-basics.yaml + description: 'Adds, edits, and removes notes.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + group: Comments And Notes + api_set: + ExcelApi: '1.18' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -896,6 +905,15 @@ group: Range api_set: ExcelAPI: '1.15' +- id: excel-cell-controls + name: Checkboxes + fileName: range-cell-control.yaml + description: This sample shows how to add and remove checkboxes from a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + group: Range + api_set: + ExcelApi: '1.18' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index b10fa440..2a8b5c90 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -173,8 +173,8 @@ fileName: comment-basics.yaml description: 'Adds, edits, and removes comments.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-basics.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-mentions @@ -182,8 +182,8 @@ fileName: comment-mentions.yaml description: Mentions someone in a comment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-mentions.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml + group: Comments And Notes api_set: ExcelApi: '1.11' - id: excel-comment-replies @@ -191,8 +191,8 @@ fileName: comment-replies.yaml description: 'Adds, edits, and removes comment replies.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-replies.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' - id: excel-comment-resolution @@ -200,10 +200,19 @@ fileName: comment-resolution.yaml description: Resolves and reopens a comment thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-resolution.yaml - group: Comment + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-resolution.yaml + group: Comments And Notes api_set: ExcelApi: '1.10' +- id: excel-note-basics + name: Notes + fileName: excel-note-basics.yaml + description: 'Adds, edits, and removes notes.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml + group: Comments And Notes + api_set: + ExcelApi: '1.18' - id: excel-range-conditional-formatting-basic name: Basic conditional formatting fileName: conditional-formatting-basic.yaml @@ -896,6 +905,15 @@ group: Range api_set: ExcelAPI: '1.15' +- id: excel-cell-controls + name: Checkboxes + fileName: range-cell-control.yaml + description: This sample shows how to add and remove checkboxes from a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-cell-control.yaml + group: Range + api_set: + ExcelApi: '1.18' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml diff --git a/samples/excel/12-comments-and-notes/excel-note-basics.yaml b/samples/excel/12-comments-and-notes/excel-note-basics.yaml index 009f9e88..d8a65e18 100644 --- a/samples/excel/12-comments-and-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -1,146 +1,145 @@ order: 5 -id: excel-notes +id: excel-note-basics name: Notes -description: Adds, edits, and removes notes. +description: 'Adds, edits, and removes notes.' host: EXCEL api_set: ExcelApi: '1.18' script: content: |- - document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - document.getElementById("add-note-to-selected-cell").addEventListener("click", () => tryCatch(addNoteToSelectedCell)); - document.getElementById("add-note-to-cell").addEventListener("click", () => tryCatch(addNoteToCell)); - document.getElementById("change-note-visibility").addEventListener("click", () => tryCatch(changeNoteVisibility)); - document.getElementById("edit-note-content").addEventListener("click", () => tryCatch(editNoteContent)); - document.getElementById("edit-note-size").addEventListener("click", () => tryCatch(editNoteSize)); - document.getElementById("delete-note").addEventListener("click", () => tryCatch(deleteNote)); - - async function addNoteToSelectedCell() { - // This function adds a note to the selected cell. - await Excel.run(async (context) => { - const selectedRange = context.workbook.getSelectedRange(); - - // Note that an InvalidArgument error is thrown if multiple cells are selected. - context.workbook.notes.add(selectedRange, "The first note."); - await context.sync(); - }); - } - - async function addNoteToCell() { - // This function adds a note to cell A2. - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Notes"); - - // Note that an InvalidArgument error is thrown if multiple cells are passed to `notes.add`. - sheet.notes.add("A2", "The second note."); - await context.sync(); - }); - } - - async function changeNoteVisibility() { - // This function sets the note on cell A1 to visible. - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Notes"); - const firstNote = sheet.notes.getItem("A1"); - - firstNote.load(); - await context.sync(); - - firstNote.visible = true; - }); - } - - async function editNoteContent() { - // This function changes the content in the first note. - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Notes"); - const note = sheet.notes.getItemAt(0); - note.content = "Changing the content of the first note."; - await context.sync(); - }); - } - - async function editNoteSize() { - // This function changes the height and width of the first note. - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Notes"); - const note = sheet.notes.getItemAt(0); - note.height = 200; - note.width = 400; - await context.sync(); - }); - } - - async function deleteNote() { - // This function deletes the note from cell A2. - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Notes"); - const note = sheet.notes.getItem("A2"); - note.delete(); - - await context.sync(); - }); - } - - /** Set up Sample worksheet. */ - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Notes").delete(); - const sheet = context.workbook.worksheets.add("Notes"); - - sheet.activate(); - await context.sync(); - }); - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-note-to-selected-cell").addEventListener("click", () => tryCatch(addNoteToSelectedCell)); + document.getElementById("add-note-to-cell").addEventListener("click", () => tryCatch(addNoteToCell)); + document.getElementById("change-note-visibility").addEventListener("click", () => tryCatch(changeNoteVisibility)); + document.getElementById("edit-note-content").addEventListener("click", () => tryCatch(editNoteContent)); + document.getElementById("edit-note-size").addEventListener("click", () => tryCatch(editNoteSize)); + document.getElementById("delete-note").addEventListener("click", () => tryCatch(deleteNote)); + + async function addNoteToSelectedCell() { + // This function adds a note to the selected cell. + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); } - } + async function addNoteToCell() { + // This function adds a note to cell A2. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + + // Note that an InvalidArgument error is thrown if multiple cells are passed to `notes.add`. + sheet.notes.add("A2", "The second note."); + await context.sync(); + }); + } + + async function changeNoteVisibility() { + // This function sets the note on cell A1 to visible. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); + } + + async function editNoteContent() { + // This function changes the content in the first note. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); + } + + async function editNoteSize() { + // This function changes the height and width of the first note. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); + } + + async function deleteNote() { + // This function deletes the note from cell A2. + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItem("A2"); + note.delete(); + + await context.sync(); + }); + } + + /** Set up Sample worksheet. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Notes").delete(); + const sheet = context.workbook.worksheets.add("Notes"); + + sheet.activate(); + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } language: typescript template: content: |- -

-

This sample shows how to work with notes: Add notes, edit content, size, and visibility, and remove notes.

-
-
-

Setup

- -
-
-

Try it out

- -

- -

- -

- -

- -

- -

+
+

This sample shows how to work with notes: Add notes, edit content, size, and visibility, and remove notes.

+
+
+

Setup

+ +
+
+

Try it out

+ +

+ +

+ +

+ +

+ +

+ +

language: html style: content: |- diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 76d7c900..ad808af7 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -7,76 +7,76 @@ api_set: ExcelApi: '1.18' script: content: |- - document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); - document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); - - // Add checkboxes to the table. - async function addCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); - - range.control = { - type: Excel.CellControlType.checkbox - }; - await context.sync(); - }); - } - - // Remove checkboxes from the table. - async function removeCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); - - range.control = { - type: Excel.CellControlType.empty - }; - await context.sync(); - }); - } - - // Set up the sample content. - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - const expensesTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); - expensesTable.name = "FruitTable"; - - expensesTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; - - expensesTable.rows.add(null /*add at the end*/, [ - ["Apple", "TRUE"], - ["Kale", "FALSE"], - ["Orange", "TRUE"], - ["Pear", "TRUE"], - ["Mango", "TRUE"], - ["Dog", "FALSE"], - ["Strawberry", "TRUE"], - ["Chair", "FALSE"] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - sheet.activate(); - - await context.sync(); - }); - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); + document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); + + // Add checkboxes to the table. + async function addCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); + } + + // Remove checkboxes from the table. + async function removeCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); + } + + // Set up the sample content. + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const expensesTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + expensesTable.name = "FruitTable"; + + expensesTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["Apple", "TRUE"], + ["Kale", "FALSE"], + ["Orange", "TRUE"], + ["Pear", "TRUE"], + ["Mango", "TRUE"], + ["Dog", "FALSE"], + ["Strawberry", "TRUE"], + ["Chair", "FALSE"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + sheet.activate(); + + await context.sync(); + }); } - } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } language: typescript template: content: |- @@ -117,4 +117,4 @@ libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts https://unpkg.com/office-ui-fabric-core@11.1.0/dist/css/fabric.min.css - https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css + https://unpkg.com/office-ui-fabric-js@1.5.0/dist/css/fabric.components.min.css \ No newline at end of file diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0ce86d48..ac775294 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -445,6 +445,21 @@ context.application.calculate(Excel.CalculationType.recalculate); await context.sync(); }); +'Excel.CellControl:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); 'Excel.CellPropertiesFill#color:member': - >- // Link to full sample: @@ -1669,6 +1684,21 @@ chart.dataLabels.format.font.color = "black"; chart.title.text = "Bicycle Parts Quarterly Sales"; + await context.sync(); + }); +'Excel.CheckboxCellControl:interface': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.checkbox + }; await context.sync(); }); 'Excel.ClearApplyTo:enum': @@ -1732,7 +1762,7 @@ 'Excel.Comment#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1744,7 +1774,7 @@ 'Excel.Comment#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1754,7 +1784,7 @@ 'Excel.Comment#load:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1768,7 +1798,7 @@ 'Excel.Comment#resolved:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml await Excel.run(async (context) => { @@ -1779,7 +1809,7 @@ 'Excel.CommentCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml await Excel.run(async (context) => { @@ -1907,7 +1937,7 @@ 'Excel.CommentReply#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1925,7 +1955,7 @@ 'Excel.CommentReply#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1938,7 +1968,7 @@ 'Excel.CommentReplyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml await Excel.run(async (context) => { @@ -1951,7 +1981,7 @@ 'Excel.CommentRichContent#mentions:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml await Excel.run(async (context) => { @@ -2688,7 +2718,7 @@ 'Excel.ContentType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml await Excel.run(async (context) => { @@ -4145,6 +4175,158 @@ await context.sync(); }); +'Excel.Note:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#content:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the content in the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); +'Excel.Note#height:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#visible:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function sets the note on cell A1 to visible. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); +'Excel.Note#width:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the height and width of the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.height = 200; + note.width = 400; + await context.sync(); + }); +'Excel.Note#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function deletes the note from cell A2. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItem("A2"); + note.delete(); + + await context.sync(); + }); +'Excel.NoteCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function adds a note to the selected cell. + + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); +'Excel.NoteCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function adds a note to the selected cell. + + await Excel.run(async (context) => { + const selectedRange = context.workbook.getSelectedRange(); + + // Note that an InvalidArgument error is thrown if multiple cells are selected. + context.workbook.notes.add(selectedRange, "The first note."); + await context.sync(); + }); +'Excel.NoteCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function sets the note on cell A1 to visible. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const firstNote = sheet.notes.getItem("A1"); + + firstNote.load(); + await context.sync(); + + firstNote.visible = true; + }); +'Excel.NoteCollection#getItemAt:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml + + + // This function changes the content in the first note. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Notes"); + const note = sheet.notes.getItemAt(0); + note.content = "Changing the content of the first note."; + await context.sync(); + }); 'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- // Link to full sample: @@ -4920,6 +5102,21 @@ sheet.getRange("G2").copyFrom("A1:E1", Excel.RangeCopyType.formulas); await context.sync(); }); +'Excel.Range#control:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + let range = sheet.getRange("B2:B9"); + + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); 'Excel.Range#find:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 3ff4c77a..b267d8b8 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -17,10 +17,11 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comment/comment-resolution.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-basics.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-mentions.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/comment-resolution.yaml", + "excel-note-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/12-comments-and-notes/excel-note-basics.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/basic-function.yaml", @@ -92,6 +93,7 @@ "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml", + "excel-cell-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml", "excel-shape-images": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml", "excel-shape-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml", diff --git a/view/excel.json b/view/excel.json index 7f9d59ff..c805307d 100644 --- a/view/excel.json +++ b/view/excel.json @@ -17,10 +17,11 @@ "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-title-format.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml", "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-resolution.yaml", + "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-basics.yaml", + "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-mentions.yaml", + "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-replies.yaml", + "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/comment-resolution.yaml", + "excel-note-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comments-and-notes/excel-note-basics.yaml", "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", "excel-custom-functions-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/basic-function.yaml", @@ -92,6 +93,7 @@ "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-get-range-edge.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-direct-dependents.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-dependents.yaml", + "excel-cell-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-cell-control.yaml", "excel-shape-create-and-delete": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-create-and-delete.yaml", "excel-shape-images": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-images.yaml", "excel-shape-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-lines.yaml", From 307117ce7ec0e7eda72ddf08eb8d849a7e278dde Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 16:54:59 -0700 Subject: [PATCH 07/16] Incorporate code review feedback --- samples/excel/42-range/range-cell-control.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index ad808af7..8274ec34 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -15,7 +15,7 @@ script: async function addCheckboxes() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); + let range = sheet.getRange("FruitTable"); range.control = { type: Excel.CellControlType.checkbox @@ -43,12 +43,12 @@ script: context.workbook.worksheets.getItemOrNullObject("Sample").delete(); const sheet = context.workbook.worksheets.add("Sample"); - const expensesTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); - expensesTable.name = "FruitTable"; + const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + fruitTable.name = "FruitTable"; - expensesTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; - expensesTable.rows.add(null /*add at the end*/, [ + fruitTable.rows.add(null /*add at the end*/, [ ["Apple", "TRUE"], ["Kale", "FALSE"], ["Orange", "TRUE"], @@ -76,7 +76,8 @@ script: // Note: In a production add-in, you'd want to notify the user through your add-in's UI. console.error(error); } - } + } + language: typescript template: content: |- From 5b9bfa410159c045c9a9fc75b4446eeabd173dd3 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 16:55:33 -0700 Subject: [PATCH 08/16] Re-run yarn start --- samples/excel/42-range/range-cell-control.yaml | 1 - snippet-extractor-output/snippets.yaml | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 8274ec34..ff07a7fd 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -77,7 +77,6 @@ script: console.error(error); } } - language: typescript template: content: |- diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ac775294..656d28bd 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -453,7 +453,7 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); + let range = sheet.getRange("FruitTable"); range.control = { type: Excel.CellControlType.checkbox @@ -1694,7 +1694,7 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); + let range = sheet.getRange("FruitTable"); range.control = { type: Excel.CellControlType.checkbox @@ -5110,7 +5110,7 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); + let range = sheet.getRange("FruitTable"); range.control = { type: Excel.CellControlType.checkbox From 27293baa6c60a278226bce9b568bd6ca3a98892d Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 1 Apr 2025 17:12:22 -0700 Subject: [PATCH 09/16] fix typo in excel.xlsx --- snippet-extractor-metadata/excel.xlsx | Bin 28642 -> 28645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 987c52df3c142c0d1753ef574eb79c4950f0732e..cd39f931285aaf3a55d31d04b17c23949ee6be30 100644 GIT binary patch delta 1539 zcmV+e2K@Qr-vQ;{0kE0}1+FgcR}7P%2ONK0Z<{a_eV?@dfc#Fe0rRD%QwTw;v`*F9 zwU3nxrm+eb8PlYy_TP6+Lb9&Y6m>(v#`oIC=iGbkoPOFgwe`eRFJwDIR!x;Gj02}(qD5PTL>+@6t4b6+lf}^RR&PNRubBq={YrHG zgw_K*{TtR zlD(|-2|znr(r@$=>=5!Q1e>=pI1YcwcNBjTCWm`gDtITWV2>3XzzF_lGyrO>>bp%8|0&0iVR(4~W@!Ar2`5#*fh z%lT4S0IRvWRN{#h&oBj9C9l{}>uV_OX+y9FLF`hqcB7Ih{Fho;@O_?r0SbRt>~dGH=VnLmt}RqT?p}i2#hDi^>>%_rdmj0zJr60dLqelPOmpIs;0MG^1xX>AI z64P)#AK5s+&>8Ozpf&bZJLdbU6ZrBRAK6Udz8CYsnz)4;cBmU}cL*-H_BH7sTGi&tig38U8vYPxI8^J3;_NgO6ojJfwOzsdb4;G3=W zh^wxV=hblqn&HjDlkj6}fXM~};;$#T{fEGdK@V=+_wmMlnvTQNqD#h9qEy=qy%wu* zfdcE860E8fWatPME%V!(lxxas1J9<`U|b0{@FZm^*BRP5rzysk??5sed57}irZ$o} zUw@h{){K9%E#M@M@2~{N1al0xz)%lFbV3R~Aobo<9YAml6-ZFdViFPj=XGGDy?UWj zMow9}qxLhM;*QyZ_u}9_*m5v7O%pYfE{4xf@ca7dr5iOYRl6$=C{G2acK`VW+~p}A z7yir*Fjt#i7z)49idnbz%iokB?vGx-(nk}#o1=$-2z)Zy&v91XCJ&Fr3gt;m<{=?r zGA)t`P3CmA_-M0S+;5Zi4S9O_Ut%%~<7pTtMI2K?=yX0Jo&kOC%iodz0+Rs*6tfd$ zU70bP?@Zd3v5ldx_<0$^d2dtn=s4sQ?}YPtW)P5}S_Y61WN p5dZ)H0000000000004uNId47z2$OhkJps*=wr?f|>}mi2001-O(?b9N delta 1508 zcmVexJ1efc#Fe0h555P9X%X(mGXZ z*FIJ*n8qq#WK5H)+JE2K3CX%nQ`8Lw8{gTVzwhqsoPOFgwe!SPFJwDInI7B0GQH zf~S(IVH$?&!RtH4S=p~R*G=vD7)M^iM2ofvi8=;DR+T7tCX1ort=@ttUNa5!`<3YW z5v?hXfoqt096Gm=E)R1e>=pI1Ya)^b~&*CWm`gDtafYXpa>gzzF_lGyuV_OaYL|2QS4K*cB7Ip{Fhoe@O_?r0SbRt>~dGH=Vr&?t}RqT?p`nna1_s%ZX7IpH_yV@jeR_K^JogRd=jNm_5)(3qNI>)(5szR z13g0_2z%qYV4KlHa59MUK;s4P9@q50HKXr`kz-Evjo|D45EV0YHn*ZJ<=QHG9=|CD zeQWEu6{TLyP!L21+h;BwR=|Ij#QxOeU-^dB481H;N@JQ$+%SxNHw3>sCkx{GbQ+{{ z64S|iZrOOh(6M(1(6YVL+I(NNqU*SZgKw=S#BelKVs=sIrA@9kE-YAGK!#0ca}g8l z$3`>X=r6sty)!5Q1WAbJ6C8&wUIx?+r$BHT2EMxpGk-}Z%WRoalO2C^`z8P54uCo$ zG#Rf|!*a!xzE-Swgv%{MZ^`vcZ7(>j`fEA@E|*gB$mKys@9A<1n@860}+Or^a>~k7Y=z zN1Y(pTMmM4(L>_Qj|Rvv8^Uof#BmT#E)rsHE+USD5QD!FDeVO~_5xe>3;j)dF^;`B zN&VzpfVU}uJMn)2vyu=0QUw~(TbxX@mSQIXe^0_N6oubS{0~dtx3&X>G}}nj@Fa#eWy})$snzlIj_jVghNQiH}_ndw`_omr=ud3(=tSf7sBbpEtfflta^(IHJt3^CR zk@H+jUey|MbO49u#qCWd3=_45XImSvz62Kql6Fj(9BsWf3}Yv@ptwtdLkDqPTg81S zf9(bvF24B&a7xG>R^Ykhp5qo6n}LXqNGS%S+1aWCNP(dO1=>4I6N>-59;|X#FLcV8 zQiF=##B>sqaZG4SBq<~0jCca{xi5c5@e7jy1QfFtWncyc zclhEE3zK_mQUS!1&TB0M4<)y+lmBZL0r!&@Y()WllU!^-0SS|xY&rq(lh|xQ0iBZ? zZA$^llV)vC0y|riSX(8N+-)iWRg(v9Rsmd-UT#zY>XWl>K>}Z4lYC(tD^N=T0xbX( z00saE0000X02 Date: Tue, 1 Apr 2025 17:13:13 -0700 Subject: [PATCH 10/16] whitespace change in excel.xlsx --- snippet-extractor-metadata/excel.xlsx | Bin 28645 -> 28645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index cd39f931285aaf3a55d31d04b17c23949ee6be30..ddf8a2dbdbc20c9488e5d40cc4a0c127596f08f1 100644 GIT binary patch delta 1516 zcmV2#*>~09e+`8n=lZ5pS1sg{7%7ufuN>SfJCdbR@K_I zkCh9iu?iR&(aNcPNi4)?5N_(4|T9xFV6VfUZWFqD?5l>~zK zK{T@G=ApCGir4IRTe=qQx=Y&VOx4J$X|LubSFD_(2!>+C-WcT2r30_Qi(TKx$T{1W z^Odv!Rxx=c`7!6o0PiGY|sV z<*r`O^^X31TgU|8zu+v3<2;|+SsFxkI1d7QhG&tzh+{v@!e|y|_!VL%!=w;&P|KZG z4LwBx2z%$cpzG0t-DKe9fyRrwdu-kR){MSaEk~c~Th3PfAu4)kt?zhSij`5c8NZ1O z`c}qq$4j-GBHs@Wwy%soE`Nb7o_Mj&zw|V#DSF9LLM9}S>>!wUb^v}5pJCf0v7gTH zghaEMVdMNl$J`x2%k)-j@_pU%u44)gzOm{M!_kz9-bJ35Cb`bIu%LAT8P=W2#RR+F zL~CYi^{rQ?w+6|9AP(GFl4HEtefV3GWx?Sw7dt@xM{DoeiS=ICr!|83$msIS?PlNYx~ zPRuSZZZ7m(=Z^v$6AED6nzC@lw4D6}lK})2v(pMQ0tC4=ksOl>4O;@<aOT4k~{G0KI_M{dy?*iR8Cu>$ z1Iz$MiHP?krMPF*9$u7STc77&ZA&)&s%_&^$_I=4jKUBjceDlXc;8_&IFgaw7pTn= z8dMe0WI{a341a_>+?bP68Y6|>;jW6orCP}+XkD%@CF{ac|KEIqoUp5Ciba3Yznxb% zL8HOh>C5NA_1aynJLQ#B!%{ZCcxASjFnX<^rn|;GFJ^w0#97o7{f_zS&xj zxat~tUL9AU8Qv_cgdbZ2Og0!0e?7tNKLlP3dT`^uk2m(ybR4D@U4l02zG`fzu`EMU zJ?aF(-f|Fh+(Y8bj|Rva!f`Dx#BmT#E)rsHE+USD5QD!FDeVO~_5yqC7y6s_VjO#M zlKRQ{0N$nquHydyvyu=0QUt*YD|oY&Vl@GO-P{Om2P%7VAUIKci^<(qZPJircKi3H z?N&P&zUAI?^5xu1vc*AG!4DW))+$FNictWH*P>M09KEiW;T#3lF(p`4E6C9iELs$| zHyPKI*9M+Vt--hwY~V@CQm%8fb52u?E#HA;Hu4VT#Z7G_bG|fNtQr4iTfj*i-(d-V zjtS-%Zh@g5i0FhAd_d~GsXBn*7%GsUoW&#}_|NOWNPG1{r;MDkbVu!HI>jBc1@Fbd zeX!+VY?>x&(k_P2Pw@Nd>7^SrELFQJ4yeckr*{AO1>6-G9vA-14KP=mUKk3$(TZ8O z^2^_pAnuP|ztR)Do1=$-2z)Zy&v8~d-qMH1^%50HOlBb=VKP}KDNSZ{I{#?1T-P@_+Mf&4dY1|C+j$-B%vu85zl}=_vP;>egTsK1QfFtWncybe$@ZQlX`1`1i3Yl S9JBvxA_D}$3M+V%C2zn=Bk}eC delta 1516 zcmV^LA9e;1Z zQ%Th@4MX+d^qu0Y>{p!YrgmJ61E*o4MO%bK9fKjON)$Yk#nA9pZ$T8VnFjj(N_72% z))dFUHB3DYon6SL1BiQ33;jHTBC9Eq^M_U{c3*?+4WZUX!7qT9U})TFCvd&lsu6{f zy{z;JKs#H~Z}b!F5b`Pno3}AI4u8pa6n_#XhkI5kcqgl1j};ui2>xd@0;M(9N&>-q zCmP*zbJ5vpC2D@NEnSOs-B;F_Ox4J$S+AF+(7c?X5QcKiUm4WUrGu!!OR(n=xQYbfn$L$C)y>{7FKqmn87ms(lyeV%;*3V&DZ2?&Ag za#yeCW=HR?EmT78UV_}knHMeWAoMeP9{H&~4=J%jLZd}YbK;ZW2gFPTNg>&wS39i+ zdWL)u_QrL=Hj{_oWDw&bVg$1h%$gt_gT*L&s zvC+&o`b)3J-Wrqug2c!35XZiammanK2na^L=h_QDbC)z+X3LbC?0=ZsFZmyL0Mrqo z$#kt6mMf<8wPM91T*lvcm9ienX)6f${z^8bQHnhi$eiRRn%GX$z_)3Zdo(23VoCD@ zStGxC=Lw9QaW!XpQ1Dj(q{ne$+I(l-8>_8hm#J4*S@JC#kIr`W-zHvx`kEg(Ilnn_ z;^OPY^@W-1{84~21`61;V_7&;TF!m~lK})2v(pMQ0tA{V_(zip4O;?UpOa?|!W0F3 zM#b+-DVm&F@iQ!WCoDa~>~WJl4k~}Fuyy4rsB=<8^K~-KNN}}q9rTmKUcY$u3@z`W z0cHTBM8tcNQrt6Yix(x>*5~O!$-1!A|2Ll?C+sSk&QO2;+j(^p zG#Z?pzI+~Buie$UQ(j3mEM@bHS7wU|qt^;*x@*kyV&-Q_941kWx%V%>$^9qbo2~VT ztFDpf)o}%y;myL6@MCL$$p!=BuP3FWVOVDQBpBmd~JeDD; z9(96XZ#f9IMGuKHKN=u!2*)kG5XV6{xk!k)xrjIpLJa;!q_h{{*b8jgFZ4I<#W?oj zB=wVX0p6wr?!^BAvyu=0QUq$b|H`wKVl@GO+uR6k2P%7VAXrg+i^<(qZPJircKi3H z?N&P&zUAI?^5xu1(&a%`!4DW))+$3JictWH*P>M0480bsaDf8rm=dh26=diL7A^DJ zo0MzHYXi@w)?i!-Ht-~6Dc2d=Ij1ScmhV6^8+nKF;-)r|IbWJB){K9%E#M@M@2~`a z#{_c>x4=*jM07$5J|OkpR2@KY3>8RF&SDY~{O5IGq`i8fQ$|i%x})|po#Kw!g7@O! zKG7^SrELFQJ4k%9rr*{AO1>EH+9vA-14KP=mUKk3$(TZ8O z_RHUtAnuP|ztR)Do1=$-2z)Zy&v8~d-X;%^#R}y~Oy(gWVKOa}2~Fm7w)kkXT-P@_+Mf&3*%`RCq*1nLg;ipBAx+#?#thi{{oW%1QfFtWncybt}gCZlX`1`1ez)M SN3;KHA_D|!x&O+OC2zovyz0;Z From 79f02f18c142605c74ec7280ce8d4f9d8588d432 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 2 Apr 2025 17:21:05 -0700 Subject: [PATCH 11/16] Add new functionality to checkbox snippet --- .../excel/42-range/range-cell-control.yaml | 200 +++++++++++------- 1 file changed, 122 insertions(+), 78 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index ff07a7fd..324683f6 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -7,97 +7,141 @@ api_set: ExcelApi: '1.18' script: content: |- - document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); - document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); - - // Add checkboxes to the table. - async function addCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("FruitTable"); - - range.control = { - type: Excel.CellControlType.checkbox - }; - await context.sync(); - }); - } + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); + document.getElementById("change-checkbox").addEventListener("click", () => tryCatch(changeCheckbox)); + document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); + document.getElementById("remove-content").addEventListener("click", () => tryCatch(removeContent)); - // Remove checkboxes from the table. - async function removeCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("B2:B9"); - - range.control = { - type: Excel.CellControlType.empty - }; - await context.sync(); - }); - } + // Add checkboxes to the table. + async function addCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Set up the sample content. - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); - const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); - fruitTable.name = "FruitTable"; + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); + } - fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + // Change the value of the checkbox in B3. + async function changeCheckbox() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); - fruitTable.rows.add(null /*add at the end*/, [ - ["Apple", "TRUE"], - ["Kale", "FALSE"], - ["Orange", "TRUE"], - ["Pear", "TRUE"], - ["Mango", "TRUE"], - ["Dog", "FALSE"], - ["Strawberry", "TRUE"], - ["Chair", "FALSE"] - ]); + range.values = [["TRUE"]]; + await context.sync(); + }); + } - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); + // Remove checkboxes from the table. + async function removeCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.activate(); + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); - await context.sync(); - }); - } + // Change the checkboxes back to boolean values. + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); + } + + // Remove all content from the Analysis column. + async function removeContent() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); + } + + // Set up the sample content. + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); - } + const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + fruitTable.name = "FruitTable"; + + fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + + fruitTable.rows.add(null /*add at the end*/, [ + ["Apple", "TRUE"], + ["Kale", "FALSE"], + ["Orange", "TRUE"], + ["Pear", "TRUE"], + ["Mango", "TRUE"], + ["Dog", "FALSE"], + ["Strawberry", "TRUE"], + ["Chair", "FALSE"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); } + } + language: typescript template: content: |- -
-

This sample creates and table and then shows how to programmatically add and remove checkboxes from that table.

-
-
-

Set up

- -
-
-

Try it out

- - -
+
+

This sample creates and table and then shows how to add, remove, and change checkboxes in the table. +

+
+
+

Set up

+ +
+
+

Try it out

+ +
+ +
+ +
+ +
language: html style: content: |- From 907162804b44cbcdbb02ff904296f4992c8b9ad2 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 2 Apr 2025 17:21:34 -0700 Subject: [PATCH 12/16] Run yarn start --- .../excel/42-range/range-cell-control.yaml | 259 +++++++++--------- snippet-extractor-output/snippets.yaml | 15 +- 2 files changed, 141 insertions(+), 133 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 324683f6..228821c4 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -7,141 +7,140 @@ api_set: ExcelApi: '1.18' script: content: |- - document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); - document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); - document.getElementById("change-checkbox").addEventListener("click", () => tryCatch(changeCheckbox)); - document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); - document.getElementById("remove-content").addEventListener("click", () => tryCatch(removeContent)); - - // Add checkboxes to the table. - async function addCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); - - // Change the boolean values to checkboxes. - range.control = { - type: Excel.CellControlType.checkbox - }; - await context.sync(); - }); - } - - // Change the value of the checkbox in B3. - async function changeCheckbox() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("B3"); - - range.values = [["TRUE"]]; - await context.sync(); - }); - } - - // Remove checkboxes from the table. - async function removeCheckboxes() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); - - // Change the checkboxes back to boolean values. - range.control = { - type: Excel.CellControlType.empty - }; - await context.sync(); - }); - } - - // Remove all content from the Analysis column. - async function removeContent() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); - - // Clear all the data from the second column. - range.clearOrResetContents(); - await context.sync(); - }); - } - - // Set up the sample content. - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); - fruitTable.name = "FruitTable"; - - fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; - - fruitTable.rows.add(null /*add at the end*/, [ - ["Apple", "TRUE"], - ["Kale", "FALSE"], - ["Orange", "TRUE"], - ["Pear", "TRUE"], - ["Mango", "TRUE"], - ["Dog", "FALSE"], - ["Strawberry", "TRUE"], - ["Chair", "FALSE"] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - sheet.activate(); - - await context.sync(); - }); - } - - /** Default helper for invoking an action and handling errors. */ - async function tryCatch(callback) { - try { - await callback(); - } catch (error) { - // Note: In a production add-in, you'd want to notify the user through your add-in's UI. - console.error(error); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + document.getElementById("add-checkboxes").addEventListener("click", () => tryCatch(addCheckboxes)); + document.getElementById("change-checkbox").addEventListener("click", () => tryCatch(changeCheckbox)); + document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); + document.getElementById("remove-content").addEventListener("click", () => tryCatch(removeContent)); + + // Add checkboxes to the table. + async function addCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); } - } + // Change the value of the checkbox in B3. + async function changeCheckbox() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); + + range.values = [["TRUE"]]; + await context.sync(); + }); + } + + // Remove checkboxes from the table. + async function removeCheckboxes() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the checkboxes back to boolean values. + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); + } + + // Remove all content from the Analysis column. + async function removeContent() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); + } + + // Set up the sample content. + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const fruitTable = sheet.tables.add("A1:B1", true /*hasHeaders*/); + fruitTable.name = "FruitTable"; + + fruitTable.getHeaderRowRange().values = [["Fruit", "Analysis"]]; + + fruitTable.rows.add(null /*add at the end*/, [ + ["Apple", "TRUE"], + ["Kale", "FALSE"], + ["Orange", "TRUE"], + ["Pear", "TRUE"], + ["Mango", "TRUE"], + ["Dog", "FALSE"], + ["Strawberry", "TRUE"], + ["Chair", "FALSE"] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + + sheet.activate(); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } language: typescript template: content: |- -
-

This sample creates and table and then shows how to add, remove, and change checkboxes in the table. -

-
-
-

Set up

- -
-
-

Try it out

- -
- -
- -
- -
+
+

This sample creates and table and then shows how to add, remove, and change checkboxes in the table. +

+
+
+

Set up

+ +
+
+

Try it out

+ +
+ +
+ +
+ +
language: html style: content: |- diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 656d28bd..cc5ff4f8 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -453,8 +453,11 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("FruitTable"); + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. range.control = { type: Excel.CellControlType.checkbox }; @@ -1694,8 +1697,11 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("FruitTable"); + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. range.control = { type: Excel.CellControlType.checkbox }; @@ -5110,8 +5116,11 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - let range = sheet.getRange("FruitTable"); + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. range.control = { type: Excel.CellControlType.checkbox }; From 6b6baaebf57836313ae49abf5a179558043c535a Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 2 Apr 2025 17:52:22 -0700 Subject: [PATCH 13/16] Update excel.xlsx, re-run yarn start --- snippet-extractor-metadata/excel.xlsx | Bin 28645 -> 28795 bytes snippet-extractor-output/snippets.yaml | 47 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index ddf8a2dbdbc20c9488e5d40cc4a0c127596f08f1..15a929d7a02a60be731c62def449c1cfa9c2f811 100644 GIT binary patch delta 16134 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ν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

+5Q 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 a&pHc3BZ0A8gkdIZz^X2E2q*Ucru;v#mI%)P diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index cc5ff4f8..46a4ff2d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5092,6 +5092,22 @@ sumCell.format.autofitColumns(); await context.sync(); }); +'Excel.Range#clearOrResetContents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); 'Excel.Range#copyFrom:member(1)': - >- // Link to full sample: @@ -5207,6 +5223,24 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); +'Excel.Range#getColumn:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); 'Excel.Range#getDependents:member(1)': - >- // Link to full sample: @@ -5875,6 +5909,19 @@ sheet.getRange("A1:R10").ungroup(Excel.GroupOption.byColumns); await context.sync(); }); +'Excel.Range#values:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("B3"); + + range.values = [["TRUE"]]; + await context.sync(); + }); 'Excel.Range#valuesAsJson:member': - >- // Link to full sample: From 5cc493d7f4ae7ed7ef0b8a85c1742f03818438bc Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 2 Apr 2025 18:07:52 -0700 Subject: [PATCH 14/16] Add CellControlType to excel.xlsx, adjust comment locations, run yarn start --- .../excel/42-range/range-cell-control.yaml | 8 ++--- snippet-extractor-metadata/excel.xlsx | Bin 28795 -> 28846 bytes snippet-extractor-output/snippets.yaml | 32 ++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 228821c4..55a56e61 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -13,8 +13,8 @@ script: document.getElementById("remove-checkboxes").addEventListener("click", () => tryCatch(removeCheckboxes)); document.getElementById("remove-content").addEventListener("click", () => tryCatch(removeContent)); - // Add checkboxes to the table. async function addCheckboxes() { + // Add checkboxes to the table. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -29,8 +29,8 @@ script: }); } - // Change the value of the checkbox in B3. async function changeCheckbox() { + // Change the value of the checkbox in B3. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const range = sheet.getRange("B3"); @@ -40,8 +40,8 @@ script: }); } - // Remove checkboxes from the table. async function removeCheckboxes() { + // Remove checkboxes from the table. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -56,8 +56,8 @@ script: }); } - // Remove all content from the Analysis column. async function removeContent() { + // Remove all content from the Analysis column. await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 15a929d7a02a60be731c62def449c1cfa9c2f811..c389920e48abbed318144016e02c8a0684c8159e 100644 GIT binary patch delta 19024 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 U01yb$2W0~`L9!eTH+~EL1D_@p&Hw-a delta 18949 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 B5i { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table. + const range = sheet.getRange("FruitTable").getColumn(1); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.CellControlType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -1695,6 +1717,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + // Add checkboxes to the table. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5098,6 +5122,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + // Remove all content from the Analysis column. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5130,6 +5156,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + // Add checkboxes to the table. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5229,6 +5257,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + // Add checkboxes to the table. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5915,6 +5945,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + // Change the value of the checkbox in B3. + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const range = sheet.getRange("B3"); From 6aba60c663f08d9d20a29a0e9dea6a8c13e3672d Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 3 Apr 2025 11:35:13 -0700 Subject: [PATCH 15/16] Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- samples/excel/42-range/range-cell-control.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 55a56e61..93ac8af8 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -19,7 +19,7 @@ script: const sheet = context.workbook.worksheets.getActiveWorksheet(); // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. range.control = { @@ -89,7 +89,8 @@ script: ["Mango", "TRUE"], ["Dog", "FALSE"], ["Strawberry", "TRUE"], - ["Chair", "FALSE"] + ["Chair", "FALSE"], + ["Tomato", "UNKNOWN"] /* Only boolean values will render as checkboxes. */ ]); sheet.getUsedRange().format.autofitColumns(); From 5050075862b7ca9737e439c595acf66daf7dba45 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 3 Apr 2025 11:55:34 -0700 Subject: [PATCH 16/16] Incorporate code review feedback, re-run yarn start --- .../excel/42-range/range-cell-control.yaml | 10 +- snippet-extractor-metadata/excel.xlsx | Bin 28846 -> 28977 bytes snippet-extractor-output/snippets.yaml | 138 ++++++++++++++---- 3 files changed, 113 insertions(+), 35 deletions(-) diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index 93ac8af8..a207ebd8 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -18,7 +18,7 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. + // Get the second column in the table, without the header. const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. @@ -45,8 +45,8 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the checkboxes back to boolean values. range.control = { @@ -61,8 +61,8 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Clear all the data from the second column. range.clearOrResetContents(); diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index c389920e48abbed318144016e02c8a0684c8159e..5c53016876e55a61f6216acce660344fec2b5531 100644 GIT binary patch delta 18577 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 delta 18438 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 A)vL<51V%e62#M`(`_;LPLgrl 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 87068781..504cc0a9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -456,8 +456,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. range.control = { @@ -476,8 +476,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. range.control = { @@ -1722,8 +1722,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. range.control = { @@ -5127,8 +5127,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Clear all the data from the second column. range.clearOrResetContents(); @@ -5161,8 +5161,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); // Change the boolean values to checkboxes. range.control = { @@ -5251,26 +5251,6 @@ console.log( `Address: ${cellProperties.address}\nStyle: ${cellProperties.style}\nFill Color: ${cellProperties.format.fill.color}\nFont Color: ${cellProperties.format.font.color}`); }); -'Excel.Range#getColumn:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml - - - // Add checkboxes to the table. - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - // Get the second column in the table. - const range = sheet.getRange("FruitTable").getColumn(1); - - // Change the boolean values to checkboxes. - range.control = { - type: Excel.CellControlType.checkbox - }; - await context.sync(); - }); 'Excel.Range#getDependents:member(1)': - >- // Link to full sample: @@ -7192,6 +7172,46 @@ console.log("Worksheet Id : " + worksheet.name); }); } +'Excel.TableCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Remove checkboxes from the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the checkboxes back to boolean values. + range.control = { + type: Excel.CellControlType.empty + }; + await context.sync(); + }); 'Excel.TableCollection#onChanged:member': - >- // Link to full sample: @@ -7205,6 +7225,64 @@ await context.sync(); console.log("A handler has been registered for the table collection onChanged event"); }); +'Excel.TableColumn#getDataBodyRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableColumnCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Add checkboxes to the table. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Change the boolean values to checkboxes. + range.control = { + type: Excel.CellControlType.checkbox + }; + await context.sync(); + }); +'Excel.TableColumnCollection#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-cell-control.yaml + + + // Remove all content from the Analysis column. + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Get the second column in the table, without the header. + const range = sheet.tables.getItem("FruitTable").columns.getItem("Analysis").getDataBodyRange(); + + // Clear all the data from the second column. + range.clearOrResetContents(); + await context.sync(); + }); 'Excel.TableSelectionChangedEventArgs#address:member': - >- // Link to full sample: