2014-12-16 5 views
1

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

Я извлекал имена столбцов в массиве: column_names, а затем добавляю заголовки и данные в отчет Excel.

// Adding titles 
    $objPHPExcel->setActiveSheetIndex(0) 
       ->setCellValue('A1',$bigTitle); 

    $counter = 0; 
    $let = 'a'; 
    while ($counter <= count($column_names)){ 
     $objPHPExcel->setActiveSheetIndex(0) 
        ->setCellValue(strtoupper($let).'3', $column_names[$counter]); 
     $let++; 
     $counter++; 
    } 


    //Adding data 
    $i = 4; 
    while ($row = $result->fetch_array()) { 
     $counter = 0; 
     $let = 'a'; 
     while ($counter <= count($column_names)){ 
      $objPHPExcel->setActiveSheetIndex(0) 
         ->setCellValue(strtoupper($let).$i, $row[$column_names[$counter]]); 
      $let++; 
      $counter++; 
     } 
     $i++; 
    } 

Я подключение к базе данных с использованием

$conexion = new mysqli('localhost','user','pass','SAT_dbname',21); 

Я клонировал базу данных "SAT_db1" в "SAT_db2". Они имеют точно такую ​​же структуру, но различную информацию. Загрузки работает, если я использую

$conexion = new mysqli('localhost','user','pass','SAT_db1',21); 

Но это не работает, если я использую

$conexion = new mysqli('localhost','user','pass','SAT_db2',21); 

Я не знаю, что это неправильно, если они одинаковые с разными именами. Разве PHPExcel не работает с клонированными базами данных? Что еще это может быть?

Ошибка отображается в браузере как "Файл не найден".

EDIT Я тестировал загрузку весь день, и, наконец, я нашел что-то: я могу скачать, когда у меня есть несколько регистров. Когда у меня есть еще несколько, я не могу.

Я посылаю файл в браузере:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
    header('Content-Disposition: attachment;filename="Report.xlsx"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
    $objWriter->save('php://output'); 

До сих пор не найдено решение.

+0

phpexcel не заботится о вашем дБ. он не знает, что такое db, и ему это не нужно. это ВАШ запрос/выбор кода, который обрабатывает часть db, а затем передает результаты на phpexcel. –

+0

Вы проверяли наличие ошибок подключения к базе данных/запросов? ** Вы проверяете наличие ошибок подключения к базе данных/запросов? –

+0

Я пытался проверить @SalmanA, но я не могу, потому что в браузере отображается только «Файл не найден», «Проверить на наличие ошибок»: / – Aleharu

ответ

0

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

set_time_limit(0) ; 

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; 
$cacheSettings = array('memoryCacheSize' => '500MB'); 
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

Я предполагаю, что если у вас есть большие файлы, вы можете расширить «memoryCacheSize».

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