Authon: viest [email protected]
pecl install xlswriter
# 添加 extension = xlswriter.so 到 ini 配置
# 依赖
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 配置
# 依赖
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 配置
请预先搭建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
$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();
series(string $value,[ string $categories])
图表单个类别数据所在的工作表及单元格跨度
Sheet1 ! $A$1 : $A$5
工作表 ! 开始单元格 : 结束单元格
类别名称
\Vtiful\Kernel\Chart::CHART_COLUMN
$config = ['path' => './tests'];
$fileObject = new \Vtiful\Kernel\Excel($config);
$fileObject = $fileObject->fileName('tutorial.xlsx');
$fileHandle = $fileObject->getHandle();
$chart = new \Vtiful\Kernel\Chart($fileHandle, \Vtiful\Kernel\Chart::CHART_COLUMN);
$chartResource = $chart->series('Sheet1!$A$1:$A$5')
->series('Sheet1!$B$1:$B$5')
->series('Sheet1!$C$1:$C$5')
->toResource();
$filePath = $fileObject->data([
[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
[4, 8, 12],
[5, 10, 15],
])->insertChart(0, 3, $chartResource)->output();
\Vtiful\Kernel\Chart::CHART_AREA
<?php
$config = ['path' => './tests'];
$fileObject = new \Vtiful\Kernel\Excel($config);
$fileObject = $fileObject->fileName('tutorial.xlsx');
$fileHandle = $fileObject->getHandle();
$chart = new \Vtiful\Kernel\Chart($fileHandle, \Vtiful\Kernel\Chart::CHART_AREA);
$chartResource = $chart
->series('=Sheet1!$B$2:$B$7', '=Sheet1!$A$2:$A$7')
->seriesName('=Sheet1!$B$1')
->series('=Sheet1!$C$2:$C$7', '=Sheet1!$A$2:$A$7')
->seriesName('=Sheet1!$C$1')
->style(11)// 值为 1 - 48,可参考 Excel 2007 "设计" 选项卡中的 48 种样式
->axisNameX('Test number') // 设置 X 轴名称
->axisNameY('Sample length (mm)') // 设置 Y 轴名称
->title('Results of sample analysis') // 设置图表 Title
->toResource();
$filePath = $fileObject->header(['Number', 'Batch 1', 'Batch 2'])
->data([
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
])->insertChart(0, 3, $chartResource)->output();
insertText(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])
单元格所在行
单元格所在列
链接地址
链接样式
$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)
单元格所在行
单元格所在列
公式
$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])
单元格所在行
单元格所在列
图片路径
对图像X轴进行缩放处理; 默认为1,保持图像原始宽度;值为0.5时,图像宽度为原图的1/2;
对图像轴进行缩放处理; 默认为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);
过滤范围
$excel->fileName('test.xlsx')
->header(['name', 'age'])
->data($data)
->autoFilter('A1:B11')
->output();
mergeCells(string $scope, string $data);
单元格范围
数据
$excel->fileName("test.xlsx")
->mergeCells('A1:C1', 'Merge cells')
->output();
setColumn(string $range, double $width [, resource $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]);
单元格范围
单元格高度
单元格样式
$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();
color(int $color)
RGB 十六进制值
$config = ['path' => './tests'];
$fileObject = new \Vtiful\Kernel\Excel($config);
$fileObject = $fileObject->fileName('tutorial.xlsx');
$fileHandle = $fileObject->getHandle();
$format = new \Vtiful\Kernel\Format($fileHandle);
$colorStyle = $format->color(0xFF0000)->toResource();
//或 $colorStyle = $format->color(\Vtiful\Kernel\Format::COLOR_ORANGE)->toResource();
$filePath = $fileObject->header(['name', 'age'])
->data([
['viest', 21],
['wjx', 21]
])
->setRow('A1', 50, $colorStyle)
->output();
var_dump($filePath);
最大内存使用量 = 最大一行的数据占用量
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();
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();
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; // 垂直分散对齐
Format::COLOR_BLACK
Format::COLOR_BLUE
Format::COLOR_BROWN
Format::COLOR_CYAN
Format::COLOR_GRAY
Format::COLOR_GREEN
Format::COLOR_LIME
Format::COLOR_MAGENTA
Format::COLOR_NAVY
Format::COLOR_ORANGE
Format::COLOR_PINK
Format::COLOR_PURPLE
Format::COLOR_RED
Format::COLOR_SILVER
Format::COLOR_WHITE
Format::COLOR_YELLOW