将一个 sheet 的内容和样式克隆到另一个 - PHP Excel
Cloning the content and styling of one sheet to another - PHP Excel
我需要将 Excel 工作簿中一个 sheet 的内容复制到新的 excel 工作簿中的 sheet。问题是,我不知道 sheet 包含什么或它们的格式。但是,每次都只会是第一个sheet。
我试过一种方法,但每次都 运行 内存不足。所以我想我会逐行完成 100 000 行。无论如何,我从一行开始,它获取了数据,但没有运气将它写入新的 sheet。我该怎么做?
这是我目前的情况:
// 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);
我做错了什么?
那么还有,有没有更简单的方法呢?我不想写这么多代码到头来都是重新造轮子?
提前致谢
有一个 built-in 方法是专门为您编写的:
$objPHPExcel1 = PHPExcel_IOFactory::load($path);
$objPHPExcel2 = new PHPExcel();
// Copy active worksheet from $objPHPExcel1 to $objPHPExcel2
$worksheet = $objPHPExcel1->getActiveSheet();
$objPHPExcel2->addExternalSheet($worksheet)
如果您 运行 内存不足,在内存中构建大型数组以尝试手动复制将无济于事。
有一些旨在减少内存的方法,例如单元缓存,希望使用这些方法来减少内存使用
我需要将 Excel 工作簿中一个 sheet 的内容复制到新的 excel 工作簿中的 sheet。问题是,我不知道 sheet 包含什么或它们的格式。但是,每次都只会是第一个sheet。
我试过一种方法,但每次都 运行 内存不足。所以我想我会逐行完成 100 000 行。无论如何,我从一行开始,它获取了数据,但没有运气将它写入新的 sheet。我该怎么做?
这是我目前的情况:
// 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);
我做错了什么?
那么还有,有没有更简单的方法呢?我不想写这么多代码到头来都是重新造轮子?
提前致谢
有一个 built-in 方法是专门为您编写的:
$objPHPExcel1 = PHPExcel_IOFactory::load($path);
$objPHPExcel2 = new PHPExcel();
// Copy active worksheet from $objPHPExcel1 to $objPHPExcel2
$worksheet = $objPHPExcel1->getActiveSheet();
$objPHPExcel2->addExternalSheet($worksheet)
如果您 运行 内存不足,在内存中构建大型数组以尝试手动复制将无济于事。
有一些旨在减少内存的方法,例如单元缓存,希望使用这些方法来减少内存使用