README_zh.md 10 KB

xlswriter [ Excel-Export ]

Authon: viest [email protected]

安装

使用

  1. 创建一个简单的xlsx文件
  2. 单元格插入文字
  3. 单元格插入链接
  4. 单元格插入公式
  5. 单元格插入本地图片
  6. 数据过滤
  7. 合并单元格
  8. 设置列单元格样式
  9. 设置行单元格样式
  10. 固定内存导出
  11. 创建工作表
  12. 组合样式
  13. 样式列表

PECL

pecl install xlswriter

# 添加 extension = xlswriter.so 到 ini 配置

编译安装

Unix

Ubuntu
# 依赖

sudo apt-get install -y zlib1g-dev

# 扩展

git clone https://github.com/viest/php-ext-excel-export.git

cd php-ext-excel-export

git submodule update --init

phpize && ./configure --with-php-config=/path/to/php-config

make && make install

# 添加 extension = xlswriter.so 到 ini 配置
Mac
# 依赖

brew install zlib

# 扩展

git clone https://github.com/viest/php-ext-excel-export.git

cd php-ext-excel-export

git submodule update --init

phpize && ./configure --with-php-config=/path/to/php-config

make && make install

# 添加 extension = xlswriter.so 到 ini 配置

Windows

依赖

请预先搭建PHP编译环境,教程详见 php.net

cd PHP_BUILD_PATH/deps

DownloadFile http://zlib.net/zlib-1.2.11.tar.gz
7z x zlib-1.2.11.tar.gz > NUL
7z x zlib-1.2.11.tar > NUL
cd zlib-1.2.11
cmake -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_C_FLAGS_RELEASE="/MT"
cmake --build . --config "Release"
扩展
cd PHP_PATH/ext

git clone https://github.com/viest/php-ext-excel-export.git

cd EXT_PATH

git submodule update --init

phpize

configure.bat --with-xlswriter --with-extra-libs=PATH\zlib-1.2.11\Release --with-extra-includes=PATH\zlib-1.2.11

nmake

创建一个简单的xlsx文件

$config = ['path' => '/home/viest'];

$excel = new \Vtiful\Kernel\Excel($config);

// fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数
$filePath = $excel->fileName('tutorial01.xlsx', 'sheet1')
    ->header(['Item', 'Cost'])
    ->data([
        ['Rent', 1000],
        ['Gas',  100],
        ['Food', 300],
        ['Gym',  50],
    ])
    ->output();

单元格插入文字

语法

insertText(int $row, int $column, string|int|double $data[, string $format])
int $row

单元格所在行

int $column

单元格所在列

string | int | double $data

需要写入的内容

string $format

内容格式

实例
$excel = new \Vtiful\Kernel\Excel($config);

$textFile = $excel->fileName("free.xlsx")
    ->header(['name', 'money']);

for ($index = 0; $index < 10; $index++) {
    $textFile->insertText($index+1, 0, 'viest');
    $textFile->insertText($index+1, 1, 10000, '#,##0');
}

$textFile->output();

单元格插入链接

函数原型

insertUrl(int $row, int $column, string $url[, resource $format])
int $row

单元格所在行

int $column

单元格所在列

string $url

链接地址

resource $format

链接样式

实例
$excel = new \Vtiful\Kernel\Excel($config);

$urlFile = $excel->fileName("free.xlsx")
    ->header(['url']);

$fileHandle = $fileObject->getHandle();

$format    = new \Vtiful\Kernel\Format($fileHandle);
$urlStyle = $format->bold()
    ->underline(Format::UNDERLINE_SINGLE)
    ->toResource();

$urlFile->insertUrl(1, 0, 'https://github.com', $urlStyle);

$textFile->output();

单元格插入公式

函数原型

insertFormula(int $row, int $column, string $formula)
int $row

单元格所在行

int $column

单元格所在列

string $formula

公式

实例
$excel = new \Vtiful\Kernel\Excel($config);

$freeFile = $excel->fileName("free.xlsx")
    ->header(['name', 'money']);

for($index = 1; $index < 10; $index++) {
    $textFile->insertText($index, 0, 'viest');
    $textFile->insertText($index, 1, 10);
}

$textFile->insertText(12, 0, "Total");
$textFile->insertFormula(12, 1, '=SUM(B2:B11)');

$freeFile->output();

单元格插入本地图片

函数原型

insertImage(int $row, int $column, string $localImagePath[, double $widthScale, double $heightScale])
int $row

单元格所在行

int $column

单元格所在列

string $localImagePath

图片路径

double $widthScale

对图像X轴进行缩放处理; 默认为1,保持图像原始宽度;值为0.5时,图像宽度为原图的1/2;

double $heightScale

对图像轴进行缩放处理; 默认为1,保持图像原始高度;值为0.5时,图像高度为原图的1/2;

实例
$excel = new \Vtiful\Kernel\Excel($config);

$freeFile = $excel->fileName("free.xlsx");

$freeFile->insertImage(5, 0, '/vagrant/ASW-G-66.jpg');

$freeFile->output();

数据过滤

函数原型

autoFilter(string $scope);
string $scope

过滤范围

实例
$excel->fileName('test.xlsx')
        ->header(['name', 'age'])
        ->data($data)
        ->autoFilter('A1:B11')
        ->output();

