PHP에서 일반적인 Excel 내보내기 방법의 예

韦小宝
풀어 주다: 2023-03-18 20:42:02
원래의
2415명이 탐색했습니다.

이 글에서는 php의 일반적인 Excel 내보내기 방법에 대한 관련 정보를 주로 소개합니다. 글에서 소개된 방법은 누구나 배우고 사용할 수 있는 특정 참고 학습 가치가 있습니다. php 내보내기 방법을 배워야 합니다. PHP 엑셀친구 여러분, 에디터를 따라가며 함께 배워보세요.

1. 일반적인 내보내기 방법

Excel을 온라인으로 내보내는 방법에는 여러 가지가 있습니다. CRM이나 OA 시스템에서 Excel을 내보내는 것이 실제로는 주요 작업이라는 것을 알고 있습니다. 데이터 목록을 반복한 다음 한 번에 한 셀씩 고정 셀에 데이터를 추가합니다. 한 번만 하시면 관련 코드를 복사해서 수정하기만 하면 다른 곳의 내보내기 기능이 완성됩니다.

하지만 두 가지 문제가 있습니다.

1. 목록 데이터 필드를 수정하면 많은 양의 코드를 수정해야 하는데, 이는 유지 관리가 어렵고 변경하기 불편합니다.


2. 언제 내보내기 기능이 여러번 나타나서 필요합니다. 여러 곳에 대량의 반복적이고 중복되는 코드를 복사하는 것은 불편해 보입니다.

따라서 Excel 내보내기 방법을 통일해야 합니다. 데이터의 헤더, 헤더 필드명, 데이터 목록, 데이터 테이블의 이름을 엑셀로 내보낼 수 있습니다.

2. 일반적인 내보내기 방법을 사용합니다

아래 그림과 같이 4개의 매개변수만 전달하면 내보내기가 완료되고 사용 및 유지관리가 훨씬 간편해집니다.

자, 목표는 명확해졌습니다. 다음 단계는 코드를 구현하는 것입니다.

물론 이 기능을 구현하는데 가장 큰 어려움은 단일 데이터의 인덱스와 순서를 기준으로 각 데이터에서 Excel의 각 필드(예: A1, B3)의 좌표 값을 자동으로 계산하는 것입니다. 헤더 필드.

그럼 엑셀의 셀 좌표를 분석해 보겠습니다. A1부터 숫자의 값을 세로로 늘리고 가로로 글자를 늘려가면 가로 글자가 Z로 바뀌면 다음 글자는 AA,...,ZZ,가 됩니다. ..,AAA...

이 경우 수직 좌표는 간단하고 각 데이터의 인덱스 값을 기반으로 계산할 수 있다는 것을 알고 있습니다. 어려운 것은 수평 좌표를 어떻게 계산합니까? 수평좌표를 잘 분석해 보면 16진수와 같은 영숫자 체계임을 알 수 있는데, A를 0으로 간주하면 Z는 25를 의미한다. 하지만 이런 종류의 숫자는 우리가 흔히 사용하는 16진수, 8진수 등과는 다릅니다. 왜냐하면 Z가 올 때 다음 숫자는 BA가 아니라 AA이기 때문입니다. 예를 들어 일반적인 기본 시스템에서 10진수 시스템이 9를 전달하면 00이 아닌 10이 되고, 16진수 시스템이 0xF를 전달하면 0x00이 아닌 0x10이 됩니다.

따라서 기본 변환 알고리즘을 참조한 다음 이를 Excel의 수평 좌표 계산 방법(10진수에서 의사 26으로)을 얻도록 변경할 수 있습니다.


//AAA转换
public static function toAAA($dec)
{
 if ($dec < 0) return &#39;&#39;;
 $y = $dec % 26;
 $x = floor($dec / 26);
 return self::toAAA($x - 1) . chr($y + 65);
}
로그인 후 복사


마지막으로 첨부 전체 코드

프레임워크는 Yii2이고 Excel 내보내기 구성 요소는 moonlandsoft/yii2-phpexcel입니다.


다른 것도 비슷합니다


//导出xls
public static function exportXls($array)
{
 set_time_limit(0);
 include(Url::to('@vendor/moonland/phpexcel/PHPExcel.php'));
 include(Url::to('@vendor/moonland/phpexcel/PHPExcel/Writer/Excel2007.php'));
 $titles = $array['titles'];
 $fields = $array['fields'];
 $list = $array['list'];
 $name = $array['name'];
 $count = count($titles);
 $keys = [];//A=>chr(65)
 foreach ($titles as $k => $v) {
 $keys[] = self::toAAA($k);
 }
 $objPHPExcel = new \PHPExcel();
 $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
 $objPHPExcel->setActiveSheetIndex(0);
 $activeSheet = $objPHPExcel->getActiveSheet();
 $activeSheet->setTitle($name);
 $activeSheet->getStyle("A1:{$keys[$count-1]}1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
 $activeSheet->mergeCells("A1:{$keys[$count-1]}1");
 $activeSheet->setCellValue('A1', $name);
 //设置title,样式
 foreach ($titles as $key => $title) {
 $activeSheet->setCellValue($keys[$key] . '2', $title);
 $activeSheet->getColumnDimension($keys[$key])->setWidth(20);
 $activeSheet->getRowDimension(($key + 1))->setRowHeight(18);
 }
 $i = 3;
 foreach ($list as &$item) {
 foreach ($keys as $k => $v) {
  $val = isset($item[$fields[$k]]) ? $item[$fields[$k]] . ' ' : ' ';
  $activeSheet->setCellValue($v . $i, $val);
 }
 $i++;
 }
 $fileName = $name . "_" . date('Y_m_d_His') . '.xlsx';
 header("Cache-Control: public");
 header("Pragma: public");
 header("Content-type:application/vnd.ms-excel");
 header("Content-Disposition:attachment;filename=" . iconv("utf-8", "GB2312//TRANSLIT", $fileName));
 header('Content-Type:APPLICATION/OCTET-STREAM');
 ob_clean();
 ob_start();
 $objWriter->save('php://output');
 ob_end_flush();
}
//AAA转换
public static function toAAA($dec)
{
 if ($dec < 0) return &#39;&#39;;
 $y = $dec % 26;
 $x = floor($dec / 26);
 return self::toAAA($x - 1) . chr($y + 65);
}
로그인 후 복사


3.
결과 내보내기:

이 글의 내용은 여기까지입니다. 모두에게 도움이 되기를 바랍니다!


관련 권장 사항:

PHP를 사용하여 EXCEL에 그림을 저장하는 방법

PHP 내보내기 및 Excel 다운로드의 기본 구현 방법

PHP 내보내기 EXCEL 빠른 개발 가이드

위 내용은 PHP에서 일반적인 Excel 내보내기 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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