Создайте новый рабочий лист и добавьте соответствующие данные при изменении идентификатора организации.Phpspreadsheet - PullRequest
0 голосов
/ 20 июня 2019

С этим кодом я получаю книгу со всеми данными на одном листе, мне нужно создать лист для каждого идентификатора организации, поле «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');
...