2016-01-13 71 views
2

我需要將Excel工作簿中一張紙的內容複製到新的Excel工作簿中的一張紙上。問題是,我不知道這些工作表包含的內容或格式。但是,它只是每次都是第一張。將一張紙的內容和樣式克隆到另一張 - PHP Excel

我嘗試了一種方法,但每次都耗盡內存。所以我想我會一行一行地做100 000行。無論如何,我從一排開始,獲取數據,但沒有運氣寫入新表。我會怎麼做?

這是我到目前爲止有:

// Open the current worksheet 
App::import('Vendor', 'PHPExcel'); 
if (!class_exists('PHPExcel')) { 
    throw new CakeException('Vendor class PHPExcel not found!'); 
$this->xls = PHPExcel_IOFactory::load($path); 

// Read all content 
$this->xls->getActiveSheet()->rangeToArray('A1:ZZZZ1'); 

// Close current worksheet 
$this->xls->disconnectWorksheets(); 

// Delete worksheet 
unlink($destination); 

// Open new worksheet 
$this->xls = new PHPExcel(); 
$newWorksheet = new PHPExcel_Worksheet($this->xls, 'Sheet 1'); 
$this->xls->addSheet($newWorksheet); 
$this->xls->setActiveSheetIndexByName('Sheet 1'); 

// Write all the content 
$this->xls->getActiveSheet()->fromArray($array,null,'A1'); 

// Save current worksheet 
$objWriter = PHPExcel_IOFactory::createWriter($this->xls, 'Excel2007'); 
$objWriter->save($destination); 

我在做什麼錯?

那麼還有一個更簡單的方法來做到這一點?我不想編寫所有這些代碼,最後都是重新發明輪子?

在此先感謝

回答

5

有這麼專門編寫的爲你做這一個內置的方法:

$objPHPExcel1 = PHPExcel_IOFactory::load($path); 
$objPHPExcel2 = new PHPExcel(); 

// Copy active worksheet from $objPHPExcel1 to $objPHPExcel2 
$worksheet = $objPHPExcel1->getActiveSheet(); 
$objPHPExcel2->addExternalSheet($worksheet) 

,如果你正在運行的內存,建設大型陣列內存試試並手動複製不會幫助。

有旨在減少存儲如細胞緩存的方法,看使用那些能夠減少內存使用

+0

有沒有一種方法,我可以迫使它只讀值和造型,而不是公式? – Albert

+0

呃,不...你的公式有什麼問題?它們是細胞/細胞的內容。你爲什麼不要他們? –

+0

沒有真正的問題。如果他們不打算在結果表中使用,就不要看他們的觀點。我想,保持它們並沒有真正的危害......感謝您的幫助! :) – Albert

相關問題