이전 블로그 게시물에서는 PHPExcel에서 내보낸 Excel 파일에 대해 간략하게 요약했습니다. 이제 Excel을 읽는 방법을 다음과 같이 요약하겠습니다. (데이터의 양이 많지 않은 경우에는 이 방법을 이용하여 웹을 이용하여 직접 읽을 수 있습니다. 데이터의 양이 매우 큰 경우에는 웹에서 업로드 기능만 수행하고 읽기 및 처리만 하는 것을 권장합니다. PHPExcel은 여전히 상대적으로 시간이 많이 걸립니다. )
예제 코드:
//首先导入PHPExcel require_once 'PHPExcel.php'; $filePath = "test.xlsx"; //建立reader对象 $PHPReader = new PHPExcel_Reader_Excel2007(); if(!$PHPReader->canRead($filePath)){ $PHPReader = new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } //建立excel对象,此时你即可以通过excel对象读取文件,也可以通过它写入文件 $PHPExcel = $PHPReader->load($filePath); /**读取excel文件中的第一个工作表*/ $currentSheet = $PHPExcel->getSheet(0); /**取得最大的列号*/ $allColumn = $currentSheet->getHighestColumn(); /**取得一共有多少行*/ $allRow = $currentSheet->getHighestRow(); //循环读取每个单元格的内容。注意行从1开始,列从A开始 for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){ for($colIndex='A';$colIndex<=$allColumn;$colIndex++){ $addr = $colIndex.$rowIndex; $cell = $currentSheet->getCell($addr)->getValue(); if($cell instanceof PHPExcel_RichText) //富文本转换字符串 $cell = $cell->__toString(); echo $cell; } }
여기서 설명해야 할 사항은 다음과 같습니다. 위 주석의 "서식 있는 텍스트 변환 문자열"입니다.
PHPExcel이 EXCEl 파일을 읽을 때 셀의 내용에 두 개의 글꼴이 있으면 서식 있는 텍스트 개체를 읽습니다.
예: 셀에 내용이 있습니다: "Test 1" , 전반부의 "test" 글꼴은 Song Dynamise, 후반부의 "1" 글꼴은 Calibri 입니다. 이때
$cell = $sheet->getCell($addr 을 사용하세요. )-> getValue();
셀의 값을 가져옵니다. 그리고 인쇄:
PHPExcel_RichText Object( [_richTextElements:private] => Array ( [0] => PHPExcel_RichText_TextElement Object ([_text:private] => 测试) [1] => PHPExcel_RichText_Run Object ( [_font:private] => PHPExcel_Style_Font Object ( [_name:private] => Calibri [_size:private] => 11 [_bold:private] => [_italic:private] => [_superScript:private] => [_subScript:private] => [_underline:private] => none [_strikethrough:private] => [_color:private] => PHPExcel_Style_Color Object ( [_argb:private] => FF000000 [_isSupervisor:private] => [_parent:private] => [_parentPropertyName:private] => ) [_parentPropertyName:private] => [_isSupervisor:private] => [_parent:private] => [colorIndex] => 8 ) [_text:private] => 1 ) ) )
이러한 셀의 텍스트 내용을 직접 읽을 수 없다는 것을 알 수 있습니다. (참고: 여기의 서식 있는 텍스트는 제가 직접 번역한 것이므로 올바른지 모르겠습니다.)
또한 셀을 읽는 함수는 다음과 같습니다.
//열은 0부터 시작하고 행은 1부터 시작합니다
$currentSheet ->getCellByColumnAndRow($colIndex, $ rowIndex)->getValue();