Неправильная печать больших данных в PHPexcel из oci_fetch_array

Добрый день!

Пожалуйста, мне нужна помощь с моим кодом. У меня есть запрос, который считывает большой объем данных и печатает их с помощью oci_fetch_array, но мне нужно экспортировать их в электронную таблицу Excel.

Я использую код для PHPexcel 01simple-download-xls и заполняю данные:

$result = oci_parse($connect, $query);

oci_execute($result);

while (($row = oci_fetch_array($result, OCI_BOTH)) != false){
$columna = 0;


        foreach ($row as $key => $valor) {

            $objPHPExcel->getActiveSheet()->setCellValue('A' . $columna,  $valor);


           $columna++; 

        }


}

oci_free_statement($result);
oci_close($connect);

Но в электронной таблице показаны только первые данные моего бд, а мне нужно все это.

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

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

Как распечатать строку данных в столбцах?

Спасибо!


person Community    schedule 27.05.2016    source источник
comment
Все в порядке. Я просто вычитаю. Редактирование сообщества - это вещь здесь. Вы не возражаете, если я удалю немного в конце о вашем английском?   -  person Nissa    schedule 28.05.2016


Ответы (1)


Адрес ячейки MS Excel содержит идентификатор столбца и идентификатор строки. Идентификаторы столбцов представляют собой буквы (A, B, C и т. д.); Идентификаторы строк — это числа (1, 2, 3 и т. д.): поэтому адрес ячейки, такой как B3, представляет собой столбец B и строку 3. (Как вы можете видеть на вашей картинке)

Вы используете переменную $columna, объединяете ее с A, чтобы определить адрес ячейки, такой как A1, и увеличиваете его для каждого элемента, поэтому ваши адреса ячеек A1,A2, A3 и т. д. всегда столбец A. Таким образом, все ваши данные будут в этом первом столбце. (Вы также начинаете со строки 0, которой не существует.

Измените свой код, чтобы он работал как со строкой, так и со столбцом, указав себе адрес ячейки:

$rowNumber = 1;
while (($row = oci_fetch_array($result, OCI_BOTH)) != false){
    $columna = 'A';
    foreach ($row as $key => $valor) {
        $objPHPExcel->getActiveSheet()->setCellValue($columna . $rowNumber,  $valor);
        $columna++; 
    }
    $rowNumber++;
}

Начните со строки 1, а не строки 0. Сброс столбца после каждой $строки

Есть более простые способы сделать это, но если вы не понимаете концепцию адресов ячеек, вам будет сложно работать с файлами Excel.

person Mark Baker    schedule 27.05.2016
comment
не работает, покажите мне ошибку. Примечание: преобразование массива в строку в /var/www/html/consultaprocesado/PHPExcel_1.8.0_doc/Examples/01simple-download-xls.php в строке 148. Неустранимая ошибка:... - person ; 28.05.2016
comment
Позвольте мне угадать, какая строка 148..... нет, я не могу угадать, я не вижу ваш код, я понятия не имею, что такое строка 148..... если вам нужна помощь, у вас есть чтобы дать нам случайную подсказку, а не просто сказать, что это не работает - person Mark Baker; 28.05.2016
comment
Извините за это, я пытаюсь поместить весь код, но не могу tnks за помощь - person ; 28.05.2016
comment
Хорошо, плохо... Я использовал ту же переменную $row для номера строки Excel, которую вы используете для строки базы данных.... Я изменил свой код в ответе, чтобы использовать другое имя переменной - person Mark Baker; 28.05.2016
comment
Вы также можете изменить OCI_BOTH на OCI_ASSOC или OCI_NUM в операторе fetch_array(), чтобы избежать дублирования данных. - person Mark Baker; 28.05.2016
comment
tnks за помощь @mark-baker, и боже мой, но я все еще показываю ошибку Неустранимая ошибка: разрешенный размер памяти 134217728 байт исчерпан (попытка выделить 72 байта) в CacheBase.php в строке 173, а это строка 173 public function getCellList() { return array_keys($this-›_cellCache); } // функция getCellList() - person ; 31.05.2016
comment
Я не могу увеличить объем памяти, который позволяет использовать ваш PHP, это можете сделать только вы; или, в качестве альтернативы, посмотрите на некоторые из методов кэширования, которые PHPExcel предоставляет для уменьшения использования памяти. - person Mark Baker; 31.05.2016