Редактировать файл excel с помощью PHPExcel

Я пытаюсь использовать PHPExcel для редактирования файла excel, но мой конечный файл оказывается поврежденным. Я предполагаю, что это потому, что файл слишком сложный, но я не уверен. Очень простой файл excel работает без проблем.

Во-первых, PHPExcel читает файл, изменяет данные и затем воссоздает его правильно? Это не просто открытие и запись в тот же файл?

Я получаю сообщение об ошибке:

Неустранимая ошибка: исключить исключение «PHPExcel_Exception» с сообщением «Недопустимая координата ячейки (MAX (MATCH (REP) (« Z »в /Library/WebServer/Documents/sb/Classes/PHPExcel/Cell.php:594 Трассировка стека: # 0 / Библиотека / WebServer / Documents / sb / Classes / PHPExcel / Cell.php (651): PHPExcel_Cell :: coordFromString ('(MAX (MATCH (REPT …') # 1 / Library / WebServer / Documents / sb / Classes / PHPExcel /Cell.php (624): PHPExcel_Cell :: absoluteCoordinate ('(MAX (MATCH (REPT …') # 2 /Library/WebServer/Documents/sb/Classes/PHPExcel/Writer/Excel2007/Workbook.php(438) : PHPExcel_Cell :: absoluteReference ('(MAX (MATCH (REPT …') # 3 /Library/WebServer/Documents/sb/Classes/PHPExcel/Writer/Excel2007/Workbook.php(282): PHPExcel_Writer_Excel2007_Workbook-> writeDefinedNameForPrintArea (Object (PHPExcel_Shared_XMLWriter), Object (PHPExcel_Worksheet), 0) # 4 /Library/WebServer/Documents/sb/Classes/PHPExcel/Writer/Excel2007/Workbook.php(75): PHPExcel_Writer_Excel2007_Workbook-> writeDefinedNames (Object (PHPExcel_Shared_XMLWriter), Object (PHPExcel )) # 5 / Li brary / WebServer / Doc в /Library/WebServer/Documents/sb/Classes/PHPExcel/Cell.php в строке 594

public static function coordinateFromString($pCoordinateString = 'A1') { if (preg_match("/^([$]?[AZ]{1,3})([$]?\d{1,7})$/", $pCoordinateString, $matches)) { return array($matches[1],$matches[2]); } elseif ((strpos($pCoordinateString, ':') !== false) || (strpos($pCoordinateString, ',') !== false)) { throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); } elseif ($pCoordinateString == '') { throw new PHPExcel_Exception('Cell coordinate can not be zero-length string'); } throw new PHPExcel_Exception('Invalid cell coordinate '.$pCoordinateString); // line 594 } 

Это файл excel, который я использую. Идеи?

Мой PHP-код:

 /** Error reporting */ error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); date_default_timezone_set('America/Los_Angeles'); define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); date_default_timezone_set('America/Los_Angeles'); /** * PHPExcel * * Copyright (c) 2006 - 2015 PHPExcel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * @category PHPExcel * @package PHPExcel * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL * @version ##VERSION##, ##DATE## */ /** PHPExcel */ require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; //echo date('H:i:s') , " Load from Excel2007 file" , EOL; $objReader = PHPExcel_IOFactory::createReader("Excel2007"); $objReader->setIncludeCharts(TRUE); $objPHPExcel = $objReader->load("templates/Cue_Sheet_Template.xlsx"); echo date('H:i:s') , " Update cell data values that are displayed in the chart" , EOL; $objWorksheet = $objPHPExcel->getActiveSheet(); /*$objWorksheet->fromArray( array( array(50-12, 50-15, 50-21), array(50-56, 50-73, 50-86), array(50-52, 50-61, 50-69), array(50-30, 50-32, 50), ), NULL, 'B2' );*/ // Save Excel 2007 file echo date('H:i:s') , " Write to Excel2007 format" , EOL; $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->setIncludeCharts(TRUE); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; // Echo memory peak usage echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL; // Echo done echo date('H:i:s') , " Done writing file" , EOL; echo 'File has been created in ' , getcwd() , EOL; 

EDIT (исходный ответ ниже)

Я получил успешный результат. То, что я сделал, это скопировать содержимое вашего файла шаблона xlsx. Откройте новый лист Excel и вставьте содержимое из исходного шаблона. Я удалил некоторые условные функции, которые определили некоторые поля, и теперь я получаю достойный результат с вашим форматированием на месте.

Вот предварительный файл.

введите описание изображения здесь

ОРИГИНАЛ

Извините, это не тот ответ, который вы хотите. PHPExcel не выполняет анализ диапазона печати.

Ваше решение должно заново переопределить вашу область печати во что-то, что PHPExcel может проанализировать, или написать собственный собственный парсер для PHPExcel с использованием regex (т.е. preg_split), который не просто разделяет значения диапазона.

В основном вы берете лист Excel, вставляете значения и пытаетесь вывести новый лист excel.

Если вы закомментируете

throw new PHPExcel_Exception('Invalid cell coordinate '.$pCoordinateString); // line 594

то вы получите новый лист excel с форматированием, разрушенным.

Проблема заключается в вашей области печати

 A1:A1,0:0,0:0,(MAX(MATCH(REPT("Z":MAX(MATCH(REPT("Z",29):29),B:B,1):1),MATCH(REPT("Z":MATCH(REPT("Z",29):29),C:C,1):1),MATCH(REPT("Z":MATCH(REPT("Z",29):29),L:L,1):1),MATCH(REPT("Z":MATCH(REPT("Z",29):29),M:M,1):1),MATCH(REPT("Z":MATCH(REPT("Z",29):29),N:N,1):1),MATCH(REPT("Z":MATCH(REPT("Z",29):29),O:O,1))):1))),18):18) 

который PHPExcel решает взорваться «:», который находится сразу после «Z».

Я попытался переопределить вашу область печати, но не смог. У меня нет времени, чтобы попробовать это сейчас. Надеюсь, это приведет вас в правильном направлении.

  • Ошибка XLSX в CSV из памяти
  • Python Копирование определенных строк из .csv в .xlsx, учитывая, что конкретное значение находится в третьем столбце
  • PHPExcel создает поврежденный файл, если я использую метки оси X
  • pivotTable.addDataColumn (1, true), вызывающий нечитаемую ошибку в файлах Excel Apache POI
  • Excel в XML, когда XSD включает рекурсивные структуры в виде списка списков
  • openpyxl создает сломанную книгу
  • Эффективно конвертировать .xslx в .csv в C #?
  • Чтение файла xlsx int vb.net VS 2012
  • Загрузка файла Excel с использованием Java
  • итерация по ряду строк с использованием ws.iter_rows в оптимизированном считывателе openpyxl
  • Что такое альтернативы microsoft excel для редактирования форматов .xlsx, которые бесплатны?
  • Давайте будем гением компьютера.