ホーム > セル (全18件)
  • セルがリッチテキストの場合はそのプレーンテキストを取得する

    セルB1の値がリッチテキストの場合にそのプレーンテキストを取得する

    $val = $sheet->getCell( 'B1' )->getValue();
    if ( $val instanceof PHPExcel_RichText )
    	$val = $val->getPlainText();
    

    getValueメソッドで取得した値が文字列ではなくPHPExcel_RichTextクラスのオブジェクトの場合がある。この場合はgetPlainTextメソッドを使用することでプレーンテキストを取得する。文章(文字列)が入るセルの値を取得する場合は注意したい。

  • 日付セルの値を取得する

    2列目のセルの値を日付書式で取得する。

    // getFormattedValueメソッドを使用する場合
    for ( $row = 1; $row <= 10; $row++ ) {
    	$date_val = $sheet->getCellByColumnAndRow( 1, $row )->getFormattedValue();
    	if ( preg_match( '/^[0-9]{2}\-[0-9]{2}\-[0-9]{2}$/', $date_val ) )
    		$date_val = DateTime::createFromFormat( 'm-d-y', $date_val )->format( 'Y/m/d' );
    }
    
    // getValueメソッドを使用する場合
    $date_val = $sheet->getCellByColumnAndRow( 0, $row )->getValue();
    if ( $date_val != '' ) {
    	$date_val = PHPExcel_Style_NumberFormat::toFormattedString( $date_val, PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2 );
    

    日付セルの値をgetValueメソッドで取得すると「1900/1/1」からの経過日数となる。PHPExcel_Style_NumberFormat::toFormattedStringメソッドや自前で変換する方法もあるが、getFormattedValueメソッドを使うことで’m-d-y’書式の文字列(例:2010年5月21日なら’05-21-10’)が取得できる。上記の例では取得した値の書式を確認し、DateTimeクラスのcreateFromFormatメソッドを使ってパースし、書式を’Y/m/d’に変換している。

  • 行を非表示にする

    行を非表示にする。

    /* 5行目を非表示にする */
    $sheet->getRowDimension( 5 )->setVisible( false );
    
    /* カラムEを非表示にする */
    $sheet->getColumnDimension( 'E' )->setVisible( false );
    

    getRowDimensionメソッドで1行分のセルオブジェクトを取得して、setVisibleメソッドでfalseを指定すると非表示になる(trueを指定すると表示になる)。特定のカラムをすべて非表示の場合は、getRowDimensionメソッドの代わりにgetColumnDimensionメソッドを使用する。

  • セルの外側を罫線で囲む

    セルの外側を罫線で囲む。

    /* 選択されたセルの外側を罫線で囲む */
    $sheet->getStyle( 'A4:D8' )->getBorders()->getOutline()->setBorderStyle( PHPExcel_Style_Border::BORDER_THIN );
    
    /* 選択されたセルの下に罫線を指定 */
    $sheet->getStyle( 'A4:D4' )->getBorders()->getBottom()->setBorderStyle( PHPExcel_Style_Border::BORDER_THIN );
    

    格子状に囲む場合はgetAllBordersメソッドを使用するが、外側を罫線で囲む場合はgetOutlineメソッドを使用する。このほかgetTop、getBottom、getLeft、getRightメソッドを使用することで、選択範囲の上下左右のみに罫線を指定できる。

  • 数値を文字列としてセルに設定する

    数値を強制的に文字列としてセルに設定する(桁あふれ時の###表示対策)

    // セルA1に変数$val1(数値)の値を設定する
    $sheet->setCellValueExplicit( 'A1', $val1 );
    // または
    $sheet->setCellValueExplicit( 'A1', $val1, PHPExcel_Cell_DataType::TYPE_STRING );
    
    // セルA1に変数$val1(数値)の値を設定する
    $sheet->setCellValueExplicitByColumnAndRow( 0, 1, $val1 );
    // または
    $sheet->setCellValueExplicitByColumnAndRow( 0, 1, $val1, PHPExcel_Cell_DataType::TYPE_STRING );
    

    セルに値を設定するメソッドとしてsetCellValueやsetCellValueByColumnAndRowメソッドのかわりにsetCellValueExplicitやsetCellValueExplicitByColumnAndRowメソッドを利用することで、データ形式を指定できる。それぞれの値パラメータの次にデータ形式を指定でき、データ形式は「文字列(PHPExcel_Cell_DataType::TYPE_STRING)」などを指定するが、省略時のデータ形式が文字列なので、数値を文字列として設定する場合はデータ形式パラメータを省略できる。なお変数$sheetは、getActiveSheetメソッドで取得したシートオブジェクトである。

  • セルの横位置を中央揃えにする

    セルA1を横位置を中央揃えにする。

    $sheet->getStyle( 'A1' )->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    

    getAlignmentメソッドのsetHorizontalメソッドで横位置の内容を指定。横位置は、PHPExcel_Style_AlignmentクラスにてHORIZONTAL_CENTER(中央揃え)のほか、HORIZONTAL_GENERAL(標準)、HORIZONTAL_LEFT(左詰め)、HORIZONTAL_RIGHT(右詰め)、HORIZONTAL_JUSTIFY(両端揃え)、HORIZONTAL_CENTER_CONTINUOUS(?)が定義されている。

  • セルを格子状の罫線で囲む

    セルA1からA3を格子状の罫線で囲む。

    $sheet->getStyle( 'A1:A3' )->getBorders()->getAllBorders()->setBorderStyle( PHPExcel_Style_Border::BORDER_THIN );
    
    // カラムx1:y1からx2:y2の範囲の場合
    $sheet->getStyle( PHPExcel_Cell::stringFromColumnIndex($x1).$y1.':'.PHPExcel_Cell::stringFromColumnIndex($x2).$y2 )->getBorders()->getAllBorders()->setBorderStyle( PHPExcel_Style_Border::BORDER_THIN );
    

    getStyleで複数のセルを指定するのがポイント。あとはgetBordersメソッド、getAllBordersで各セルの罫線情報オブジェクトを取得し、setBorderStyleメソッドで罫線タイプを指定している。

  • セルを塗りつぶす

    セルA1をピンクで塗りつぶす。

    $sheet->getStyle( 'A1' )->getFill()->setFillType( PHPExcel_Style_Fill::FILL_SOLID )->getStartColor()->setARGB( 'FFFFCCCC');
    

    getFillメソッドのsetFillTypeメソッドで塗りつぶしパターンを、getStartColorメソッドのsetARGBメソッドの塗りつぶし色を指定。setARGBメソッドのパラメータは透明度、赤、緑、青の順にそれぞれ’00’~’FF’を連結した文字列となる。

  • セルを結合する

    セルA1からA3を結合する。

    $sheet->mergeCells( 'A1:A3' );
    /* または */
    $sheet->mergeCellsByColumnAndRow( 0, 1, 0, 3 );
    

    mergeCellsメソッドで範囲指定したセルを結合する。また、カラム番号、行番号を指定する場合はmergeCellsByColumnAndRowメソッドを使用する。

  • セルのスタイルをコピペする

    セルB2のスタイルをセルB5に貼り付ける。

    /* セルB5に貼り付ける */
    $sheet->duplicateStyle( $sheet->getStyle( 'B2' ), 'B5' );
    
    /* セルB5~C8に貼り付ける */
    $sheet->duplicateStyle( $sheet->getStyle( 'B2' ), 'B5:C8' );
    

    getStyleメソッドでスタイル(PHPExcel_Styleオブジェクト)を取得し、duplicateStyleメソッドでスタイルを貼り付ける。duplicateStyleメソッドで指定するセルは範囲指定できる。