在office.js中为excel设置条件格式

我需要一种方法来在office.js加载项中设置条件格式。

目前我认为我可以使用VBA来根据插件设置的单元值来设置它,但是直接从office.js中直接执行这个操作是非常好的。

我正在寻找一些创造性的解决方法,直到Microsoft在加载项中本地执行此操作。

根据您的(以及其他许多开发人员的反馈),我们现在宣布在Build 2017上预览Excel API 1.6,其中包括对条件格式的支持。 支持Excel API 1.6的Office 365 Insider将在本月晚些时候推出。

我构build了一个代码片段,向您展示这些API的基础知识,您可以在我们的新脚本实验室( https://aka.ms/getscriptlab )中查看这些代码片段。 只需安装Script Lab加载项,然后在导航菜单中select“导入”,并导入以下要点: https : //gist.github.com/TristanD-MSFT/80920d57bf587bd859ff62afb2b7c673

目前,我们还没有通过Office.js设置条件格式的支持,但是我们会考虑增加对这个API的进一步更新的支持。

感谢Office Extensibility团队的软件工程师Philip

正如菲利普所说,条件格式不可用(从ExcelApi 1.2开始)。 就创造性的解决方法而言,取决于你的范围的大小,你可以做这样的事情。

基本的想法是在期望的范围内创build绑定。 然后添加数据更改侦听器,并在每次发生更改时重新应用格式。

要创build绑定,就像这样做一样简单:

Office.context.document.bindings.addFromPromptAsync(Office.BindingType.Matrix, {id:'MyBinding'}); 

现在来了有趣的部分,事件:

 var binding; Office.context.document.bindings.getByIdAsync('MyBinding', function(result) { if (result.status === "succeeded") { binding = result.value; binding.addHandlerAsync(Office.EventType.BindingDataChanged, formatData); } else { console.log(result.error.message); } }); function formatData() { // First, disable the binding that was previously created, or else // setting formatting will also trigger data changed event. binding.removeHandlerAsync(Office.EventType.BindingDataChanged); Excel.run(function(ctx) { var range = ctx.workbook.bindings.getItem('MyBinding').getRange(); range.load("values"); return ctx.sync().then(function() { for (var row = 0; row < range.values.length; row++) { for (var col = 0; col < range.values[0].length; col++) { var cellValue = range.values[row][col]; var color; if (cellValue < 30) { color = "red"; } else if (cellValue < 65) { color = "orange"; } else { color = "green"; } range.getCell(row, col).format.fill.color = color; } } }) }) .catch(function(error) { console.log(error); }) .then(function() { // Re-enable the event: binding.addHandlerAsync(Office.EventType.BindingDataChanged, formatData); }); } 

希望这有助于作为一个临时的解决方法!

Michael Zlatkovsky,MSFT公司Office Extensibility团队的开发人员