PHPExcel, как установить значение ячейки динамически - PullRequest
47 голосов
/ 06 апреля 2010

Как динамически установить значение ячейки / столбца с помощью библиотеки PHPExcel?

Я получаю набор результатов из базы данных MySQL и хочу записать данные в формате Excel с использованием библиотеки PHPExcel. Глядя на пример

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'cell value here');

указывает на то, что мы должны жестко кодировать ссылку на ячейку / столбец как «A1», а затем записывать в ячейку / столбец A1 Как я могу увеличить ячейку / столбец и / или ссылку на строку на основе строк и соответствующих значений столбцов из набора результатов?

Пожалуйста, руководство.

Ответы [ 2 ]

114 голосов
/ 06 апреля 2010

Я полагаю, вы уже подключились к своей базе данных.

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

$row = 1; // 1-based index
while($row_data = mysql_fetch_assoc($result)) {
    $col = 0;
    foreach($row_data as $key=>$value) {
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
        $col++;
    }
    $row++;
}
6 голосов
/ 06 апреля 2010

У меня нет большого опыта работы с php, но с логической точки зрения это то, что я бы сделал.

  1. Перебрать ваш набор результатов из MySQL
  2. В Excel вы уже должны знать, что такое A, B, C, потому что это столбцы, и вы знаете, сколько столбцов вы возвращаете.
  3. Номер строки можно просто увеличивать с каждым циклом.

Ниже приведен псевдокод, иллюстрирующий эту технику:

    for (int i = 0; i < MySQLResults.count; i++){
         $objPHPExcel->getActiveSheet()->setCellValue('A' . (string)(i + 1), MySQLResults[i].name); 
        // Add 1 to i because Excel Rows start at 1, not 0, so row will always be one off
         $objPHPExcel->getActiveSheet()->setCellValue('B' . (string)(i + 1), MySQLResults[i].number);
         $objPHPExcel->getActiveSheet()->setCellValue('C' . (string)(i + 1), MySQLResults[i].email);
    }
...