PHPExcel-在文档创建期间获取当前页面

PHPExcel-在文档创建期间获取当前页面,php,excel,phpexcel,Php,Excel,Phpexcel,客户在制药行业工作 我们为客户购买的物品打印账单 文件的总体结构如下: Header List of items Footer 有时,当所有项目列表都适合N个页面时,会发生这种情况 在这种情况下,页脚移动到最后一页 当地法律禁止此类文件,即页脚不能单独使用。它需要包含至少一个卖出头寸 关于实施的思考: 如果我可以在调用setCellValue或fromArray等操作时获取当前页面,那么实现它就很容易了 在这种情况下,我可以检查我还有多少行,以及我是否在新页面上。 如果我在新页面上,并且没有

客户在制药行业工作

我们为客户购买的物品打印账单

文件的总体结构如下:

Header
List of items
Footer 
有时,当所有项目列表都适合N个页面时,会发生这种情况

在这种情况下,页脚移动到最后一页

当地法律禁止此类文件,即页脚不能单独使用。它需要包含至少一个卖出头寸

关于实施的思考:

如果我可以在调用setCellValue或fromArray等操作时获取当前页面,那么实现它就很容易了

在这种情况下,我可以检查我还有多少行,以及我是否在新页面上。 如果我在新页面上,并且没有项目,那么我会在最后一个位置之前添加空行

因为Excel的工作方式,我觉得不可能进入phpexcel

到目前为止,我脑海中只有一个肮脏的解决方案: 根据用户请求创建文档 ->在某处存储到服务器上的临时文件夹->读取并检查文档是否有最后一页没有项目,如果是这种情况,我将添加空位置并重新创建文档(某种深度有限的递归)


但这是一个太混乱的解决方案。有没有更好的方法来处理此类问题?

实际上,如果您希望打印的格式是固定的(如字体类型和大小、页眉格式、纸张大小等),那么您可以检查有多少行:

$objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
//if 0 is the sheet you are working on
您可以检查将
页脚
推送到新页面需要多少行。基本上你有一个公式:

$footerWillBeOnSeparateSheet = $allRowCount % $maximumRowPerPage === $nomberOfRowsWhenFooterGetsOnTheNextPage;
如果
$footerbeonseparatesheet
为true,则需要添加您提到的空行

我会使用不同的方法,而不是添加空行。例如,如果
$footerWillbeonSepratesheet
的值为true,请尝试将最后两个项目和页脚分隔到不同的页面中


编辑:使用
getRowHeight()
也是一个选项,尽管很难保持不同模板之间的差异。

所说的“页面”是指打印时的Excel工作表还是实际的纸质页面?打印时的实际页面-例如页眉和页脚?是的,完全正确。唯一的区别是我想把它放入变量中进行进一步的分析,比如$pageCurrent=$this->objPHPExcel->getActiveSheet()->getHeaderFooter()->gettOddFooter('&P')。不幸的是,这只是伪代码,如果所有行的高度都是固定的,那就太酷了。不幸的是,有时位置名称或其生产者(或另一列,但概率要低得多)可能会变得非常大——大约350个符号,并且比通常占用更多的空间。这就是它在实践中的样子-。也许我可以进一步发展这个想法,并进行一些计算(在手动模式下提前在纸上计算)有多少行将包含N个符号的字符串,假设有200个符号的行包含-2行,有300个符号的行包含-3行。在这种情况下,可以计算总行数。但我觉得这样的解决方案有味道。。。。如果我是一个建筑工人,我就不会站在这样的桥下来证明这座桥是可行的。仍然向上投票,感谢您花费时间。在这种情况下,您应该遍历所有行,并使用
getRowHeight()
将所有行相加。这样你就能更精确地计算。(我不知道是否有任何函数可以获得实际的总和高度,但这是一个解决办法)如果我有时间的话,我会为你检查一下。我怀疑这个方法的准确性,所以可能不值得尝试在它上投入时间。基本上,基于像素/点而不是行数的想法是相同的。通过这种方法,您可以确定一个范围并执行相同的操作,但这比行号方法要困难得多。