有没有办法让 google 张纸将英制高度读取为数字?
Is there a way to have google sheets read imperial height as a number?
我正在制作一个 sheet,其中包含关于一堆虚构人物的详细信息,我想要的一栏是他们的身高。我也很想使用带有色标的条件格式来对最高和最短的字符以及介于两者之间的所有字符进行颜色编码。
不幸的是,我住在美国,习惯于用英尺和英寸(例如 5'10'')表示身高,Google Sheets 当然不能将其识别为数字。除了以英寸(例如 60)为单位编写所有内容之外,还有什么方法可以解决这个问题,这样我就可以将条件格式直接应用于该列?
我尝试过不同的格式(例如 5'10),并且我考虑过使用一个仅包含英寸值的隐藏列,并对该行进行条件格式设置(不适用于 Color Scale 至我知道,因为您无法输入自定义公式)。我的一个想法是以某种方式将事物格式化为分母为 12 的假分数,但隐藏了分母?但我不知道那将如何工作。我已经 Google 尽我所能,但我还没有找到任何东西(一切都只是关于改变行高,事后看来这是有道理的)。
我知道您有两个目标。首先,您应该决定使用哪个单位长度来管理高度。我选择了英寸,但如果需要,您可以使用脚。这将简化场景并允许您轻松处理数据,但您始终可以创建一个将英寸转换为 foot/inches 组合的函数,以便向第三方显示数据。这是我将使用的示例 table:
这是我的代码,我会在底部解释:
function main() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
data = sortTable(data);
sheet.getDataRange().setValues(data);
for (var i = 1; i < data.length; i++) {
data[i][2] = gradient(data.length, i);
}
for (var i = 1; i < data.length; i++) {
sheet.getRange(i, 2).setBackground("#" + data[i][2][0] + data[i][2][1] +
data[i][2][2]);
}
}
function sortTable(data) {
data.sort(function(a, b) {
return b[1] - a[1];
})
return data;
}
function gradient(arraySize, position) {
var relativePosition = position / arraySize;
var topColor = [parseInt("00", 16), parseInt("7A", 16), parseInt("33",
16)]; // Green
var bottomColor = [parseInt("FF", 16), parseInt("FF", 16), parseInt("FF",
16)]; // White
var positionColor = [0, 0, 0];
for (var i = 0; i < 3; i++) {
positionColor[i] = Math.floor(topColor[i] * (1 - relativePosition) +
bottomColor[i] * relativePosition).toString(16);
}
return positionColor;
}
首先,您必须使用 getValues()
/setValues()
的组合读取数据,然后您可以根据高度对 table 进行排序,以便稍后创建渐变。请注意我是如何分离排序功能的,以便更清楚。
之后您需要setBackground() 的渐变颜色。为此,我开发了一个简单的线性渐变函数,用于计算从上到下的 RGB 代码。在我的示例中,渐变从绿色逐渐变为白色,但您可以更改它。我还将渐变脚本分离到它自己的函数中。此时你已经有了排序的 table 和它的渐变颜色,所以你只需要使用 setValues()
就完成了。如果您对这种方法有疑问,请随时发表评论。这将是最终结果:
更新
根据您的评论,我知道您需要英制高度格式。对于这种情况,您可以使用 =INT(B2)&"' "&TRIM(TEXT(ROUND(MOD(B2,1)*12*16,0)/16,"# ??/??")&"""")
(假设 B2
包含高度)。这种方法将使用 Sheets Formulas 来计算高度的余数部分,并将其表示为不可约分数。这是最终结果:
我正在制作一个 sheet,其中包含关于一堆虚构人物的详细信息,我想要的一栏是他们的身高。我也很想使用带有色标的条件格式来对最高和最短的字符以及介于两者之间的所有字符进行颜色编码。 不幸的是,我住在美国,习惯于用英尺和英寸(例如 5'10'')表示身高,Google Sheets 当然不能将其识别为数字。除了以英寸(例如 60)为单位编写所有内容之外,还有什么方法可以解决这个问题,这样我就可以将条件格式直接应用于该列?
我尝试过不同的格式(例如 5'10),并且我考虑过使用一个仅包含英寸值的隐藏列,并对该行进行条件格式设置(不适用于 Color Scale 至我知道,因为您无法输入自定义公式)。我的一个想法是以某种方式将事物格式化为分母为 12 的假分数,但隐藏了分母?但我不知道那将如何工作。我已经 Google 尽我所能,但我还没有找到任何东西(一切都只是关于改变行高,事后看来这是有道理的)。
我知道您有两个目标。首先,您应该决定使用哪个单位长度来管理高度。我选择了英寸,但如果需要,您可以使用脚。这将简化场景并允许您轻松处理数据,但您始终可以创建一个将英寸转换为 foot/inches 组合的函数,以便向第三方显示数据。这是我将使用的示例 table:
这是我的代码,我会在底部解释:
function main() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
data = sortTable(data);
sheet.getDataRange().setValues(data);
for (var i = 1; i < data.length; i++) {
data[i][2] = gradient(data.length, i);
}
for (var i = 1; i < data.length; i++) {
sheet.getRange(i, 2).setBackground("#" + data[i][2][0] + data[i][2][1] +
data[i][2][2]);
}
}
function sortTable(data) {
data.sort(function(a, b) {
return b[1] - a[1];
})
return data;
}
function gradient(arraySize, position) {
var relativePosition = position / arraySize;
var topColor = [parseInt("00", 16), parseInt("7A", 16), parseInt("33",
16)]; // Green
var bottomColor = [parseInt("FF", 16), parseInt("FF", 16), parseInt("FF",
16)]; // White
var positionColor = [0, 0, 0];
for (var i = 0; i < 3; i++) {
positionColor[i] = Math.floor(topColor[i] * (1 - relativePosition) +
bottomColor[i] * relativePosition).toString(16);
}
return positionColor;
}
首先,您必须使用 getValues()
/setValues()
的组合读取数据,然后您可以根据高度对 table 进行排序,以便稍后创建渐变。请注意我是如何分离排序功能的,以便更清楚。
之后您需要setBackground() 的渐变颜色。为此,我开发了一个简单的线性渐变函数,用于计算从上到下的 RGB 代码。在我的示例中,渐变从绿色逐渐变为白色,但您可以更改它。我还将渐变脚本分离到它自己的函数中。此时你已经有了排序的 table 和它的渐变颜色,所以你只需要使用 setValues()
就完成了。如果您对这种方法有疑问,请随时发表评论。这将是最终结果:
更新
根据您的评论,我知道您需要英制高度格式。对于这种情况,您可以使用 =INT(B2)&"' "&TRIM(TEXT(ROUND(MOD(B2,1)*12*16,0)/16,"# ??/??")&"""")
(假设 B2
包含高度)。这种方法将使用 Sheets Formulas 来计算高度的余数部分,并将其表示为不可约分数。这是最终结果: