Heim > Backend-Entwicklung > PHP-Tutorial > Was soll ich tun, wenn PHPSpreadsheet beim Exportieren von Excel mit mehr als 26 Spalten einen Fehler meldet?

Was soll ich tun, wenn PHPSpreadsheet beim Exportieren von Excel mit mehr als 26 Spalten einen Fehler meldet?

WBOY
Freigeben: 2023-04-10 21:16:01
nach vorne
5530 Leute haben es durchsucht

Was soll ich tun, wenn die Anzahl der von PHPSpreadsheet nach Excel exportierten Spalten 26 überschreitet und ein Fehler auftritt? Der folgende Artikel stellt Ihnen die Lösung für PHPSpreadsheet zum Exportieren von Excel mit mehr als 26 Spalten vor. Ich hoffe, dass er für alle hilfreich ist.

Was soll ich tun, wenn PHPSpreadsheet beim Exportieren von Excel mit mehr als 26 Spalten einen Fehler meldet?

Als ich PHPSpreadsheet zum Exportieren einer Excel-Datei verwendete, stellte ich fest, dass ein Fehler gemeldet wurde. Nach der Abfrage des Problems stellte ich fest, dass die Anzahl der Spalten 26 überstieg. Schauen wir uns die Lösung an.

Excel-Spaltendarstellung

  • Die Regeln für die Spaltendarstellung in Excel reichen von A, B, C bis hin zu Z. Wenn mehr als 26 Buchstaben verwendet werden, werden zwei Buchstaben verwendet: AA, AB, AC. . AZ, BA, BB, BC...BZ..., wenn es 702 überschreitet, handelt es sich um eine andere Darstellungsmethode. Die Darstellung von

  • Zeilen ist 1, 2, 3, 4, 5, 6, 7 ... und so weiter. Um den Wert einer Zelle in PHPExcel festzulegen, verwenden Sie einfach die Methode setCellValue. Der erste Parameter stellt den gespleißten Wert der Spalte und Zeile dar, z. B. A1, B1, AA1, BA1.

Nachdem Sie dies wissen, berechnen Sie einfach den Buchstaben, der die Spalte darstellt, basierend auf dem ganzzahligen Teil und dem Modulo-Teil von $i/26.

Hier ist die Lösung

<?php
namespace AppLibrariesExcel;
use PhpOfficePhpSpreadsheetCellDataType;
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
class Export
{
    protected $data_type;
    protected $spread_sheet;
    protected $x_lsx;
    public function __construct(DataType$data_type, Spreadsheet$spread_sheet, Xlsx$x_lsx)
    {
        $this->data_type= $data_type;
        $this->spread_sheet= $spread_sheet;
        $this->x_lsx= $x_lsx;
    }
    /**
    * @ description 文件导出
    * @ date 2019-05-06
    * @ array $field_name 字段名称 汉字(索引数组) [&#39;产品&#39;,&#39;姓名&#39;]
    * @ array $data 数据 [&#39;a&#39; => data, &#39;b&#39; => data]
    * @ array $field_column 数据中的下标名称 字段数据 (索引数组) [&#39;a&#39;,&#39;b&#39;]
    * @ string $file_name 文件名称
    * @ array $arr 需要转换为数字的$field_column中的key(索引数组)
    * @ return  file
    */
    public function export($field_name,$data,$field_column,$file_name,$field_numeric_keys= [])
    {
        @ob_clean();
        if (empty($field_name)|| empty($field_column)|| empty($data)|| empty($file_name))return false;
        $sheet= $this->spread_sheet->getActiveSheet();
        //设置header
        $i= 0;
        foreach ($field_name as $value) {
            $cellName= self::stringFromColumnIndex($i). "1";
            $sheet->setCellValue($cellName, $value)->calculateColumnWidths();
            $sheet->getColumnDimension(self::stringFromColumnIndex($i))->setWidth(15);
            $i++;
        }
        //设置value
        $len= count($field_column);
        foreach ($data as $key=> $item) {
            $row= 2 + ($key* 1);
            for ($i= 0; $i< $len; $i++) {
                $sheet->setCellValueExplicit(self::stringFromColumnIndex($i). $row, $item[$field_column[$i]]??"", DataType::TYPE_STRING);
                if (isset($item[$field_column[$i]])&& !empty($field_numeric_keys)&& in_array($field_column[$i],$field_numeric_keys)) {
                $sheet->setCellValueExplicit(self::stringFromColumnIndex($i). $row, $item[$field_column[$i]]??"", DataType::TYPE_NUMERIC);
                }
            }
        }
        $writer= new Xlsx($this->spread_sheet);
        header(&#39;Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&#39;);//告诉浏览器输出07Excel文件
        header(&#39;Content-Disposition: attachment;filename="&#39; . $file_name . &#39;.xlsx"&#39;);//告诉浏览器输出浏览器名称
        header(&#39;Cache-Control: max-age=0&#39;);
        $writer->save(&#39;php://output&#39;);
        @ob_flush();
        @flush();
        exit;
    }
    /**
    * @ description excel导出突破只能26个字段
    * @ date 2019-05-07
    * @ return  string 字段
    */
    public static function stringFromColumnIndex($pColumnIndex = 0)
    {
        static $_indexCache= array();
        if (!isset($_indexCache[$pColumnIndex])) {
            if ($pColumnIndex < 26) {
                $_indexCache[$pColumnIndex]= chr(65 + $pColumnIndex);
            }elseif ($pColumnIndex < 702) {
                $_indexCache[$pColumnIndex]= chr(64 + ($pColumnIndex / 26)). chr(65 + $pColumnIndex % 26);
            }else {
                $_indexCache[$pColumnIndex]= chr(64 + (($pColumnIndex - 26)/ 676)). chr(65 + ((($pColumnIndex - 26)% 676)/ 26)). chr(65 + $pColumnIndex % 26);
            }
        }
        return $_indexCache[$pColumnIndex];
    }
}
Nach dem Login kopieren

Wenn Sie interessiert sind, können Sie auf „PHP-Video-Tutorial“ klicken, um mehr über PHP-Kenntnisse zu erfahren.

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHPSpreadsheet beim Exportieren von Excel mit mehr als 26 Spalten einen Fehler meldet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage