2017-06-23 60 views
2

客戶端在製藥行業工作。PHPExcel - 在文檔創建期間獲取當前頁面

我們爲客戶購買的物品打印賬單。

的文檔的一般結構如下:

Header 
List of items 
Footer 

有時會發生這樣的情況,當項目的所有列表融入頁N多。

在這種情況下,頁腳移動到最後一頁。

當地法律禁止這樣的文件,即footer不能單獨。它需要包含至少一個已售出的頭寸。

思考關於實施:

這將是很容易實現,如果我能像setCellValue或fromArray呼叫操作過程中獲取當前頁面。

在這種情況下,我可以檢查我還有多少行,如果我在新的頁面上。 如果我在新的頁面上並且有零個項目,那麼我會在最後一個位置之前添加空行。

因爲Excel的工作方式,我覺得不可能進入phpexcel。

至於現在,我已經在我的腦海裏只有一個骯髒的解決方案:根據用戶請求 創建文件 - >某處存放在臨時文件夾服務器 - >閱讀它,並檢查,如果文檔中有沒有項目最後一頁,如果這是這樣的情況下,我會添加空位並重新創建文檔(某種有限深度的遞歸)。

但是這太混亂的解決方案。有沒有更好的方法來處理這樣的問題?

+0

「頁」是指打印時Excel工作表或實際紙張頁面嗎? – Growiel

+0

打印時的實際頁面 - 例如http://kagda.ru/i/de011358de724_28-06-2017-09:58:21_de01.png – Tebe

+0

像這樣的頁眉和頁腳https://stackoverflow.com/q/19241635/367456? – hakre

回答

2

其實如果格式是固定在打印希望(如字體類型和大小,標題格式,紙張大小等等),那麼您可以檢查有多少行有:

$objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 
//if 0 is the sheet you are working on 

您可以檢查如何很多行是否需要將footer推到新頁面。基本上有一個公式可以你:

$footerWillBeOnSeparateSheet = $allRowCount % $maximumRowPerPage === $nomberOfRowsWhenFooterGetsOnTheNextPage; 

如果$footerWillBeOnSeparateSheet是真實的,那麼你需要添加你所提到的空行。

我會使用不同的方法,而不是添加一個空行。如果$footerWillBeOnSeparateSheet的值爲真,則嘗試將最後兩項和頁腳分隔到不同的頁面中。

編輯:使用getRowHeight()也是一種選擇,儘管這將是難以維持的不同模板的差異。

+0

呃,它如果所有行的高度都是固定的,那麼不幸的是,有時位置或其生產者(或另一列,但概率要低得多)的名稱可能變得非常大 - 大約350個符號,並且比通常需要更多的空間。在實踐中看起來-http://kagda.ru/i/6e0110916e95_28-06-2017-14:25:56_6e01.png。 – Tebe

+0

也許我可以進一步發展這個想法,並做一些計算(提前在手動模式下在紙上)如何許多行將採用具有N個符號的字符串,假設該行帶有200個符號ttakes - 2行,300個符號 - 3行,在這種情況下,可以計算總行數,但我覺得這樣的解決方案有味道......如果我是一個建造者我不會站在這樣的橋下來證明橋樑的作品。仍然upvote,感謝您花費你的時間 – Tebe

+0

這種情況下,你應該遍歷行並使用'getRowHeight()'和總和它。這樣你就可以更精確地計算。 (我不知道是否有任何函數可以得到實際的總高度,但它是一個解決方法來總結一切。)如果我有一段時間以後,我會爲你檢查它。 – Mark