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
我有一个 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