26개 이상의 열이 포함된 Excel을 내보낼 때 PHPSpreadsheet에서 오류를 보고하면 어떻게 해야 합니까?

WBOY
풀어 주다: 2023-04-10 21:16:01
앞으로
5445명이 탐색했습니다.

PHSPreadsheet에서 Excel로 내보낸 열의 개수가 26개를 초과하여 오류가 발생하면 어떻게 해야 하나요? 다음 기사에서는 26개 이상의 열이 포함된 Excel을 내보내는 PhpSpreadsheet 솔루션을 소개합니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.

26개 이상의 열이 포함된 Excel을 내보낼 때 PHPSpreadsheet에서 오류를 보고하면 어떻게 해야 합니까?

PhpSpreadsheet를 사용하여 엑셀 파일을 내보냈을 때 오류가 보고되는 것을 발견했습니다. 문제를 문의한 결과 열 수가 26개를 초과했습니다. 해결 방법을 살펴보겠습니다.

excel 열 표현

  • xexcel 열 표현 규칙은 A, B, C부터 Z까지 입니다. 26자 이상 사용할 경우 AA, AB, AC 두 글자를 사용합니다.. .AZ, BA, BB, BC...BZ..., 702를 초과하는 경우에는 또 다른 표현 방법입니다.

  • 행의 표현은 1, 2, 3, 4, 5, 6, 7... 등입니다. phpexcel에서 셀 값을 설정하려면 setCellValue 메소드를 사용하십시오. 첫 번째 매개변수는 A1, B1, AA1, BA1과 같이 열과 행의 접합된 값을 나타냅니다.

이 점을 알고 나면 $i/26의 정수 부분과 모듈로 부분을 기준으로 열을 나타내는 문자를 계산하면 됩니다.

해결책은 다음과 같습니다

<?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];
    }
}
로그인 후 복사

관심이 있으시면 "PHP 비디오 튜토리얼"을 클릭하여 PHP 지식에 대해 자세히 알아볼 수 있습니다.

위 내용은 26개 이상의 열이 포함된 Excel을 내보낼 때 PHPSpreadsheet에서 오류를 보고하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!