2016-12-13 2 views
0

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

= INDEX (Лист1 $ E $ 2: $ E $ 100, MATCH (TRUE, EXACT (B16, Лист1 $ A $ 2: $ A $ 100), 0))

Затем я решил экспортировать данные непосредственно из электронной таблицы в базу данных, используя phpExcel's toArray (null, true, true, true) для загрузки рабочего листа в массив. Второй параметр ($ calculateFormulas) является истинным, но phpExcel по-прежнему не может получить значение ячейки для любой ячейки, содержащей функцию индекса соответствия.

Я прочитал в одном посте, чтобы использовать $ objReader-> setReadDataOnly (true) с осторожностью - я дал ему ход, но все равно не повезло.

Одно из решений заключается в том, чтобы открыть таблицу, скопировать каждый лист и вставить специальные значения, но я подумал, что это будет делать $ calculateFormulas в toArray(). Решение не очень привлекательным, как у меня есть около 50 таблиц каждая из которых содержит 5 листов, и они будут приходить на регулярной основе :(

Любые предложения с благодарностью получил.

ответ

0

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

Первоначально у меня была эта формула в каждой ячейке (в этом примере C13) :

  • = IF (ИНДЕКС (DatosIn ! Тел $ N $ 1: $ N $ 77, MATCH (B13, DatosIntel $ H $ 1: $ H $ 77,0)) = 0, $ у $ 1,1)

Теперь я разделил на две части (Q13 и С13):

  • = ПОИСКПОЗ (В13, DatosIntel $ H $ 1: $ H $ 77,0)
  • = ЕСЛИ (ИНДЕКС (DatosIntel $ N 1: $ N 77, Q13,0) = 0, $ Y $ 1,1)

Я даже написал новое содержание С13 с помощью PHPExcel:

  • $ objTpl-> getActiveSheet() -> setCellValue ('C13', '= IF (INDEX (DatosIntel! $ N $ 1: $ N $ 77, Q13,0) = 0, $ Y $ 1,1)');

Похоже, что сложная формула, содержащаяся в одной ячейке, не может быть правильно проанализирована для чтения с использованием PHPExcel.

Надеюсь, это поможет.

+0

Большое спасибо за ответ - не похоже, что многие люди столкнулись с этой проблемой. Я считаю, что ваш подход к расколу формулы работает? – Crookers

+0

Да, это сработало для меня. Аналогичную проблему вы найдете, если попытаетесь объединить более двух строк с помощью «&». Например: = A2 & "text" & B5 ... PhpExcel оставит = A2 и "текст". Но это можно решить с помощью функции Concatenate. – jjavierv

Смежные вопросы