원저자: 빙산 위의 팟캐스트 이 글을 보고 원저자의 인내심에 매우 놀랐습니다. 우리가 일상생활에서 몇 가지 사용하지만, 저자가 엑셀을 작성할 때 모두 나열한 것은 아닙니다. 라이브러리, 팩 헤더도 사용했고, csv는 말할 것도 없고 xml을 간단히 대체하기 위해 smarty를 사용하는 헤더도 사용했습니다. 헤헤. (COM 메소드에 대해서는 언급하지 않겠습니다. 읽을 수 있는 메소드가 너무 많습니다. 또한 wps를 사용하여 단어를 생성하는 방법에 대한 기사도 작성했습니다.)
그런데 읽으면서 한 개만 사용했는데 그게 뭔지 잊어버려서 다시 돌아가서 코드를 읽어야 했어요. 빌리는 것을 원칙으로 하기 때문에 기억이 나지 않습니다.
원래 주소: http://xinsync.xju.edu.cn/index.php/archives/3858
원본 내용:
최근 프로젝트 요구로 인해 시스템의 일부 데이터를 Excel로 내보내고 수정한 후 다시 시스템으로 가져오는 모듈을 개발해야 합니다. 나는 이것에 대해 몇 가지 연구를 할 기회를 얻었고 여기에 몇 가지 요약이 있습니다.
기본적으로 내보낸 파일에는 두 가지 유형이 있습니다.
1: Excel과 유사한 형식입니다. 이는 실제로 Excel이 강력한 호환성을 갖고 있고 올바르게 열 수 있다는 점에서 일반적인 의미의 Excel 파일이 아닙니다. 이러한 종류의 파일을 수정한 후 저장하면 일반적으로 해당 파일을 Excel 파일로 변환할지 여부를 묻는 메시지가 표시됩니다.
장점: 간단하다.
단점: 포맷을 생성하기가 어렵습니다. 가져오기에 사용하는 경우 해당 프로그램을 직접 작성해야 합니다.
2: Excel 형식은 Excel과 유사하며 이 방법으로 생성된 파일은 실제 Excel 형식에 더 가깝습니다.
중국어를 내보낼 때 잘못된 문자가 나타나는 경우 문자열을 gb2312로 변환해 볼 수 있습니다. 예를 들어 다음은 $yourStr을 utf-8에서 gb2312로 변환합니다.
$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);
몇 가지 방법이 아래에 자세히 나열되어 있습니다.
1. Excel로 PHP 내보내기
1: 첫 번째 권장 사항은 매우 인기 있는 PHPExcel 공식 웹사이트입니다: http://www.codeplex.com/PHPExcel
가져오기 및 내보내기가 가능하며 Office 2007 형식으로 내보낼 수도 있으며 2003과도 호환됩니다.
다운로드한 패키지에는 스스로 학습할 수 있는 문서와 예제가 포함되어 있습니다.
다음은 단락을 복사하는 예입니다.
PHP 코드
<?php
/**
* PHP엑셀
*
* 저작권 (C) 2006 - 2007 PHPExcel
*
* 이 라이브러리는 무료 소프트웨어이며 재배포할 수 있습니다.
* GNU Lesser General Public의 조건에 따라 수정합니다.
* 자유 소프트웨어 재단(Free Software Foundation)이 게시한 라이센스
* 라이센스 버전 2.1 또는 (귀하의 선택에 따라) 이후 버전.
*
* 본 라이브러리는 유용하게 활용되길 바라는 마음으로 배포되며,
* 그러나 어떠한 묵시적인 보증도 제공되지 않습니다.
* 특정 목적에 대한 상품성 또는 적합성은 GNU를 참조하십시오.
* 자세한 내용은 약소 일반 공중 라이선스를 참조하세요.
*
* 당신은 GNU Lesser General Public의 사본을 받았어야 합니다.
* 이 라이브러리와 함께 라이센스를 취득하지 않은 경우 자유 소프트웨어에 기록하십시오.
* Foundation, Inc., 51 Franklin Street, 5층, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright 저작권 (c) 2006 - 2007 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @version 1.5.0, 2007-10-23
*/
/** 오류 보고 */
error_reporting(E_ALL);
/** 경로 포함 **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
/** PHPExcel */
'PHPExcel.php'를 포함합니다.
/** PHPExcel_Writer_Excel2007 */
'PHPExcel/Writer/Excel2007.php'를 포함합니다.
// 새로운 PHPExcel 객체 생성
echo date('H:i:s') ” 새 PHPExcel 객체 생성n”;
$objPHPExcel = 새로운 PHPExcel();
// 속성 설정
echo date('H:i:s') ” 속성 설정n”;
$objPHPExcel->getProperties()->setCreator("마틴 Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("마틴 볼리아우");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX 테스트 문서");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX 테스트 문서");
$objPHPExcel->getProperties()->setDescrīption("PHP 클래스를 사용하여 생성된 Office 2007 XLSX용 테스트 문서.");
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
$objPHPExcel->getProperties()->setCategory("테스트 결과 파일");
//데이터 추가
echo date('H:i:s') ” 일부 데이터 추가n”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1′, 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('B2′, 'world!');
$objPHPExcel->getActiveSheet()->setCellValue('C1′, 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('D2′, 'world!');
// 시트 이름 바꾸기
echo date('H:i:s') ” 시트 이름 바꾸기n”;
$objPHPExcel->getActiveSheet()->setTitle('단순');
// 활성 시트 인덱스를 첫 번째 시트로 설정하여 Excel에서 이 시트를 첫 번째 시트로 엽니다.
$objPHPExcel->setActiveSheetIndex(0);
// 엑셀 2007 파일 저장
echo date('H:i:s') ” Excel2007 형식으로 쓰기n”;
$objWriter = 새로운 PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// 에코 완료
echo date('H:i:s') ” 파일 쓰기가 완료되었습니다.rn”;
2. pear의 Spreadsheet_Excel_Writer 클래스 다운로드 주소를 사용하세요: http://pear.php.net/package/Spreadsheet_Excel_Writer
이 클래스는 OLE에 따라 다릅니다. 다운로드 주소: http://pear.php.net/package/OLE
내보낸 Excel 파일의 형식은 비교적 오래된 파일이므로 수정 후 저장하면 최신 형식으로 변환할지 묻는 메시지가 표시됩니다.
하지만 형식을 설정할 수 있는데 이는 매우 강력합니다.
PHP 코드
<?php
require_once '스프레드시트/Excel/Writer.php';
// 통합 문서 만들기
$workbook = 새로운 Spreadsheet_Excel_Writer();
// HTTP 헤더 전송
$workbook->send('test.xls');
// 워크시트 생성
$worksheet =& $workbook->addWorksheet('내 첫 번째 워크시트');
//실제 데이터
$worksheet->write(0, 0, '이름');
$worksheet->write(0, 1, '나이');
$worksheet->write(1, 0, '존 스미스');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, '요한 슈미트');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, '후안 헤레라');
$worksheet->write(3, 1, 32);
//파일을 보내자
$workbook->close();
?>
3: Smarty를 사용하여 Excel 사양을 준수하는 XML 또는 HTML 파일 지원 형식을 생성합니다. 이는 완벽한 내보내기 솔루션입니다. 그러나 내보낸 파일은 기본적으로 XML 파일이므로 가져오기에 사용하는 경우 별도로 처리해야 합니다.
자세한 내용은 rardge Hero의 게시물을 참조하세요: http://bbs.chinaunix.net/viewthread.php?tid=745757
내보낸 테이블의 행 수가 확실하지 않은 경우 다음을 입력하는 것이 가장 좋습니다. 템플릿의 "ss:": ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”과 같은 항목을 삭제합니다.
4. Excel 형식을 시뮬레이션하는 문장 나누기 기호를 인쇄하려면 Pack 기능을 사용하십시오. 이는 Excel 표준 형식에 더 가깝습니다. Office 2003에서 수정하고 저장한 후에는 프롬프트가 표시되지 않습니다.
단점은 형식이 없다는 것입니다.
PHP 코드
<?php
// 헤더 보내기
header("프라그마: 공개");
header("만료일: 0");
header("캐시 제어: 재검증 필수, 사후 확인=0, 사전 확인=0");
header("콘텐츠 유형: 애플리케이션/강제 다운로드");
header("콘텐츠 유형: 애플리케이션/옥텟 스트림");
header("콘텐츠 유형: 애플리케이션/다운로드");;
header("콘텐츠 처리: 첨부 파일;파일 이름=test.xls ");
header("콘텐츠 전송-인코딩: 바이너리 ");
//XLS 데이터 셀
xlsBOF();
xlsWriteLabel(1,0,"내 엑셀 첫 번째 줄");
xlsWriteLabel(2,0,"내 엑셀 두 번째 줄: ");
xlsWriteLabel(2,1,"안녕하세요 여러분");
xlsEOF();
함수 xlsBOF() {
echo pack("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
반품;
}
함수 xlsEOF() {
echo pack("ss", 0×0A, 0×00);
반품;
}
함수 xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0×203, 14, $Row, $Col, 0×0);
echo pack("d", $Value);
반품;
}
함수 xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($Value);
echo pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
에코 $값;
반품;
}
?>
그러나 저자는 이를 64비트 리눅스 시스템에서 사용하다가 실패했고, 문장 분리 기호가 모두 깨져 문자가 됐다.
5. 탭 및 줄 바꿈 사용 방법
탭 문자 "t"를 사용하면 같은 줄의 열을 구분할 수 있고 개행 문자 "tn"을 사용하면 다음 줄을 열 수 있습니다.
<?php
header("콘텐츠 유형: application/vnd.ms-execl");
header("콘텐츠 처리: 첨부 파일; 파일 이름=myExcel.xls");
header("Pragma: 캐시 없음");
header("만료일: 0");
/*첫 번째 줄*/
echo "안녕하세요"."t";
echo "세계"."t";
에코 “tn”;
/*두 번째 줄 시작*/
echo "두 번째 줄입니다."t";
echo "안녕하세요, 예쁜 아가씨"."t";
에코 "tn";
?>
6. com을 이용하세요
PHP가 com 모듈을 열 수 있으면 이를 사용하여 Excel 파일을 내보낼 수 있습니다.
PHP 코드
<?PHP
$파일명 = “c:/spreadhseet/test.xls”;
$시트1 = 1;
$sheet2 = “시트2”;
$excel_app = new COM("Excel.application") 또는 Die("연결되지 않았습니다");
"애플리케이션 이름: {$excel_app->애플리케이션->값}n"을 인쇄합니다.
"로드된 버전: {$excel_app->Application->version}n"을 인쇄합니다.
$Workbook = $excel_app->Workbooks->Open("$filename") 또는 Die("$filename $Workbook을 열지 않았습니다");
$Worksheet = $Workbook->워크시트($sheet1);
$워크시트->활성화;
$excel_cell = $Worksheet->Range("C4");
$excel_cell->활성화;
$excel_result = $excel_cell->값;
"$excel_resultn"을 인쇄합니다.
$Worksheet = $Workbook->워크시트($sheet2);
$워크시트->활성화;
$excel_cell = $Worksheet->Range("C4");
$excel_cell->활성화;
$excel_result = $excel_cell->값;
"$excel_resultn"을 인쇄합니다.
#Excel의 모든 인스턴스를 닫으려면:
$통합문서->닫기;
설정 해제($Worksheet);
설정 해제($Workbook);
$excel_app->통합문서->닫기();
$excel_app->종료();
unset($excel_app);
?>
더 나은 예: http://blog.chinaunix.net/u/16928/showart_387171.html
1. Excel로 PHP 가져오기
1: 여전히 PHPExcel을 사용합니다. 공식 웹사이트: http://www.codeplex.com/PHPExcel .
2: PHP-ExcelReader를 사용하고 다운로드 주소: http://sourceforge.net/projects/phpexcelreader
예:
PHP 코드
<?php
require_once '엑셀/reader.php';
// ExcelFile($파일명, $인코딩);
$data = 새로운 Spreadsheet_Excel_Reader();
// 출력 인코딩을 설정합니다.
$data->setOutputEncoding('utf8');
$data->read('jxlrwtest.xls');
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]."",";
}
에코 "n";
}
?>
----------
이 사이트는 저작자 표시, 비상업적 및 일관성을 요구하는 크리에이티브 커먼즈 저작권 계약을 채택합니다. 이 사이트는 비상업적 재인쇄를 환영하지만 "Uncle Fatty's Simple Life"에서 가져온 것임을 명시해야 하며 원본 링크도 유지해야 합니다. 원본 제목과 링크를 표시합니다.