翻譯|使用教程|編輯:吉煒煒|2025-04-21 13:35:19.533|閱讀 175 次
概述:在數據分析中,一眼就能識別數值的變化對于決策至關重要。手動設置每個單元格的格式既耗時又容易出錯。ONLYOFFICE 宏通過動態調整單元格顏色解決了這個問題,讓您能夠更輕松地高效解讀復雜數據。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ONLYOFFICE Docs,作為一款功能強大的在線編輯器,適用于您使用的平臺的文本文檔、電子表格、演示文稿、表單和 PDF 閱讀器。
在數據分析中,一眼就能識別數值的變化對于決策至關重要。手動設置每個單元格的格式既耗時又容易出錯。ONLYOFFICE 宏通過動態調整單元格顏色解決了這個問題,讓您能夠更輕松地高效解讀復雜數據。
var sheet = Api.GetActiveSheet(); var range = sheet.GetSelection(); var data = range.GetValue();
首先,我們分別初始化sheet、range和data 變量中的活動工作表、選擇和范圍。
緊接著,我們檢查是否真的選中了任何數據。如果沒有選中任何數據,我們將終止宏函數并顯示一條相應的消息:“未選中任何數據”。
//We check if no data is selected, and show message if that is the case if (!data) {
console.log("No data selected");
return;
}
如果存在數據,我們將繼續檢索其參數——列起始、列結束、行起始和行結束索引。
//Indexes indicating where rows and columns start and end var firstRowIndex = range.GetCells().Row;
var firstColIndex = range.GetCells().Col;
var lastRowIndex = data.length + firstRowIndex;
var lastColIndex = data[0].length + firstColIndex;
我們可以通過多種方式獲取索引,但其中一種方法如上面的代碼片段所示:
為什么是 data[0]?
由于我們不知道有多少行,并且data[0]、data[1]等每個都代表一行,因此我們唯一可以確定的是,我們的數據始終至少有一行。這意味著,只要變量dat a包含任何值, data[0]就始終有效。
接下來,我們創建值數組并用我們選擇的數字填充它。
var values = []; //We will store number from selected data here for (var i = firstColIndex; i < lastColIndex; i++) {
for (var j = firstRowIndex; j < lastRowIndex; j++) {
//We are checking if the value is a number //If it is, we store it to values array if (!isNaN(parseFloat(sheet.GetCells(j, i).GetValue()))) {
var value = parseFloat(sheet.GetCells(j, i).GetValue());
values.push(sheet.GetCells(j, i).GetValue());
}
}
}
初始化值數組后,我們遍歷選擇中的每個單元格。
默認情況下,每個單元格中的值都被視為字符串,因此當我們檢查值是否為數字時,我們首先需要使用parseFloat()方法將其轉換為數字。
如果單元格內的字符串代表數字,parseFloat會將其轉換為數字。如果不是,則會將其轉換為NaN(非數字)。
isNaN(…)函數檢查括號內的值是否為數字。如果我們在isNaN(…)前面添加一個“!” ,則表示檢查該值是否為數字。
如果值是數字,我們初始化value變量并將數字存儲在其中。然后將該值附加到values數組中。
迭代之后,我們得到值 數組,其中包含所選單元格的所有數字。
我們需要這個數組的原因是我們可以使用Math.min()和Math.max() JavaScript 方法從選定的單元格中找到最小數字和最大數字。
//Storing minimum and maximum values from the values array var minValue = Math.min(...values);
var maxValue = Math.max(...values);
現在我們已經掌握了所有必要的信息,我們可以將自定義顏色應用到包含數字的單元格。
我們擁有所選單元格的最小數字和最大數字,因此我們可以再次遍歷這些單元格。
for (var i = firstColIndex; i < lastColIndex; i++) {
for (var j = firstRowIndex; j < lastRowIndex; j++) {
//Again we have to check if the value is a number //If it is, we create the color depending on that value //As well as minimum and maximum value from the array if (!isNaN(parseFloat(sheet.GetCells(j, i).GetValue()))) {
var value = parseFloat(sheet.GetCells(j, i).GetValue());
var ratio = (value - minValue) / (maxValue - minValue);
var red = Math.round(255 * ratio);
var green = Math.round(255 * (1 - ratio));
sheet
.GetCells(j, i)
.SetFillColor(Api.CreateColorFromRGB(red, green, 0));
//We want colors to go from green to red }
}
}
使用 RGB 系統創建顏色時,我們需要紅色、綠色和藍色參數來生成任何所需的顏色。在這種情況下,顏色范圍應從綠色到紅色,這意味著藍色參數保持為 0,而紅色和綠色參數則根據所需的色調而變化。
如果數字較小(越接近最小值),顏色就會偏綠(最小值對應純綠色)。相反,如果數字較大,顏色就會偏紅(最大值對應純紅色)。
為了確定數字的大小,我們使用最小-最大標準化方法來獲得 0 和 1 之間的“比率”。數字越大,比率越接近 1,而數字越小,比率越接近 0。此比率是使用minValue和maxValue變量計算的。
然后,我們可以用這個比例來確定紅色和綠色的參數。與0到1的比率不同,紅色和綠色的值都是從0到255,所以我們需要相應地乘以比率。
由于紅色對于較大的數字來說應該更占主導地位,我們通過將比率乘以 225 并將其四舍五入到最接近的整數來計算。
對于綠色,計算方法有所不同。對于較小的數字,綠色應該更占主導地位,因此我們使用1 ?比率,將其乘以 225。當數字較大時,比率趨近于 1,使得1 ?比率 更小,從而降低了綠色值。
一旦我們獲得紅色和綠色參數,我們就使用Api.CreateColorFromRGB(r, g, b)來創建顏色并使用.SetFillColor(color)將其應用到單元格。
(function () { var sheet = Api.GetActiveSheet(); var range = sheet.GetSelection(); var data = range.GetValue(); //We check if no data is selected, and show message if that is the case if (!data) { console.log("No data selected"); return; } //Indexes indicating where rows and columns start and end var firstRowIndex = range.GetCells().Row; var firstColIndex = range.GetCells().Col; var lastRowIndex = data.length + firstRowIndex; var lastColIndex = data[0].length + firstColIndex; console.log(firstColIndex + " " + lastColIndex); //Testing if we got the right column indexes, first should be on spot, last should be higher by 1 console.log(firstRowIndex + " " + lastRowIndex); //Testing if we got the right row indexes, first should be on spot, last should be higher by 1 var values = []; //We will store number from selected data here for (var i = firstColIndex; i < lastColIndex; i++) { for (var j = firstRowIndex; j < lastRowIndex; j++) { //We are checking if the value is a number //If it is, we store it to values array if (!isNaN(parseFloat(sheet.GetCells(j, i).GetValue()))) { var value = parseFloat(sheet.GetCells(j, i).GetValue()); values.push(sheet.GetCells(j, i).GetValue()); } } } //Storing minimum and maximum values from the values array var minValue = Math.min(...values); var maxValue = Math.max(...values); for (var i = firstColIndex; i < lastColIndex; i++) { for (var j = firstRowIndex; j < lastRowIndex; j++) { //Again we have to check if the value is a number //If it is, we create the color depending on that value //As well as minimum and maximum value from the array if (!isNaN(parseFloat(sheet.GetCells(j, i).GetValue()))) { var value = parseFloat(sheet.GetCells(j, i).GetValue()); var ratio = (value - minValue) / (maxValue - minValue); var red = Math.round(255 * ratio); var green = Math.round(255 * (1 - ratio)); sheet .GetCells(j, i) .SetFillColor(Api.CreateColorFromRGB(red, green, 0)); //We want colors to go from green to red } } } })();
讓我們運行宏并看看它是如何工作的!
在我們運行宏之前:
運行宏后:
現在,您可以輕松在電子表格中可視化數據分布,使分析更加直觀。無論您使用的是 ONLYOFFICE 桌面版還是網頁版,此宏都能無縫集成到您的工作流程中。
關于慧都科技:
慧都科技是一家行業數字化解決方案公司,長期專注于軟件、油氣與制造行業。公司基于深入的業務理解與管理洞察,以系統化的業務建模驅動技術落地,幫助企業實現智能化運營與長期競爭優勢。在軟件工程領域,我們提供開發控件、研發管理、代碼開發、部署運維等軟件開發全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規、降本增效與風險可控。慧都科技ONLYOFFICE在中國的官方授權代理商,提供ONLYOFFICE系列產品免費試用,咨詢,正版銷售等于一體的專業化服務。ONLYOFFICE是文檔在線編輯領域的優秀產品,幫助企業實現高效的文檔協同處理。
下載|體驗更多ONLYOFFICE產品,請咨詢,或撥打產品熱線:023-68661681
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網