合并单元格

函数原型

mergeCells(string $scope, string $data);
string $scope

单元格范围

string $data

数据

实例
$excel->fileName("test.xlsx")
        ->mergeCells('A1:C1', 'Merge cells')
        ->output();

设置列单元格格式

函数原型

setColumn(string $range, double $width [, resource $format]);
string $range

单元格范围

double $width

单元格宽度

string $format

单元格样式

实例
$config = ['path' => './tests'];
$excel  = new \Vtiful\Kernel\Excel($config);

$fileObject = $excel->fileName('tutorial01.xlsx');
$fileHandle = $fileObject->getHandle();

$format    = new \Vtiful\Kernel\Format($fileHandle);
$boldStyle = $format->bold()->toResource();

$fileObject->header(['name', 'age'])
    ->data([['viest', 21]])
    ->setColumn('A:A', 200, $boldStyle)
    ->output();

设置行单元格格式

函数原型

setRow(string $range, double $height [, resource $format]);
string $range

单元格范围

double $height

单元格高度

string $format

单元格样式

实例
$config = ['path' => './tests'];
$excel  = new \Vtiful\Kernel\Excel($config);

$fileObject = $excel->fileName('tutorial01.xlsx');
$fileHandle = $fileObject->getHandle();

$format    = new \Vtiful\Kernel\Format($fileHandle);
$boldStyle = $format->bold()->toResource();

$fileObject->header(['name', 'age'])
    ->data([['viest', 21]])
    ->setRow('A1', 20, $boldStyle,)
    ->output();

固定内存导出

内存

最大内存使用量 = 最大一行的数据占用量

函数原型

constMemory(string $fileName);
实例
$config = ['path' => './tests'];
$excel  = new \Vtiful\Kernel\Excel($config);

$fileObject = $excel->constMemory('tutorial01.xlsx');
$fileHandle = $fileObject->getHandle();

$format    = new \Vtiful\Kernel\Format($fileHandle);
$boldStyle = $format->bold()->toResource();

$fileObject->header(['name', 'age'])
    ->data([['viest', 21]])
    ->setRow($boldStyle, 'A1')
    ->output();

创建工作表

函数原型

addSheet([string $sheetName]);
实例
$config = [
    'path' => './filePath'
];

$excel = new \Vtiful\Kernel\Excel($config);

// 此处会自动创建一个表格
$fileObject = $excel->fileName("tutorial01.xlsx");

$fileObject->header(['name', 'age'])
    ->data([['viest', 21]]);

// 向文件中追加一个表格
$fileObject->addSheet()
    ->header(['name', 'age'])
    ->data([['wjx', 22]]);

// 最后的最后,输出文件
$filePath = $fileObject->output();

组合样式

将多个样式合并为一个新样式应用在单元格上

// 将粗体与斜体合并为一个样式
$format          = new \Vtiful\Kernel\Format($fileHandle);
$boldItalicStyle = $format->bold()->italic()->toResource();

样式列表

粗体
$format    = new \Vtiful\Kernel\Format($fileHandle);
$boldStyle = $format->bold()->toResource();
斜体
$format      = new \Vtiful\Kernel\Format($fileHandle);
$italicStyle = $format->italic()->toResource();
下划线
函数原型
underline(resource $resourchHandle, Format::const $style): \Vtiful\Kernel\Format
实例
$format         = new \Vtiful\Kernel\Format($fileHandle);
$underlineStyle = $format->underline(Format::UNDERLINE_SINGLE)->toResource();
Style
Format::UNDERLINE_SINGLE;            // 单下划线
Format::UNDERLINE_DOUBLE;            // 双下划线
Format::UNDERLINE_SINGLE_ACCOUNTING; // 会计用单下划线
Format::UNDERLINE_DOUBLE_ACCOUNTING; // 会计用双下划线
对齐
函数原型
align(resource $resourchHandle, Format::const ...$style): \Vtiful\Kernel\Format
实例
$format     = new \Vtiful\Kernel\Format($fileHandle);
$alignStyle = $format
    ->align(Format::FORMAT_ALIGN_CENTER, Format::FORMAT_ALIGN_VERTICAL_CENTER)
    ->toResource();
Style
Format::FORMAT_ALIGN_LEFT;                 // 水平左对齐
Format::FORMAT_ALIGN_CENTER;               // 水平剧中对齐
Format::FORMAT_ALIGN_RIGHT;                // 水平右对齐
Format::FORMAT_ALIGN_FILL;                 // 水平填充对齐
Format::FORMAT_ALIGN_JUSTIFY;              // 水平两端对齐
Format::FORMAT_ALIGN_CENTER_ACROSS;        // 横向中心对齐
Format::FORMAT_ALIGN_DISTRIBUTED;          // 分散对齐
Format::FORMAT_ALIGN_VERTICAL_TOP;         // 顶部垂直对齐
Format::FORMAT_ALIGN_VERTICAL_BOTTOM;      // 底部垂直对齐
Format::FORMAT_ALIGN_VERTICAL_CENTER;      // 垂直剧中对齐
Format::FORMAT_ALIGN_VERTICAL_JUSTIFY;     // 垂直两端对齐
Format::FORMAT_ALIGN_VERTICAL_DISTRIBUTED; // 垂直分散对齐