php 循环使用字母而不使用字母数组

php loop with letters without using an array of letters

我有一个 php 代码,它编写一个 excel 文件,其中的列数可变。每 4 行,在 5 号,我想把上面四行的总数,每列。

我的问题是如何根据列编写公式。 我的代码是这个:

$col_index=20;
$i=20;
for($anno = $annoMin; $anno<=$annoMax; $anno++){
    for($mese = 1; $mese <= 12; $mese++){
        $string = "=$i$v+$i$q-$i$z-$i$t";
        $ews->setCellValueByColumnAndRow($col_index,$k,$string);
    $col_index=$col_index+1;
    $i=$i+1;
    }
}

$string 中,我需要放置列字母而不是 $i$v,$q,$z and $t 是对行的引用,没问题。换句话说 $string 应该计算为:

$string = "=U5+U3-U2-U4";

在第一个 for 循环中,

$string = "=V5+V3-V2-V4";

在第二个等等。 我知道我可以构建一个列字母数组并使用 $i 引用来实现我的目标,但我确信有更好的方法。我正在使用 php 5.5 btw

另一种选择是用 R1C1 表示法编写公式,但我很确定我不能在 excel sheet 中同时使用标准和 R1C1 表示法

我只关注专栏字母,因为这似乎就是您要问的。使用字母的ASCII码自增,然后转换为字符:

$col_index = 20;
$i = ord('U');  // 85

for($anno = $annoMin; $anno<=$annoMax; $anno++){
    for($mese = 1; $mese <= 12; $mese++){
        $c = chr($i);
        $string = "=$c$v+$c$q-$c$z-$c$t"; // $i will be U then V etc...
        $ews->setCellValueByColumnAndRow($col_index,$k,$string);
        $col_index = $col_index+1;
        $i++;
    }
}

如果您需要保持 $i 从 20 开始并递增,则只需添加 65:

$col_index = 20;
$i = 20;

for($anno = $annoMin; $anno<=$annoMax; $anno++){
    for($mese = 1; $mese <= 12; $mese++){
        $c = chr($i + 65);
        $string = "=$c$v+$c$q-$c$z-$c$t"; // $i will be U then V etc...
        $ews->setCellValueByColumnAndRow($col_index,$k,$string);
        $col_index = $col_index+1;
        $i++;
    }
}

您可以递增字符串变量。我认为这是满足您需要的最有效方法(如果我理解正确的话)。

$ch = "a";
++$ch;
echo $ch; //prints "b"

了解这一点后,您可以构建一个循环来根据需要更新值。 这对 Excel 非常有效,因为:

$ch = "z";
++$ch;
echo $ch; //prints aa