PHP에서 Excel로 테이블 형식 데이터를 전송하는 쉬운 방법입니다. PHP에서 Excel로 테이블 형식 데이터를 전송하는 쉬운 방법 PHP 스크립트를 사용하여 mysql에서 Excel로 업로드

(mysql 데이터베이스에서 검색된 데이터) 성공합니다. 젠드 프레임워크를 사용하고 있습니다. Excel로 내보내기 전에 데이터를 일부 변경해야 합니다. 사실, 월간 금전 장부를 만들어야합니다.

나는 많은 문서를 읽었지만 엉망이되었습니다. 시작하는 방법을 정말 이해할 수 없습니다. PEAR가 정말 필요한가요? 클래스 라이브러리를 로드해야 합니까? 그렇죠? 쉬운 방법해?

미리 감사드립니다

PHPExcel 라이브러리 PHPExcel 을 사용하는 것이 좋습니다. 정말 강력하고 다양한 형식을 지원하며 시각적 서식을 지정할 수 있고 사용하기 쉽습니다.

자세한 내용은 http://phpexcel.codeplex.com/ 웹페이지에서 확인할 수 있습니다.(PHPExcel은 이미 https://github.com/PHPOffice/PHPExcel로 이동했습니다.)

사용 예:

$objPHPExcel = 새로운 PHPExcel(); /** 많은 속성을 설정할 수 있습니다. */ $objPHPExcel->getProperties()->setCreator("My company") ->setLastModifiedBy("John Doe") ->setTitle("Annual report") ->setSubject("Sales ") ->setDescription("John Doe의 연간 판매 보고서") ->setCategory("재무"); /** 시트 중 하나 선택 */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** 단순히 셀의 값을 설정 */ $activeSheet->setCellValue("A1", "plural");

물론 독서를 통해 훨씬 더 많은 일을 할 수 있습니다. 엑셀 파일, 시각적 스타일 설정, 그래프, 표현식 생성 등.

저는 MySQL(6kb+테이블당 레코드)에서 데이터를 가져오고, MySQL 데이터에서 다차원 배열을 생성하고, 여러 테이블에서 가져온 다음 모든 것을 한 행으로 덤프하고 .xls를 생성하는 94행 재고 변동 보고서를 작성했습니다.

확장이 필요하지 않습니다.

유일한 주의 사항은 데이터가 손상될 수 있음을 알리는 Excel 없이 .xls를 아직 뱉어내는 방법을 찾지 못했다는 것입니다. 서식을 지정하거나 데이터를 "내보내기"하는 것보다 더 복잡한 작업을 시도하지 않았습니다. , 파일/데이터는 물론 괜찮지만 Excel에서 경고를 생성합니다.

편집: "설정" 및 "덤프"는 daniweb.com을 참조해야 합니다.

phpexcel 라이브러리를 사용할 수 있습니다. 다른 스프레드시트 파일 형식에서 쓰고 읽을 수 있습니다.

zend와 통합하려면 다음 링크의 도움말을 사용할 수 있습니다.

CSV를 사용하여 Excel용으로 가져올 수 있는 형식을 만들 수 있습니다. 이것이 가장 쉬운 방법입니다.

CSV는 다음과 같습니다.

"내 첫 번째 셀 내용", "내 두 번째 셀 내용", "내 세 번째 셀 내용" "두 번째 줄, 첫 번째 셀 내용", "etc", "etc

각 라인은 다음을 나타냅니다. 엑셀 행, 큰따옴표 사이에 셀 내용을 넣고 쉼표로 구분합니다. 일부 데이터가 있는 경우 주의하십시오. 이로 인해 CSV가 손상되고 원하지 않는 줄바꿈이 생성될 수 있습니다.

약간의 Google을 사용하면 http://www.the-art-of-web.com/php/dataexport/를 찾을 수 있습니다.

데이터 준비

$data = array(array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25), array("firstname" => "Amanda", "lastname" => " Miller", "age" => 18), array("firstname" => "James", "lastname" => "Brown", "age" => 31), array("firstname" => "Patricia", "성" => "윌리엄스", "나이" => 7), array("이름" => "마이클", "성" => "데이비스", "나이" => 43), array("이름" => "사라", "성" => "밀러", "나이" => 24), array("이름" => "패트릭", "성" => "밀러", "나이" => 27) );

첫 번째 단계는 데이터를 탭으로 구분된 형식으로 출력하는 것입니다(CSV도 사용할 수 있지만 조금 더 복잡함). 이를 위해 다음 코드를 사용합니다.

