この記事では、主に PHPExcel を使用して Excel を操作するための一般的なテクニックを分析します。これは非常に実用的です。必要な場合は参照してください
この記事の例では、PHPExcel を使用して Excel を操作する方法を分析します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
PHPExcelのダウンロードアドレス:
http://www.codeplex.com/PHPExcel
http://www.phpexcel.net
開発パッケージの Tests ディレクトリに詳細な使用例があり、ファイルは utf-8 で保存されます。
1 2 3 4
|
header("Content-Type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=sample.xls"); header("Pragma:no-cache"); header("有効期限:0");
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
//クラスを含める require_once('Classes/PHPExcel.php'); require_once('Classes/PHPExcel/Writer/Excel2007.php'); $objPHPExcel = 新しい PHPExcel();
//プロパティを設定します 設置文書プロパティ $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX テスト ドキュメント"); $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX テスト ドキュメント"); $objPHPExcel->getProperties()->setDescription("Office 2007 XLSX のテスト ドキュメント。PHP クラスを使用して生成されました。"); $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php"); $objPHPExcel->getProperties()->setCategory("テスト結果ファイル");
//データを追加します 追加データ $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');// 位置を指定可能 $objPHPExcel->getActiveSheet()->setCellValue('A2', true); $objPHPExcel->getActiveSheet()->setCellValue('A3', false); $objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!'); $objPHPExcel->getActiveSheet()->setCellValue('B3', 2); $objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello'); $objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
//循環 for($i = 1;$i $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $i); $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, 'テスト値'); }
//日期格式化 $objPHPExcel->getActiveSheet()->setCellValue('D1', time()); $objPHPExcel->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
//コメントを追加 追加注释 $objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel'); $objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:'); $objCommentRichText->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("rn"); $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('現在の請求書の合計金額 (VAT を除く)');
//リッチテキスト文字列追加文字追加可设置样式 $objRichText = new PHPExcel_RichText( $objPHPExcel->getActiveSheet()->getCell('A18') ); $objRichText->createText('この請求書は '); $objPayable = $objRichText->createTextRun('月末から 30 日以内にお支払い可能'); $objPayable->getFont()->setBold(true); $objPayable->getFont()->setItalic(true); $objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) ); $objRichText->createText('、請求書に別途指定がない限り。');
//セルを結合并分离单元格 $objPHPExcel->getActiveSheet()->mergeCells('A18:E22'); $objPHPExcel->getActiveSheet()->unmergeCells('A18:E22');
//細胞を守る 保护单元格 $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);//ワークシート保護を有効にするには true に設定する必要があります! $objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
//セル番号の形式を設定する 数字格式化 $objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE); $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );
//列幅を設定する $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
//フォント设置字体を設定します $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara'); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
//配置を設定する $objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->sethorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->sethorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A3')->getAlignment()->setWrapText(true);
//列の境界線を設定する 设置列边框 $objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('A10')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('E10')->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
//境界線の色を設定します $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');
//セットフィル設置充填 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');
//シートにハイパーリンクを追加します 追加链接 $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setTooltip('Web サイトに移動'); $objPHPExcel->getActiveSheet()->getStyle('E26')->getAlignment()->sethorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
//ワークシートに図面を追加します 追加图片 $objDrawing = 新しい PHPExcel_Worksheet_Drawing(); $objDrawing->setName('ロゴ'); $objDrawing->setDescription('ロゴ'); $objDrawing->setPath('./images/officelogo.jpg'); $objDrawing->setHeight(36); $objDrawing->set座標('B15'); $objDrawing->setOffsetX(110); $objDrawing->setRotation(25); $objDrawing->getShadow()->setVisible(true); $objDrawing->getShadow()->setDirection(45); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
//行と列の挿入と削除を試してみましょう $objPHPExcel->getActiveSheet()->insertNewRowBefore(6, 10); $objPHPExcel->getActiveSheet()->removeRow(6, 10); $objPHPExcel->getActiveSheet()->insertNewColumnBefore('E', 5); $objPHPExcel->getActiveSheet()->removeColumn('E', 5);
//条件付き書式を追加します $objConditional1 = 新しい PHPExcel_Style_Conditional(); $objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS); $objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN); $objConditional1->setCondition('0'); $objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); $objConditional1->getStyle()->getFont()->setBold(true);
//オートフィルターを自動过滤に設定します $objPHPExcel->getActiveSheet()->setAutoFilter('A1:C9');
//「電話」と「ファックス」列を非表示にする隐藏列 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
//ドキュメントのセキュリティを設定します 设置文档安全 $objPHPExcel->getSecurity()->setLockWindows(true); $objPHPExcel->getSecurity()->setLockStructure(true); $objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");
//セットシートセキュリティ設置工作表安全 $objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel'); $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);// 以下のいずれかを有効にするには、これを有効にする必要があります! $objPHPExcel->getActiveSheet()->getProtection()->setSort(true); $objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true); $objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
//計算データ计算 echo 'B14 [=COUNT(B2:B12)] の値: ' . $objPHPExcel->getActiveSheet()->getCell('B14')->getownedValue() 。 「ん」;
//アウトラインレベルを設定します $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setVisible(false); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setCollapsed(true);
//ペインをフリーズ $objPHPExcel->getActiveSheet()->freezePane('A2');
//先頭で繰り返す行 $objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
//データ検証を設定します $objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation(); $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE ); $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP ); $objValidation->setAllowBlank(true); $objValidation->setShowInputMessage(true); $objValidation->setShowErrorMessage(true); $objValidation->setErrorTitle('入力エラー'); $objValidation->setError('番号は使用できません!'); $objValidation->setPromptTitle('許可された入力'); $objValidation->setPrompt('10 から 20 までの数値のみが許可されます。'); $objValidation->setFormula1(10); $objValidation->setFormula2(20); $objPHPExcel->getActiveSheet()->getCell('B3')->setDataValidation($objValidation);
//デフォルトシート创建新的工作标签の後に新しいワークシートを作成します $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex(1);
//ヘッダーとフッターを設定します。奇数/偶数で異なるヘッダーが使用されていない場合は、奇数ヘッダーが想定されます。 页眉页脚 $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&C&Hこのドキュメントは機密情報として扱ってください!'); $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
//ページの向きとサイズの方向大小を設定します $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
//シートの名前を変更します 重命名工作表标签 $objPHPExcel->getActiveSheet()->setTitle('Simple');
//アクティブ シート インデックスを最初のシートに設定すると、Excel はこれを最初のシートとして開きます $objPHPExcel->setActiveSheetIndex(0);
//Excel 2007 ファイル保存 $objWriter = 新しい PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
//Excel 5ファイル保存 require_once('Classes/PHPExcel/Writer/Excel5.php'); $objWriter = 新しい PHPExcel_Writer_Excel5($objPHPExcel); $objWriter->save(str_replace('.php', '.xls', __FILE__));
//1.6.2新版保存 require_once('Classes/PHPExcel/IOFactory.php'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save(str_replace('.php', '.xls', __FILE__)); |
3.读エクセル
?
1 2 3 4 |
//クラスを含める require_once('Classes/PHPExcel/Reader/Excel2007.php'); $objReader = 新しい PHPExcel_Reader_Excel2007; $objPHPExcel = $objReader->load("05featuredemo.xlsx"); |
4.读写csv
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
require_once("05featuredemo.inc.php"); require_once('Classes/PHPExcel/Writer/CSV.php'); require_once('Classes/PHPExcel/Reader/CSV.php'); require_once('Classes/PHPExcel/Writer/Excel2007.php'); //CSV形式に書き込む 写 $objWriter = 新しい PHPExcel_Writer_CSV($objPHPExcel); $objWriter->setDelimiter(';'); $objWriter->setEnclosure(''); $objWriter->setLineEnding("rn"); $objWriter->setSheetIndex(0); $objWriter->save(str_replace('.php', '.csv', __FILE__)); //CSV形式から読み込み读 $objReader = 新しい PHPExcel_Reader_CSV(); $objReader->setDelimiter(';'); $objReader->setEnclosure(''); $objReader->setLineEnding("rn"); $objReader->setSheetIndex(0); $objPHPExcelFromCSV = $objReader->load(str_replace('.php', '.csv', __FILE__)); //Excel2007形式に書き込みます $objWriter2007 = 新しい PHPExcel_Writer_Excel2007($objPHPExcelFromCSV); $objWriter2007->save(str_replace('.php', '.xlsx', __FILE__)); |
5.写html
?
1 2 3 4 5 6 |
require_once("05featuredemo.inc.php"); require_once('Classes/PHPExcel/Writer/HTML.php'); //HTML形式に書き込む $objWriter = 新しい PHPExcel_Writer_HTML($objPHPExcel); $objWriter->setSheetIndex(0); $objWriter->save(str_replace('.php', '.htm', __FILE__)); |
6.写pdf
?
1 2 3 4 5 6 7 8 |
require_once("05featuredemo.inc.php"); require_once('Classes/PHPExcel/IOFactory.php'); //PDF 形式に書き込む $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF'); $objWriter->setSheetIndex(0); $objWriter->save(str_replace('.php', '.pdf', __FILE__)); //エコー メモリのピーク使用量 echo date('H:i:s')." ピークメモリ使用量: ".(memory_get_peak_usage(true) / 1024 / 1024)." MBrn"; |
ここで説明されている大家向けの php プログラムの設計が役立つことを望みます。