克隆一张纸的内容和样式到另一张 - PHP Excel

时间:2016-01-13 18:37:21

标签: php excel phpexcel

我需要将Excel工作簿中的一个工作表的内容复制到新的Excel工作簿中的工作表。问题是,我不知道工作表包含什么或他们的格式。但是,它每次只会是第一张。

我尝试了一种方法,但每次都会耗尽内存。所以我以为我会一行一行地做10万行。无论如何,我从一行开始,它获取数据,但没有运气写入新表。我该怎么做?

这是我到目前为止所做的:

// 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);

我做错了什么?

那么,还有更简单的方法吗?我不想写所有这些代码,最后它们都重新发明了轮子?

提前致谢

1 个答案:

答案 0 :(得分:5)

有一种内置方法专门为您执行此操作:

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

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

如果你的内存不足,在内存中构建大型数组以尝试手动复制并不会有帮助。

有一些方法可以减少内存,例如单元缓存,看看是否使用它们来减少内存使用