php - 将数据库中的 block 保存到 xls 中

标签 php xls

我正在使用 Krasimir 的这段代码将数据从 PHP 输出到 .xls

function xlsBOF() {
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
}
function xlsEOF() {
    echo pack("ss", 0x0A, 0x00);
}
function xlsWriteNumber($Row, $Col, $Value) {
    echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
    echo pack("d", $Value);
}
function xlsWriteLabel($Row, $Col, $Value) {
    $L = strlen($Value);
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    echo $Value;
} 
// prepare headers information
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"export_".date("Y-m-d").".xls\"");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
// start exporting
xlsBOF();
// first row 
xlsWriteLabel(0, 0, "id");
xlsWriteLabel(0, 1, "name");
xlsWriteLabel(0, 2, "email");
// second row 
xlsWriteNumber(1, 0, 230);
xlsWriteLabel(1, 1, "John");
xlsWriteLabel(1, 2, "john@yahoo.com");
// third row 
xlsWriteNumber(2, 0, 350);
xlsWriteLabel(2, 1, "Mark");
xlsWriteLabel(2, 2, "mark@yahoo.com");
// end exporting
xlsEOF();

它适用于少量数据,但是当我从数据库中导出大量数据(100.000 条记录)时,我会收到服务器超时错误。

如何更改此代码,以便我可以逐步将小块数据写入文件?

目前我使用的方法仅适用于制表符分隔的文件或 CSV

我正在 .xls 文件中写入 1000 行的 block 。导出 block 后,我使用 window.location.href=the_script.php?offset=new_offset 为下一个偏移量调用脚本,然后再次打开文件并追加接下来的 1000 行。

此方法的问题是 Excel 输出警告 文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非您信任来源,否则不要打开它。仍然要打开它吗?

我怎样才能为上面的脚本实现类似的东西?

最佳答案

关于php - 将数据库中的 block 保存到 xls 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670412/

相关文章:

php - 使用 join 时如何将日期字段从数据库反转到 xls 文件

php - MySQL:连接(2 个表)与单个查询(1 个表)

php - 我如何使用 php 检测任何手机导航器?

python - 来自 Excel 工作表数据的 xml 文件

java - 如何在Java中解析包含多个工作表、内存在50MB以内的xls文件

excel - R (OSX) 读/写 xls

PHP 脚本未定义属性和无效参数错误

php - 测试 Web 应用程序的安全漏洞

php - IIS7.5 上 PHP 站点的自定义 500 页面

ruby - Roo 弃用的 roo 方法