Please refer to the image below. PHPExcel has been unable to work properly for memory reasons at 40,000 and 100000 points, but it can be resolved by modifying the ini configuration, but the time may take longer to complete the work;
xlswriter is a PHP C Extension that can be used to write text, numbers, formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file. It supports features such as:
- 100% compatible Excel XLSX files.
- Full Excel formatting.
- Merged cells.
- Defined names.
- Autofilters.
- Charts.
- Data validation and drop down lists.
- Worksheet PNG/JPEG images.
- Memory optimization mode for writing large files.
- Works on Linux, FreeBSD, OpenBSD, OS X, Windows.
- Compiles for 32 and 64 bit.
- FreeBSD License.
- 创建一个简单的xlsx文件
- 图表
- 单元格插入文字
- 单元格插入链接
- 单元格插入公式
- 单元格插入本地图片
- 数据过滤
- 合并单元格
- 设置列单元格样式
- 设置行单元格样式
- 设置文字颜色
- 固定内存导出
- 创建工作表
- 组合样式
- 样式列表
- 颜色常量
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