PHPExcel - Существующие функции массива превращаются в обычные функции? - PullRequest
0 голосов
/ 24 июня 2010

Приветствую всех,

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

Ниже приведена сокращенная версия того, что я пытаюсь выполнить:

$excelFile = new PHPExcel();
$fileName = 'blah.xlsx';

$excelReader = PHPExcel_IOFactory::createReader('Excel2007');
$excelFile = $excelReader->load($fileName);

//first sheet contains formulas to process the resulting dump
$excelFile->setActiveSheetIndex(1);

// just to illustrate what's used when retrieving data
...
while($record =  db_fetch_object($queryResult)) {
  $excelFile->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $record->field);
}

$excelWriter = PHPExcel_IOFactory::createWriter($excelFile, 'Excel2007');
$excelWriter->save($fileName);

После запуска сценарияформула, которая когда-то выглядела как:

{= SUM (A1: C6)}

Теперь выглядит как:

= SUM(A1: C6)

Заранее благодарим за ваше понимание и вклад

Тони

Ответы [ 2 ]

1 голос
/ 07 июля 2010

Кажется, что объект ячейки PHPExcel не обрабатывает атрибуты элемента формулы, поэтому такие вещи, как "t = array", будут потеряны к тому времени, когда вы перейдете к createWriter.

Чтобы решить эту проблему, мы 'Мы внесли изменения в ячейку и классы чтения и записи Excel2007.

В cell.php:

private $_formulaAttributes;

// getter and setter functions

В reader / excel2007.php:

строка 769 - после$ this-> castToFormula ...

if(isset($c->f['t'])){
  $attributes = array();
  $attributes = $c->f;
  $docSheet->getCell($r)->setFormulaAttributes($attributes);
}

In Writer / excel2007 / worksheet.php:

строка 1042 - после регистра 'f':

$attributes = $pCell->getFormulaAttributes();
if($attributes['t'] == 'array') {
  $objWriter->startElement('f');
  $objWriter->writeAttribute('t', 'array');
  $objWriter->writeAttribute('ref', $pCell->getCoordinate());
  $objWriter->writeAttribute('aca', '1');
  $objWriter->writeAttribute('ca', '1');
  $objWriter->text(substr($pCell->getValue(), 1));
  $objWriter->endElement();
} else {
  $objWriter->writeElement('f', substr($pCell->getValue(), 1));
}

надеюсь, это кому-нибудь поможет ...

0 голосов
/ 07 июля 2010

К сожалению, читатели и писатели PHPExcel еще не поддерживают формулы массивов.Я полагал, что читатель / писатель Excel2007 сделал, но ваш опыт подсказывает обратное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...