Я пытаюсь загрузить и записать содержимое уже существующих шаблонов .xlsm и сохранить его как новый файл в другом каталоге. В этих файлах есть макросы, и эти макросы необходимо защищать, как в исходном файле. Я сделал следующие вещи в php, чтобы получить результат:
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require_once dirname(__FILE__) . '/php_excel/Classes/PHPExcel.php';
require_once dirname(__FILE__) . '/php_excel/Classes/PHPExcel/IOFactory.php';
require_once dirname(__FILE__) . '/php_excel/Classes/PHPExcel/Reader/IReadFilter.php';
date_default_timezone_set('Europe/London');
$sheets = array('Welcome', 'Instructions', 'Data Definitions', 'Clothing');
$inputFileName = __DIR__ . '/templates/Clothing.xlsm';
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$this->PHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
$sheetnames = $sheets;
$this->PHPExcelReader->setLoadSheetsOnly($sheetnames);
$this->PHPExcel = $this->PHPExcelReader->load($inputFileName);
$this->PHPExcel->setActiveSheetIndex(3);
// Redirect output to a client’s web browser (Excel2007)
ob_end_clean();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test.xlsm"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($this->PHPExcel, 'Excel2007');
ob_end_clean();
$objWriter->save($this->filename);
$this->PHPExcel->disconnectWorksheets();
unset($this->PHPExcel);
$ this-> имя файла доступно в моем классе.
Все отлично работает. Я получаю точно такой же контент, как и исходный файл, но при включении контента я получаю
Ошибка выполнения '9':
Индекс вне диапазона.
Клонированный файл |
Исходный файл
Я видел количество постов на github и wiki, но не нашел то, что мне было нужно. Это было немного, как близко , но он не получил ответа или просто сказал, что phpexcel не поддерживает файл xlsm. Если да, то какая библиотека лучше всего поддерживает xlsm и макросы? Я застрял в этом с 3 дней.
Любые предложения и помощь действительно приветствуются.
Спасибо.