ホームページ >バックエンド開発 >PHPチュートリアル >PhpOfficeで美しいフォームの書き方を詳しく解説

PhpOfficeで美しいフォームの書き方を詳しく解説

藏色散人
藏色散人転載
2021-01-25 12:03:145512ブラウズ

推奨: 「PHP ビデオ チュートリアル

記事は長くありません、記事は長くありません、記事は長くありません

このフォームは オレンジハートセレクション グループリーダーのフェイスシートを真似て作成したものです

まずはフォームを入力してください

PhpOffice 写一个漂亮的表格

アイデア

  • #列の合計数を決定するには、ヘッダーに結合するセルの数を決定する必要があります。1~ を予約できます。あと 2 列。使用しない場合は、最後に幅を 0 に設定します。
  • 残りはセルを結合し、セル スタイルを設定します。

Excel 部分クラス構造

内の列には、メソッド名、クラス属性、およびこの記事で使用されている属性のみがリストされていることに注意してください。クラス ファイル

#
Speadsheet      // 实例化 excel
    Sheet           // 当前活动 sheet   PhpOffice\PhpSpreadsheet\Worksheet\Worksheet
        getColumnDimension  // 操作列
            width               // 设置列宽
            autoSize            // 自动大小
        getRowDimension     // 操作行
            height              // 设置行高
        getCell             // 获取要操作的单元格(An:Gn),如 (A2:G7)
            style
                同Speadsheet 下的 Style
            setValue            // 设置值
        mergeCell           // 合并单元格
        pageSetup           // 页面设置,包含纸张大小,比如 A4
            ...
        pageMargins         // 页边距
            ...
        headerFooter        // 页眉页脚
            ...
        ...
    Style           // 处理样式             PhpOffice\PhpSpreadsheet\Style\Style
        Font                // 处理字体
            size                // 字体大小
            bold                // 加粗
            underline           // 下划线
            color               // 处理颜色
                argb                // 带透明度颜色
                rgb                 // 颜色
        Fill                // 处理填充
            fillType            // 填充方式
            startColor          // 开始颜色(不清楚用处)
            endColor            // 结束颜色(不清楚用处)
            color           // 处理颜色
                argb                // 带透明度颜色 背景色带透明
                rgb                 // 颜色         背景色
        Borders
        Alignment
        NumberFormat
        Protection
インスタンス化

次の例では、次の変数を使用します。

$spreadsheet = new Spreadsheet();       // 实例化 excel 操作类,默认初始化 sheet 序号为 0

$sheet = $spreadsheet->getActiveSheet(0);       // 拿到要操作的 sheet,必须是已存在的

// 获取操作表格样式的类(全局样式)
$defaultStyle = $spreadsheet->getDefaultStyle();        // PhpOffice\PhpSpreadsheet\Style\Style 实例
使用例

#表スタイルの設定

操作テキストの配置
// 获取操作对齐方式 类
$align = $defaultStyle->getAlignment();

// 设置 Horizontal(水平) 和 Vertical(垂直) 都居中,一个类中的方法,可以连贯操作
$align->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER)

// 仅水平居中
$align->setHorizontal(Alignment::HORIZONTAL_CENTER);
// 仅垂直居中
$align->setVertical(Alignment::VERTICAL_CENTER);
操作境界線
// 获取操作对齐方式 类
$border = $defaultStyle->getBorders();
// 设置底部边框
$border->getBottom()->setBorderStyle(Border::BORDER_THIN)
操作フォント
// 获取字体操作类
$font = $defaultStyle->getFont()

// 设置字体 18, 加粗,加下划线
$font->setSize(18)->setBold(true)->setUnderline(Font::UNDERLINE_SINGLE);
// 操作颜色,需要先获取颜色操作 类
$font->getColor()->setRGB('333333');
操作列
$column = $sheet->getColumnDimension('A')

// 设置列宽
$column->setWidth(7);
完全で直接実行可能な例
// 引入必要类
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Border;

$spreadsheet = new Spreadsheet();

// 获取活动 sheet
$sheet = $spreadsheet->getActiveSheet(0);
// 设置表格全部上下居中
$defaultStyle = $spreadsheet->getDefaultStyle();
$defaultStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
$defaultStyle->getFont()->getColor()->setRGB('333333');

// 设置列宽
$sheet->getColumnDimension('A')->setWidth(7);
$sheet->getColumnDimension('B')->setWidth(35);
$sheet->getColumnDimension('C')->setWidth(11);
$sheet->getColumnDimension('D')->setWidth(12);
$sheet->getColumnDimension('E')->setWidth(12);
$sheet->getColumnDimension('F')->setWidth(0);           // 预留列
$sheet->getColumnDimension('G')->setWidth(14);

$line = 1;
// 大标题
// 合并单元格
$sheet->mergeCells('A'. $line .':G'. $line);            // 合并单元格
$sheet->getRowDimension($line)->setRowHeight(40);       // 设置行高
$ATitle = $sheet->getCell('A' . $line);                 // 获取单元格
$ATitle->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);        // 内容水平居中
$ATitle->getStyle('A' . $line)->getFont()->setSize(22)->setBold(true);                              // 字体大小,加粗
$ATitle->setValue('Smallnews - 门店订单');

$line ++;
// 店长信息
$sheet->mergeCells('A' . $line . ':G' . $line);
$sheet->getStyle('A' . $line . ':G' . $line)->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN);       // 下边框样式
$AStore = $sheet->getCell('A' . $line);
$AStore->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);                          // 内容水平居左
$AStore->getStyle('A' . $line)->getFont()->setSize(16)->setBold(true);                                              // 字体大小,加粗
$AStore->setValue('Smallnews/157****1560');