브라우저에서 결과를 보다 쉽게 ​​볼 수 있도록 콘텐츠 유형을 text/plain으로 설정했습니다. 그렇지 않으면 없기 때문에 HTML 서식, 출력은 한 줄의 텍스트로 표시됩니다.

출력의 첫 번째 줄은 열 머리글입니다(이 경우 필드 이름이 사용됨). 값은 탭 \t와 줄 바꿈 \n으로 구분됩니다. 결과는 다음과 같아야 합니다.

이름 성 나이 Mary Johnson 25 Amanda Miller 18 James Brown 31 Patricia Williams 7 Michael Davis 43 Sarah Miller 24 Patrick Miller 27

이 코드에는 즉시 명백하지 않을 수 있는 약점이 있습니다. 출력할 필드 중 하나에 이미 하나 이상의 탭 문자가 포함되어 있거나 최악의 경우 개행 문자가 포함되어 있으면 어떻게 됩니까? 열과 줄 바꿈을 나타내기 위해 이러한 문자에 의존하기 때문에 전체 프로세스가 트리거됩니다.

해결책은 탭 문자를 "이스케이프"하는 것입니다. 이 경우 서식에 영향을 주지 않도록 탭을 리터럴 \t로 바꾸고 줄 바꿈을 리터럴 \n으로 바꿉니다.

이제 각 줄이 반향되기 전에 모든 탭 문자가 "\t"로 대체되어 열이 끊어지지 않습니다. 또한 데이터 내의 모든 줄 바꿈은 "\n"으로 대체됩니다.

.
그 노트에 제시된 방법은 정말 매우 간단하지만 항상 편리하지는 않을 수 있습니다.
PHP에서 Excel로 테이블 형식 데이터를 전송하는 다른 많은 방법이 있습니다. 가장 간단하고 기능적으로 보이는 방법을 설명하겠습니다. 특히 xls 파일을 생성하는 것이 아니라 프로그래밍 경험이 없는 사용자가 위변조를 인지하지 못하도록 받은 데이터를 Excel을 사용하여 열어보라고 제안한 것입니다.

