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

时间:2016-01-06 15:44:27

标签: php for-loop phpexcel

我有一个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表中使用标准和R1C1表示法

2 个答案:

答案 0 :(得分:2)

您可以增加字符串变量。我认为这是做你需要的最有效的方式(如果我理解的话)。

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

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

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

答案 1 :(得分:0)

我只是专注于专栏信,因为这似乎是你所要求的。使用字母的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++;
    }
}