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.
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 字段名称 汉字(索引数组) ['产品','姓名'] * @ array $data 数据 ['a' => data, 'b' => data] * @ array $field_column 数据中的下标名称 字段数据 (索引数组) ['a','b'] * @ 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('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出07Excel文件 header('Content-Disposition: attachment;filename="' . $file_name . '.xlsx"');//告诉浏览器输出浏览器名称 header('Cache-Control: max-age=0'); $writer->save('php://output'); @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]; } }
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!