따라서 가장 먼저 할 일은 페이지에 다음 헤더를 생성하는 스크립트에 대한 링크를 배치하는 것입니다.
header("프라그마: 공개");
header("만료: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("콘텐츠 유형: application/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("콘텐츠 전송 인코딩: 바이너리");
header("콘텐츠 길이: " . $object->getFileSize());

$object는 각 독자가 원하는 대로 구현하는 진공 상태의 구형 개체입니다. getFileName() 및 getFileSize() getter의 목적은 이름에서 분명합니다. 여기에서 명확하지 않은 한 가지 뉘앙스를 강조할 가치가 있습니다(이 사실을 상기시켜 주셔서 감사합니다). 물론 getFileName()은 모든 파일 이름을 반환할 수 있지만 브라우저가 수신된 콘텐츠를 Excel에서 열도록 제안하려면 파일 확장자가 xls여야 합니다.
나는 아직 새로운 것을 말하지 않았지만이 모든 것은 나보다 먼저 발명되었으며 아래에서 설명 할 것입니다.
메모에 대한 주석에서 올바르게 언급했듯이 Excel은 XML에서 훨씬 빠르게 작동합니다. 그러나 아마도 가장 중요한 이점은 여전히 ​​속도가 아니라 훨씬 더 기회. 나는 야생을 탐구하지 않을 것이지만 간단한 예와 링크를 제공할 것입니다. 상세 설명모든 태그.

따라서 헤더가 생성된 후 사용자에게 실제 데이터를 제공해야 합니다. 나는 보통 별도의 방법으로 테이블 생성을 래핑합니다.
echo $object->getContent();

그리고 Smarty를 사용하여 테이블을 생성합니다.

(foreach from=$data.header 항목=캡션) ($caption.columnName)(/각각)(foreach from=$data.content 항목=행) (foreach from=$row 항목=col) ($컬럼)(/각각)(/각각)

코드에서 볼 수 있듯이 두 개의 배열(테이블 헤더 행과 실제 데이터)을 포함하는 $data 배열이 템플릿으로 전달됩니다.
XML을 생성하기 위해서만 템플릿 엔진을 사용하는 것은 다소 비용이 많이 들고 XML을 얻는 다른 많은 방법이 있다는 점은 주목할 가치가 있습니다. 내 특별한 경우 XML 생성은 템플릿 엔진이 없어서는 안 될 대규모 프로젝트에서 작은 보너스일 뿐입니다.

예를 들어 가장 간단한 테이블을 제공했으며 원하는 경우 훨씬 더 많은 수의 속성을 조작할 수 있습니다. 이는 구현에 타사 라이브러리가 필요하지 않다는 점을 고려할 때 특히 유용합니다.
설명된 방법은 몇 년 동안 동일한 프로젝트에서 작업해 왔으며 아직 한 명의 사용자도 자신이 여는 데이터가 MS Office 문서가 아니라고 의심하지 않았습니다.

MS Excel에서 사용되는 XML 구조에 대한 자세한 내용은 다음을 참조하십시오.

많은 사람들이 함께 일할 때 PHP는 MySQL과 함께데이터베이스에서 xls 형식으로 데이터를 내보낼 필요가 있으므로 이 데이터가 필요한 사람들이 Excel에서 처리하거나 사용자가 이 데이터를 편리하게 볼 수 있습니다. 최근에 그런 필요가 있었는데 오늘은이 사업을 어떻게 구현할 수 있는지 알려 드리겠습니다.

이 방법은 매우 간단하지만 데이터는 정상적으로 업로드됩니다.

우선 프로그램에서 최종 xls 파일의 예를 들겠습니다. 엑셀 업로드다음과 같이 보일 것입니다:

즉, 이미지나 스타일은 업로드되지 않고 열 헤더와 데이터 자체만 업로드됩니다.

그냥 그런 업로드 옵션에 오기 전에 csv 형식으로 업로드를 시도했는데 조금 서툴러서 표를 그려서 xls 확장자로 저장하려고 했더니 말도 안되는 소리가 나더군요, 지금 설명할 방법은 저에게 완전히 적합했으며 이제 여러분과 공유하겠습니다.

우선, 내가 주석을 다는 모든 코드를 가능한 한 많이 줄 것입니다. 그것을 선택하고 php 확장자로 저장하고 시도하십시오. 데이터베이스 연결 설정을 지정하는 것을 잊지 마십시오.

PHP에서 MySQL에서 Excel로 데이터 내보내기

언로드하는 데이터를 이해할 수 있도록 데이터베이스의 간단한 테이블 예를 들어 보겠습니다( 나는 그녀의 이름 테스트):

테스트 테이블:

ID 이름 이름
1 이바노프 이반
2 페트로프 베드로
2 페트로프2 페트르2
xlsData = 팩("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0); ) // 숫자 함수인 경우 RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $value); return; ) //If 텍스트 function RecText($row, $col, $value)( $len = strlen($value); $this->xlsData .= pack(" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len); $this->xlsData .= $value; return; ) // 숫자 삽입 function InsertNumber($value)( if ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $value); $this->countCol++; return; ) // 텍스트 삽입 function InsertText($value)( if ($this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecText($this->countRow, $this->countCol, $value); $this->countCol++; return; ) // 새 줄로 이동 function GoNewLine()( $this->countCol = 0 ; $this->countRow++; return; ) // 데이터 함수 종료 EndData()( $this->xlsData .= pack("ss", 0x0A, 0x00); 반품; ) // 파일 저장 function SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // 파일 보내기 function SendFile()( $this->EndData(); header (" Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); header ("Cache-Control: no-store, no-cache, must-revalidate"); header (" Pragma: no-cache"); header("Content-type: application/x-msexcel"); header("Content-Disposition: attachment; fileName=$this->fileName.xls"); print $this- >xlsData ; ) ) ) if(isset($_GET["id"])) ( //필터 데이터 $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES)))); $ filename = "File_with_id_".$id; // 파일 이름 설정 $excel = new ExportToExcel(); // 클래스 인스턴스 생성 $sql="SELECT * FROM test.test where id = $id";// 데이터베이스 쿼리 $rez= mysql_query($sql); $excel->InsertText("ID"); $excel->InsertText("성"); $excel->InsertText("이름"); $excel ->GoNewLine(); While($ row=mysql_fetch_assoc($rez))( $excel->InsertNumber($row["id"]); $excel->InsertText($row["이름"]); $excel->InsertText($row["이름"]); $excel->GoNewLine(); ) $excel->SaveFile($filename); ) ?>

여기의 전체 아이디어는 함수에 있습니다. 팩(), 데이터를 이진 문자열로 압축하고 이 문자열을 데이터베이스에서 언로드한 데이터로 순차적으로 채웁니다. mysql일반 기능을 사용하여 mysql_query().

