【问题标题】:how to generate pCoordinates for Xlsx files如何为 Xlsx 文件生成 pCoordinates
【发布时间】:2020-04-14 15:03:10
【问题描述】:

我想为此生成坐标

 $sheet->setCellValue($pCoordinate, $pValue);

a $pCoodrinates 是一个字母,然后是一个数字,例如 A1, B1 , C1 ,例如第一行然后下一行是 A2, B2, C2 并且下一行是 3

这是我现在的代码

class SpreadSheetHelper
{
    private static $alphabet = 'ABCDEFGHIJKLMNOPQRSTUYVWXYZ';

    public static function createSpreadSheet($data = []) {
        $spreadsheet = new Spreadsheet();
        $sheet       = $spreadsheet->getActiveSheet();
        foreach ($data as $rowIndex => $row) {
            foreach ($row as $columnIndex => $columnValue) {
                $pCoordinate = self::getAlphabetCoordinate($rowIndex, $columnIndex);
                $pValue = $columnValue;
                $sheet->setCellValue($pCoordinate, $pValue);
            }
        }

        return $spreadsheet;
    }


    private static function getAlphabetCoordinate($rowIndex, $columnIndex) {
        $letter = strtoupper(substr(self::$alphabet, $columnIndex, 1));
        $number = $rowIndex + 1;
        return "$letter$number";
    }
}

正如您所看到的,$alphabet 是硬编码的并且是有限的,它到达了应该以 AA, AB, AC,AD,AE,AF 开头的最后一个字母,这就是我想要生成的。知道怎么做吗?

【问题讨论】:

  • 您可以编写一个简单的函数,该函数返回一个整数的 base-26 值。您将遍历获得 mod(26) 的数字,将其转换为字母,然后使用其余数字获得下一个数字 - 冲洗并重复。

标签: php file spreadsheet axlsx generate


【解决方案1】:

您可以利用 ASCII 表:

<?php
//Number of rows and columns
$rows = 3;
$cols = 40;

$pcoords = array();
for($current_row=1;$current_row<$rows+1;$current_row++) {
    $alpha_index = 65;
    $alpha_pref_index = 65;
    $alpha_count = 0;
    $pref_letter = '';

    for($current_col=0;$current_col<$cols;$current_col++) {
        $col_letter = chr($alpha_index);
        $pcoords[] = $pref_letter . $col_letter. $current_row;
        $alpha_count++;
        if ($alpha_count == 26) {
            $alpha_count = 0;
            $alpha_index = 65;
            $pref_letter = chr($alpha_pref_index);     
            $alpha_pref_index++;               
        }
        else {
            $alpha_index++;            
        }        
    }    
}

echo '<pre>';
print_r($pcoords);
echo '</pre>';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    相关资源
    最近更新 更多