【问题标题】:php loop with letters without using an array of letters带有字母的php循环而不使用字母数组
【发布时间】:2016-01-06 15:44:27
【问题描述】:

我有一个 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 顺便说一句

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

【问题讨论】:

  • ord('U') = 85chr(85) = 'U' 所以也许增加一些东西并使用chr()
  • @AbraCadaver 你能详细说明你的概念吗?我不确定我明白你的想法

标签: php for-loop phpexcel


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我只是专注于列字母,因为这似乎是您要问的。使用字母的 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++;
        }
    }
    

    【讨论】:

    • 哇!聪明的把戏。猜猜它也可以与 AA、AB 等一起使用……将对其进行测试!
    • 没想到双字母。您需要检查 $i&gt;90 是否并执行其他操作。
    • 是的!经过测试,就是这样。最好使用数组并使用 $i 作为数组索引来获取字母。类似$letters['$i']
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多