gpt4 book ai didi

PHP 用来自 Oracle 的数据填充现有 .xlsb 文件的值

转载 作者:可可西里 更新时间:2023-11-01 13:19:00 27 4
gpt4 key购买 nike

我想写入我的 .xlsb excel 文件,名称是当天的数字。
例如,昨天的文件名是 23.xlsb

文件的初始名称是“Template.xlsb”,位置不同。如您所见,该文件已被复制并在新位置重命名。在这个文件中,我有很多宏和 vba 代码,这就是我不想创建新的 Excel 文件的原因。

最后,这个 Excel 文件的链接在变量 $renamed_link 中。
$renamed_link = C:\Documents and Settings\Administrator\Desktop\Rezultate DIDU\2017\Apr\23.xlsb

我想用我的 sql 查询 ($parametri) 中的数据填充名为“Parametri”的第一个工作表。
将用数据填充的工作表范围是从 A2T 和总行数。该表有 20 列。

<?php
require(realpath(dirname(__FILE__)."/PHPExcel-1.8/Classes/PHPExcel.php"));
$sql_data = date('d.m.Y', strtotime('-1days'));

$conn = oci_connect('USER', 'PASS', 'dark:1521/DAR');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
Else {echo 'Connection successfully !';
}
$parametri = oci_parse($conn,"SELECT * FROM R0508UNITP WHERE TO_DATE('${sql_data}','DD.MM.YYYY') BETWEEN R0508UNITP.R0508VFROM AND R0508UNITP.R0508VTILL");

oci_execute($parametri);

echo "<table border='1'>\n";
while ($row = oci_fetch_array($parametri, OCI_ASSOC+OCI_RETURN_NULLS)) {


echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";

$day = date('j', strtotime('-1 days'));
$month = date('M', strtotime('-1 days'));
$year = date('Y', strtotime('-1 days'));


$link = "C:\Documents and Settings\Administrator\Desktop\Rezultate DIDU\\${year}\\${month}";
$template_link = 'C:\Documents and Settings\Administrator\Desktop\Rezultate DIDU\Template.xlsb';
$destination_link = "C:\Documents and Settings\Administrator\Desktop\Rezultate DIDU\\${year}\\${month}".'\Template.xlsb';
$renamed_link = "C:\Documents and Settings\Administrator\Desktop\Rezultate DIDU\\${year}\\${month}\\${day}".'.xlsb';


if(!is_dir($link))
{

mkdir($link, 0777,true);

}

if(!file_exists($destination_link))
{
copy($template_link,$destination_link);

} else {
}

rename($destination_link,$renamed_link);
?>

我的 php 表(其中一些)的打印屏幕。
这张表我想放在我的 excel 文件中。 enter image description here

最佳答案

解析和(尤其是)编辑和 xlsb(miscrosoft excel 二进制文件)一点都不简单。

在撰写本文时,您可以在以下链接找到约 1000 页的格式规范 pdf:http://interoperability.blob.core.windows.net/files/MS-XLSB/[MS-XLSB].pdf

为了避免 xlsb 的复杂性,有一些 PHP 库可以让您操作这些文件:

EasyXLS 是一种商业解决方案:

https://www.easyxls.com/

另一种选择是 PHPExcel

https://github.com/PHPOffice/PHPExcel

它根据 LGPL 获得许可。该库允许您编写(除其他外)BIFF 8 (.xls) Excel 95 及更高版本 文件。您应该检查您的 xlsb 文件是否属于此类别。


当您从数据库中获取数据(您已经成功完成此操作)后,将该数据插入到 xlsb 模板文件并另存为新文件就很简单了。这两个库都提供示例和教程。

只是其中之一:https://www.easyxls.com/manual/tutorials/php/read-xlsb-file.html


更新

如上所述EasyXLS可以读取内部格式为BIFF12xlsb文件。

这在他们的网站上有说明,我没有实际测试他们的软件,但有一个“试用版”可供下载,所以您可以试一试。

EasyXLS 不是免费的,在撰写本文时价格约为 295 美元,因此可能会超出预算,具体取决于您的项目。

EasyXLS 不是纯 PHP 库:.NET 版本带有 COM+ Library支持 PHP(以及其他语言)。由于这个原因,它不适合 *nix 系统,但如果您使用的是 Windows,它可能是一个可行的解决方案。


让我们看看PHPExcel

为了支持新的 PhpSpreadsheet,此库的开发已被放弃

后者仍处于开发阶段。然而,当前版本几乎已经完成并且可以使用,我希望很快就会有一个生产/稳定版本可用。

PhpSpreadsheet 支持BIFF5BIFF8 格式,即扩展名为.xls 的文件。

支持BIFF12 - .xlsb 文件。


测试PHPSpreadsheet

documentation非常清晰和透彻。

我使用 Composer 下载并安装了当前版本按照文档中的说明进行操作。

我将您提供的Template.xlsb 文件“降级”为.xls 格式(使用Excel)。显然我没有失去原始文件的任何功能。

然后我可以用下面的代码编辑它...

<?php
require 'vendor/autoload.php';

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$spreadsheet = $reader->load( 'Template.xls' );

$worksheet = $spreadsheet->getSheetByName( 'PARAMETRI' );

$worksheet->setCellValue( 'A2', 123 );

$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls( $spreadsheet );
$writer->save( "Template-Modified.xls" );

...但是保存的文件 Template-Modified.xls 丢失了宏

然而,在我用宏制作的另一个.xls 文件上运行相同的代码成功,在这个过程中没有丢失任何东西

您文件中的宏可能会丢失,因为它们在源文件中受到密码保护


我认为通过一些小的妥协,您可以使用 PHPSpreadsheet 在您的项目中取得成功。

我不知道您是否可以降级到 .xls 和/或从模板文件中的宏中删除密码保护。

无论如何 PHPSpreadsheet 开发非常活跃,文档和代码都很好。

您可以通过 GitHub 直接从开发团队获得更多信息或支持

关于PHP 用来自 Oracle 的数据填充现有 .xlsb 文件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43588644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com