我有一个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表示法
答案 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++;
}
}