所以我想在Google表格中运行一个脚本。我有两张纸,其中一张是包含我所有数据的主列表,另一张是我用来过滤结果的工作表,当我想查看特定的日期/类别时。我通过在我的过滤表中有三个单元格来完成此操作,我将填写信息以与主列表匹配,然后使用一个可以复制数据的按钮。这是我的代码:
function filter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Total");
var month = ss.getSheetByName("Filter").getRange("A2").getValue();
var payment = ss.getSheetByName("Filter").getRange("B2").getValue();
var category = ss.getSheetByName("Filter").getRange("C2").getValue();
for(var i = 1; i < 200; i++)
{
var p = s.getRange(i, 5);
var c = s.getRange(i, 6);
var m = s.getRange(i, 7);
if( p.getValue() == payment && c.getValue() == category && m.getValue()
== month){
var targetSheet = ss.getSheetByName("Filter");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(i, 1, 1, 7).copyTo(target);
}
}
}
在我的if语句中使用&&
条件导致没有任何内容出现。在出现的所有内容中使用||
条件结果。我似乎无法弄清楚如何制作它,以便我可以只按一个类别或所有类别进行排序。
提前致谢!
答案 0 :(得分:0)
您需要使用短路比较器(use PHPUnit\Framework\TestCase;
final class RemoveNonUniqueItemsTest extends TestCase
{
public function testEmptyArrayReturnEmptyArray()
{
$uniqueItems = Remover::keepOnlyUnique([]);
$this->assertEquals(
[],
$uniqueItems->asArray()
);
}
public function testArrayWithUniqueKeysReturnSameArray()
{
$uniqueItems = Remover::keepOnlyUnique([1,2,3]);
$this->assertEquals(
[1,2,3],
$uniqueItems->asArray()
);
}
public function testCountNumnerOfItemsAValueAppears()
{
$uniqueItems = Remover::keepOnlyUnique([1,2,3,3]);
$this->assertEquals(
2,
$uniqueItems->items(3)
);
}
public function testRemoveValuesThatExistsTwice()
{
$uniqueItems = Remover::keepOnlyUnique([1,2,3,3]);
$this->assertEquals(
[1,2],
$uniqueItems->asArray()
);
}
}
final class Remover
{
private $items;
private function __construct(array $items)
{
$this->items = $items;
}
public static function keepOnlyUnique(array $items) : Remover
{
return new self($items);
}
public function asArray() : array
{
$newArray = [];
foreach ($this->items as $itemKey => $itemValue) {
if ($this->items($itemValue) == 1) {
$newArray[] = $itemValue;
}
}
return $newArray;
}
public function items(int $value) : int
{
$count = 0;
foreach ($this->items as $itemKey => $itemValue) {
if ($itemValue == $value) {
$count++;
}
}
return $count;
}
}
和&&
)来获取所有3个值。如果条件不满足,则退出脚本。您还需要通过对括号中的项目进行分组来清理逻辑测试。
例如,
||
返回值&#34;九月&#34; 和&#34; Cash&#34;只要。 &#34;分类&#34;是无关紧要的。
使用
if(p.getValue() == payment && m.getValue() == month)
如果付款和值与匹配,>如果付款和类别匹配,将返回一行,无论月份如何。
使用括号打破条件会有所帮助。此外,重新考虑使用短路脚本的比较器。 This post describing the difference可能有帮助。