myclabs/xport

PHP 导入/导出库

0.2.2 2014-02-13 09:03 UTC

This package is not auto-updated.

Last update: 2024-09-09 14:14:20 UTC


README

Build Status Coverage Status Scrutinizer Quality Score

Xport 是一个用于 PHP 的导入/导出库。

它旨在支持以下格式

  • Excel (xlsx 和 xls)
  • OpenOffice (ods - 待实现)
  • PDF (待实现)
  • XML (待实现)

它为不同的格式(电子表格、文档、XML 等)提供对象模型,以及基于 YAML 和 Twig 的语言来映射您的数据(数组、对象等)到模型。

电子表格

简单示例

简单映射文件(YAML 文件)

sheets:
    # An empty sheet named "Home"
  - label: "Home"

    # Another sheet named "Contacts"
  - label: "Contacts"

    content:
    # Containing one table with 2 columns
      - type: VerticalTable
        columns:
          - "Name"
          - "Phone Number"
        lines:
          - foreach: "contacts as contact"
            do :
              - cells:
                - "{{ contact.name }}"
                - "{{ contact.phoneNumber }}"

使用方法

$modelBuilder = new SpreadsheetModelBuilder();
$export = new PHPExcelExporter();

$modelBuilder->bind('contacts', $contacts);

$export->export($modelBuilder->build('mapping.yml'), 'myFile.xslx');

该表将用数组 $contacts 中的每个项目填充。

path 配置是一个 PropertyAccess 路径,例如,contact.phoneNumber 路径可以解析为 $contact->getPhoneNumber()$contact->phoneNumber

动态示例

您可以使用 foreach 表达式生成动态内容。

您还可以使用 Twig 模板语言。

以下是一个示例

# Create one sheet per company
sheets:
  - foreach: companies as i => company
    do:
      - label: "{{ i + 1 }} - {{ company.name }}" # Twig expression, will result in (for example): "1 - My Company"
$modelBuilder = new SpreadsheetModelBuilder();
$export = new PHPExcelExporter();

$modelBuilder->bind('companies', $companies);

$export->export($modelBuilder->build(new YamlMappingReader('mapping.yml')), 'myFile.xslx');

以下是一个更完整的示例

sheets:

    # Create one sheet per company
  - foreach: companies as company
    do:

      - label: "{{ company.name }}"
        content:
            # One content(VerticalTable) per product, each, followed by an empty line

          - foreach: company.products as product
            do:

              - type: VerticalTable
                label: product.label
                columns:
                  - "Product"
                  - "Price"
                  - "Salesman"
                # One line per sale, each, preceded by an empty line
                lines:
                  - foreach: product.getSalesList() as sale
                    do:
                      -
                      - cells:
                          - "{{ product.name }}"
                          - "{{ sale.price }}"
                          - "{{ sale.salesman.name }}"

              - type: EmptyLine

函数

函数可以在 Twig 表达式中使用,并且是这样定义的

$modelBuilder = new SpreadsheetModelBuilder();
$export = new PHPExcelExporter();

$modelBuilder->bindFunction('up', function($str) {
    return strtoupper($str);
});

$export->export($modelBuilder->build(new YamlMappingReader('mapping.yml')), 'myFile.xslx');

文件格式

您可以通过 PHPExcel 编写器选择要使用的文件格式

// ...
$export->export($spreadsheet, 'myFile.xslx', new PHPExcel_Writer_Excel2007());

可用的编写器

  • Excel 2007 (.xlsx): PHPExcel_Writer_Excel2007
  • Excel 经典 (.xls): PHPExcel_Writer_Excel5
  • CSV (.csv): PHPExcel_Writer_CSV