Я использую библиотеку PHP PhpSpreadsheet и хотел бы заполнить электронную таблицу (xlsx), используя данные из таблицы MySQL, используя цикл для итерации по ячейкам и строкам, что-то похожее на это:
.------------------------.
|ID first_name last_name |
|1 John Smith |
|2 John Doe |
`------------------------`
Моя таблица будет иметь первую строку в качестве заголовка (полужирный текст), а строки ниже будут данными из MySQL.
Вот сценарий, который я написал для этой цели:
<code>use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$spreadsheet->getActiveSheet()->getStyle('A1:C1')->getFont()->setBold( true );
$header_row_array = ['ID', 'First Name', 'Last Name'];
$spreadsheet->getActiveSheet()->fromArray( $header_row_array, NULL, 'A1' );
global $wpdb;
$query = 'SELECT * FROM custom_table WHERE DATE( ts ) BETWEEN SUBDATE( NOW(), 1) and NOW()';
$rows = $wpdb->get_results( $query, OBJECT );
foreach( $rows as $row ) {
for( $i = 2; $i <= count( $rows ) + 1; $i++ ) {
foreach( range( 'A', 'C' ) as $v ) {
switch( $v ) {
case 'A': {
$value = $row->id;
break;
}
case 'B': {
$value = $row->first_name;
break;
}
case 'C': {
$value = $row->last_name;
break;
}
}
$spreadsheet->getActiveSheet()->setCellValue( $v . $i, $value );
}
}
//echo '<pre>';var_dump( $row );echo '
';} $ writer = new Xlsx ($ электронные таблицы);$ writer-> save ('test.xlsx');
Я также думаю, что эти циклы - грубый способ решить эту проблему, если у вас есть идеи по улучшению, поделитесь!
Результат, который я получаю:
Те же данные строки в каждой строке, как если бы внешний цикл на самом деле не перебирает элементы.
Пожалуйста, сообщите.
Спасибо