С этим кодом я получаю книгу со всеми данными на одном листе, мне нужно создать лист для каждого идентификатора организации, поле «ompCustomerOrganizationID» и поместить все данные с этим идентификатором организации на новый лист, а затем переместить к следующему.
Таким образом, я получу рабочую книгу, в которой будет 10 листов, по одному на каждый идентификатор организации
Думаю, мне следует использовать метод addheet ($ myworksheet, 0). Для чего нужно имя и номер листа. Имя должно быть «ompCustomerOrganizationID», а номер листа должен начинаться с 0 и увеличиваться с изменением OrganizationID.
Но как мне создать цикл и проверить наличие изменений в "ompCustomerOrganizationID".
//call the autoload
require 'vendor/autoload.php';
//load phpspreadsheet class using namespaces
use PhpOffice\PhpSpreadsheet\Spreadsheet;
//call iofactory instead of xlsx writer
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
// the connection
$connect =odbc_connect("removed");
if(!$connect) {
exit("Connection Failed: " . $connect);
}
//the sql query
$sql="select ompCustomerOrganizationID,ompSalesOrderID,ompOrderDate, ompRequestedShipDate,ompCustomerPO, ompOrderTotalBase, ompShippingMethodID
from M1_KF.dbo.salesorders
left outer join M1_KF.dbo.Organizations on cmoOrganizationID=ompCustomerOrganizationID
where ompClosed !=-1 AND ompCustomerOrganizationID in ('10464','11265','10805','11956','11976','10041','11790','10168','10250','10876')
order by ompCustomerOrganizationID ,omporderdate";
//run the query
$result =odbc_exec($connect,$sql);
if(!$result){
exit("Error in SQL");
}
//Loop starts here ????????????
$exrow=3;
//make a new spreadsheet object
$spreadsheet = new Spreadsheet();
//get current active sheet (first sheet)
$sheet = $spreadsheet->getActiveSheet();
//set default font
$spreadsheet->getDefaultStyle()
->getFont()
->setName('Arial')
->setSize(10);
//heading
$spreadsheet->getActiveSheet()
->setCellValue('A1',"Open Orders");
//Column headings
$spreadsheet->getActiveSheet()
->setCellValue('A2',"CUSTOMER")
->setCellValue('B2',"ORDER ID")
->setCellValue('C2',"ORDER DATE")
->setCellValue('D2',"SHIP DATE")
->setCellValue('E2',"PO NUMBER")
->setCellValue('F2',"TOTAL")
->setCellValue('G2',"SHIP");
while ($row = odbc_fetch_array($result))
{
//loop through the data
$spreadsheet->getActiveSheet()
->setCellValue('A'.$exrow ,$row['ompCustomerOrganizationID'])
->setCellValue('B'.$exrow ,$row['ompSalesOrderID'])
->setCellValue('C'.$exrow ,$row['ompOrderDate'])
->setCellValue('D'.$exrow ,$row['ompRequestedShipDate'])
->setCellValue('E'.$exrow ,$row['ompCustomerPO'])
->setCellValue('F'.$exrow ,$row['ompOrderTotalBase'])
->setCellValue('G'.$exrow ,$row['ompShippingMethodID']);
$exrow++;
}
//define first row and last row
$firstRow=2;
$lastRow=$exrow-1;
odbc_close($connect);
//set the header first, so the result will be treated as an xlsx file.
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//make it an attachment so we can define filename
header('Content-Disposition: attachment;filename="result.xlsx"');
//create IOFactory object
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
//save into php output
$writer->save('php://output');