$line ++;
// 门店地址
$sheet->mergeCells('A' . $line . ':G' . $line);
$AAddress = $sheet->getCell('A' . $line);
$AAddress->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
$AAddress->getStyle('A' . $line)->getFont()->setSize(14);
$AAddress->setValue('北京望京 SOHO');

$line ++;
// 运单统计
$sheet->mergeCells('A' . $line . ':B' . $line);         // AB 合并
$sheet->getRowDimension($line)->setRowHeight(40);       // 设置行高
$ATotalOrder = $sheet->getCell('A' . $line);
$ATotalOrder->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setVertical(Alignment::VERTICAL_BOTTOM);        // 内容水平居左,垂直居下
$ATotalOrder->getStyle('A' . $line)->getFont()->setSize(12);
$ATotalOrder->setValue('订单数量:5');

$sheet->mergeCells('C' . $line . ':D' . $line);         // CD 合并
$CTotalGoods = $sheet->getCell('C' . $line);
$CTotalGoods->getStyle('C' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setVertical(Alignment::VERTICAL_BOTTOM);        // 内容水平居左,垂直居下
$CTotalGoods->getStyle('C' . $line)->getFont()->setSize(12);
$CTotalGoods->setValue('商品总量:20');

$sheet->mergeCells('E' . $line . ':G' . $line);         // EFG 合并
$ESend = $sheet->getCell('E' . $line);
$ESend->getStyle('E' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT)->setVertical(Alignment::VERTICAL_BOTTOM);             // 内容水平居左,垂直居下
$ESend->getStyle('E' . $line)->getFont()->setSize(12);
$ESend->setValue('发货时间:' . date('Y-m-d'));

$line ++;
// 增加一个空行,充当上下内容的 margin
$sheet->mergeCells('A' . $line . ':G' . $line);
$sheet->getRowDimension($line)->setRowHeight(6);

$line ++;

// 模拟订单数据
$orders = [
    ['items' => [
        ['goods_title' => '这是个名字很长的商品,真的很长, 不信你看,肯定超过了表格宽度'],
        ['goods_title' => '这是个名字比较短的商品'],
    ]],
    ['items' => [
        ['goods_title' => '转向 卫衣秋季潮牌新款宽松时尚套头紫橘色橙色短款连帽卫衣女'],
        ['goods_title' => '芙清医美面膜医用男女淡化痘印抗菌敷料水光针术后修复皮炎祛痘'],
        ['goods_title' => '经典麻辣锅底'],
    ]]
];

// 订单数据 
foreach ($orders as $order) {
    // 购买信息
    $sheet->getRowDimension($line)->setRowHeight(30);
    $sheet->getStyle('A' . $line . ':G' . $line)->getFont()->setSize(14);
    $sheet->getStyle('A' . $line . ':G' . $line)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('CCCCCC');
    $sheet->mergeCells('A' . $line . ':B' . $line);
    $AUser = $sheet->getCell('A' . $line);
    $AUser->getStyle('A' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
    $AUser->getStyle('A' . $line)->getFont()->setSize(15)->setBold(true);

    // 模拟用户数据
    $user = [ 'nickname' => 'Smallnews', 'mobile' => '15788881560' ];
    $nickname = mb_strlen($user['nickname']) > 7 ? mb_substr($user['nickname'], 0, 6) . '**' : $user['nickname'];
    $AUser->setValue($nickname . ($user['mobile'] ?  ' /  ' .substr($user['mobile'], 0, 3) . '****' . substr($user['mobile'], 7) : ''));

    $sheet->mergeCells('C' . $line . ':G' . $line);
    $CTotal = $sheet->getCell('C' . $line);
    $CTotal->getStyle('C' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
    $CTotal->getStyle('C' . $line)->getFont()->setSize(14);
    $CTotal->setValue('共 2 种商品,共 3 件,实付 200 元');

    $line++;
    // 增加一个空行,充当上下内容的 margin
    $sheet->mergeCells('A' . $line . ':G' . $line);
    $sheet->getRowDimension($line)->setRowHeight(6);

    $line ++;
    // 订单商品信息
    $sheet->getStyle('A' . $line . ':G' . ($line + count($order['items'])))->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);     // 根据商品数量, 设置区域的边框

    $sheet->setCellValue('A' . $line, '序号');
    $sheet->setCellValue('B' . $line, '商品名称');
    $sheet->setCellValue('C' . $line, '单价');
    $sheet->setCellValue('D' . $line, '优惠');
    $sheet->setCellValue('E' . $line, '数量');
    $sheet->setCellValue('F' . $line, '');
    $sheet->setCellValue('G' . $line, '是否提货');

    foreach ($order['items'] as $key => $item) {
        $line ++;
        $sheet->setCellValue('A' . $line, ($key + 1));
        $sheet->getStyle('B' . $line)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);               // 商品名称 水平居左
        $goods_title = mb_strlen($item['goods_title']) > 16 ? mb_substr($item['goods_title'], 0, 14) . '**' : $item['goods_title'];
        $sheet->setCellValue('B' . $line, $goods_title);
        $sheet->setCellValue('C' . $line, '22.22');
        $sheet->setCellValue('D' . $line, '11.11');
        $sheet->setCellValue('E' . $line, 3);
        $sheet->setCellValue('F' . $line, '');
        $sheet->setCellValue('G' . $line, '');
    }

    $line++;
    $sheet->mergeCells('A' . $line . ':G' . $line);
    $sheet->getRowDimension($line)->setRowHeight(6);
    $line++;
}

ob_end_clean();
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . '门店面单' . '.xls"');
header("Content-Disposition:attachment;filename=门店面单.xls"); //attachment新窗口打印inline本窗口打印
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');

以上がPhpOfficeで美しいフォームの書き方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。