이 코드의 성능을 확인하기 위해 데이터베이스에 대한 연결을 설정하고 유사한 테이블을 생성한 경우 다음 요청을 보낼 수 있습니다.

Http://your_site/file_name. php?id=2

그리고 id가 2인 두 개의 행을 언로드해야 합니다.

이제 데이터 업로드를 허용한 모든 사람이 데이터를 자신의 컴퓨터로 쉽게 내보낼 수 있습니다. 로컬 컴퓨터웹 인터페이스를 통해. 이 방법은 회사 사용자(조직용 응용 프로그램을 개발하는 경우)와 인터넷 웹 사이트 사용자 모두에게 편리합니다. 희망, 이 방법당신을 도왔습니다. 행운을 빌어요!

.
그 노트에 제시된 방법은 정말 매우 간단하지만 항상 편리하지는 않을 수 있습니다.
PHP에서 Excel로 테이블 형식 데이터를 전송하는 다른 많은 방법이 있습니다. 가장 간단하고 기능적으로 보이는 방법을 설명하겠습니다. 특히 xls 파일을 생성하는 것이 아니라 프로그래밍 경험이 없는 사용자가 위변조를 인지하지 못하도록 받은 데이터를 Excel을 사용하여 열어보라고 제안한 것입니다.

따라서 가장 먼저 할 일은 페이지에 다음 헤더를 생성하는 스크립트에 대한 링크를 배치하는 것입니다.
header("프라그마: 공개");
header("만료: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("콘텐츠 유형: application/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("콘텐츠 전송 인코딩: 바이너리");
header("콘텐츠 길이: " . $object->getFileSize());

$object는 각 독자가 원하는 대로 구현하는 진공 상태의 구형 개체입니다. getFileName() 및 getFileSize() getter의 목적은 이름에서 분명합니다. 여기에서 명확하지 않은 한 가지 뉘앙스를 강조할 가치가 있습니다(이 사실을 상기시켜준 savostin 덕분에). getFileName()은 물론 모든 파일 이름을 반환할 수 있지만 브라우저가 Excel에서 받은 콘텐츠를 열도록 제안하려면 파일 확장자는 xls여야 합니다.
나는 아직 새로운 것을 말하지 않았지만이 모든 것은 나보다 먼저 발명되었으며 아래에서 설명 할 것입니다.
PHP에서 xls 생성에 대한 게시물에 대한 주석에서 올바르게 지적했듯이 Excel은 XML을 사용하는 것이 훨씬 빠릅니다. 그러나 아마도 가장 중요한 이점은 여전히 ​​속도가 아니라 훨씬 더 넓은 가능성입니다. 나는 야생을 탐구하지는 않지만 간단한 예와 모든 태그에 대한 자세한 설명에 대한 링크만 제공할 것입니다.

따라서 헤더가 생성된 후 사용자에게 실제 데이터를 제공해야 합니다. 나는 보통 별도의 방법으로 테이블 생성을 래핑합니다.
echo $object->getContent();

그리고 Smarty를 사용하여 테이블을 생성합니다.

(foreach from=$data.header 항목=캡션) ($caption.columnName)(/각각)(foreach from=$data.content 항목=행) (foreach from=$row 항목=col) ($컬럼)(/각각)(/각각)

코드에서 볼 수 있듯이 두 개의 배열(테이블 헤더 행과 실제 데이터)을 포함하는 $data 배열이 템플릿으로 전달됩니다.
XML을 생성하기 위해서만 템플릿 엔진을 사용하는 것은 다소 비용이 많이 들고 XML을 얻는 다른 많은 방법이 있다는 점은 주목할 가치가 있습니다. 내 특별한 경우 XML 생성은 템플릿 엔진이 없어서는 안 될 대규모 프로젝트에서 작은 보너스일 뿐입니다.

예를 들어 가장 간단한 테이블을 제공했으며 원하는 경우 훨씬 더 많은 수의 속성을 조작할 수 있습니다. 이는 구현에 타사 라이브러리가 필요하지 않다는 점을 고려할 때 특히 유용합니다.
설명된 방법은 몇 년 동안 동일한 프로젝트에서 작업해 왔으며 아직 한 명의 사용자도 자신이 여는 데이터가 MS Office 문서가 아니라고 의심하지 않았습니다.

MS Excel에서 사용되는 XML 구조에 대한 자세한 내용은 다음을 참조하십시오.



관련 기사: