我在" Sheet1"。
中有以下结构的表格
Date CQ % LR% UD % DP % DSI % UB % DDD %
26-Feb-2017 0.49% 0.15% 0.37% 0.53% 0.31% 0.82% 4.09%
27-Feb-2017 0.51% 0.12% 0.46% 0.71% 0.36% 0.91% 4.06%
28-Feb-2017 0.56% 0.18% 0.50% 0.72% 0.33% 0.93% 3.28%
1-Mar-2017 0.62% 0.13% 0.42% 0.75% 0.34% 0.94% 5.08%
2-Mar-2017 0.59% 0.12% 0.42% 0.76% 0.35% 0.99% 5.12%
3-Mar-2017 0.62% 0.13% 0.50% 0.80% 0.32% 0.91% 5.33%
4-Mar-2017 0.72% 0.22% 0.52% 1.49% 0.37% 1.08% 4.05%
5-Mar-2017 0.68% 0.17% 0.43% 0.74% 0.35% 1.01% 4.76%
6-Mar-2017 0.63% 0.18% 0.55% 0.88% 0.38% 1.02% 4.88%
7-Mar-2017 0.56% 0.19% 0.41% 0.75% 0.33% 0.91% 4.76%
In" Sheet 2"来自" Sheet1"的值将被复制并粘贴在下面提到的特定格式和条件下。
Condition (>=)
CQ % LR% UD% DP% DSI% UB% DDD% Rating
0.58% 0.17% 0.47% 0.75% 0.35% 0.93% 4.50% 4.57
将被复制的格式
Date Metric Value
27-02-2017 DSI 0.36%
28-02-2017 CQ 0.56%
28-02-2017 LR 0.18%
28-02-2017 UD 0.50%
28-02-2017 UB 0.93%
01-03-2017 CQ 0.62%
01-03-2017 DP 0.75%
01-03-2017 UB 0.94% etc
答案 0 :(得分:0)
我创建了三页数据,标准和输出。我使用了一个关联数组来保持标准'标准'表和我使用关联数组的键作为数据表上的数据表的标题。片。最后,我通过使用outputA数组的高度和必要的3列输出来获得最终输出范围的大小。
function listSelectedValues()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var data=ss.getSheetByName('Data');
var crit=ss.getSheetByName('Criteria')
var dataA=data.getDataRange().getValues();
var critA=crit.getDataRange().getValues();
var dictA={};
var outputA=[];
var outputS=ss.getSheetByName('Output');
for(var i=0;i<critA[0].length;i++)
{
dictA[critA[0][i]]=critA[1][i]; //this builds a criteria dictionary or lookup table
}
/* This is just debugging stuff to make sure I got the associative array correct and yes I did include the rating but it's not one of the columns so it never gets used.
var s='{';
var firstTime=true;
for(var key in dictA)
{
if(!firstTime)s+=',';
else firstTime=false;
s+=key + ':' + dictA[key];
}
s+='}'
dispStatus('dictA',s,800,600);
*/
for(var i=1;i<dataA.length;i++)//skip over the dates i starts at 1
{
for(var j=1;j<dataA[i].length;j++)//skip over the keys j starts at 1
{
if(dataA[i][j]>=dictA[dataA[0][j]])//this is possible because I used column headers that are keys in the associative array (dictA)
{
outputA.push([dataA[i][0],dataA[0][j],dataA[i][j]]); //notice the extra array bracket for inserting an entire row and insuring a 2 dimensional array for the coming setValues command.
}
}
}
var outputR=outputS.getRange(1, 1, outputA.length, 3);
outputR.setValues(outputA);
}
您可能希望对此进行修改,以便您可以使标题行对您的读者更有意义,但这会使标题元素的使用变得复杂,成为关联数组的键。我尽可能选择阻力最小的路径。
我包含了我使用的dispStatus例程。
function dispStatus(title,html,width,height,modal)
{
var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
var width = typeof(width) !== 'undefined' ? width : 400;
var height = typeof(height) !== 'undefined' ? height : 300;
var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
var modal = typeof(modal) !== 'undefined' ? modal : false;
var htmlOutput = HtmlService
.createHtmlOutput(html)
.setWidth(width)
.setHeight(height);
if(!modal)
{
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
}
else
{
SpreadsheetApp.getUi().showModalDialog(htmlOutput, title);
}
}
没有格式化的最终输出看起来像这样。
2/27/2017 DSI 0.36
2/28/2017 LR 0.18
2/28/2017 UD 0.5
2/28/2017 UB 0.93
3/1/2017 CQ 0.62
3/1/2017 DP 0.75
3/1/2017 UB 0.94
3/1/2017 DDD 5.08
3/2/2017 CQ 0.59
3/2/2017 DP 0.76
3/2/2017 DSI 0.35
3/2/2017 UB 0.99
3/2/2017 DDD 5.12
3/3/2017 CQ 0.62
3/3/2017 UD 0.5
3/3/2017 DP 0.8
3/3/2017 DDD 5.33
3/4/2017 CQ 0.72
3/4/2017 LR 0.22
3/4/2017 UD 0.52
3/4/2017 DP 1.49
3/4/2017 DSI 0.37
3/4/2017 UB 1.08
3/5/2017 CQ 0.68
3/5/2017 LR 0.17
3/5/2017 DSI 0.35
3/5/2017 UB 1.01
3/5/2017 DDD 4.76
3/6/2017 CQ 0.63
3/6/2017 LR 0.18
3/6/2017 UD 0.55
3/6/2017 DP 0.88
3/6/2017 DSI 0.38
3/6/2017 UB 1.02
3/6/2017 DDD 4.88
3/7/2017 LR 0.19
3/7/2017 DP 0.75
3/7/2017 DDD 4.76
我希望这对你有所帮助。
好的,我在这个版本中添加了最后的扭曲。
function listSelectedValues()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var data=ss.getSheetByName('Data');
var crit=ss.getSheetByName('Criteria')
var dataA=data.getDataRange().getValues();
var critA=crit.getDataRange().getValues();
var dictA={};
var outputA=[];
var outputS=ss.getSheetByName('Output');
for(var i=0;i<critA[0].length;i++)
{
dictA[critA[0][i]]=critA[1][i]; //this build a criteria dictionary or lookup table
}
for(var i=1;i<dataA.length;i++)
{
for(var j=1;j<dataA[i].length;j++)
{
if((j<dataA[i].length-1)&&(dataA[i][j]>=dictA[dataA[0][j]])||((j=dataA[i].length-1)&&(dataA[i][j]<dictA[dataA[0][j]])))
{
outputA.push([dataA[i][0],dataA[0][j],dataA[i][j]]);
}
}
}
var outputR=outputS.getRange(1, 1, outputA.length, 3);
outputR.setValues(outputA);
var end = 'is near';
}
这是我的测试数据。
Date CQ LR UD DP DSI UB DDD Rating
26-Feb-2017 0.49 0.15 0.37 0.53 0.31 0.82 4.09 5.00
27-Feb-2017 0.51 0.12 0.46 0.71 0.36 0.91 4.06 4.90
28-Feb-2017 0.56 0.18 0.5 0.72 0.33 0.93 3.28 4.80
1-Mar-2017 0.62 0.13 0.42 0.75 0.34 0.94 5.08 4.70
2-Mar-2017 0.59 0.12 0.42 0.76 0.35 0.99 5.12 4.60
3-Mar-2017 0.62 0.13 0.5 0.8 0.32 0.91 5.33 4.50
4-Mar-2017 0.72 0.22 0.52 1.49 0.37 1.08 4.05 4.40
5-Mar-2017 0.68 0.17 0.43 0.74 0.35 1.01 4.76 4.30
6-Mar-2017 0.63 0.18 0.55 0.88 0.38 1.02 4.88 4.20
7-Mar-2017 0.56 0.19 0.41 0.75 0.33 0.91 4.76 4.10
这是我的输出
3/1/2017 CQ 0.62
3/2/2017 CQ 0.59
3/3/2017 CQ 0.62
3/3/2017 Rating 4.50
3/4/2017 CQ 0.72
3/4/2017 LR 0.22
3/4/2017 UD 0.52
3/4/2017 DP 1.49
3/4/2017 DSI 0.37
3/4/2017 UB 1.08
3/4/2017 Rating 4.40
3/5/2017 CQ 0.68
3/5/2017 LR 0.17
3/5/2017 Rating 4.30
3/6/2017 CQ 0.63
3/6/2017 LR 0.18
3/6/2017 UD 0.55
3/6/2017 DP 0.88
3/6/2017 DSI 0.38
3/6/2017 UB 1.02
3/6/2017 DDD 4.88
3/6/2017 Rating 4.20
3/7/2017 Rating 4.10