2013-10-09 2 views
1

phpexcel을 사용하여 템플릿 구매 주문을 설정하려고합니다. 구입 항목에 대한 자세한 내용은 25 ~ 43 열을 설정했습니다. 그것은 데이터베이스에서 데이터를 검색하고 열 25의 모든 값을 43으로 설정 함을 의미합니다. 또한이 열은 6 개의 항목에만 적합 할 수 있습니다. 구매 항목이 너무 많아서 내가 설정 한 항목에 맞지 않을 때 문제가 발생합니다. 코드가 작동하지만 시간이 너무 깁니다. 누구나 더 나은 해결책이 있습니까? 두 시트를 모두 작성한 후에는 두 시트 모두에서 다른 셀 값을 하나씩 설정해야합니다. 코드가 매우 길어집니다. 누가 도움을 줄 수 있는지 알려주십시오.phpexcel에서 새 시트를 만들고 셀 값을 설정하십시오.

$objPHPExcel->setActiveSheetIndex(0); 

    $result = mysql_query("SELECT purchasematerial.PONum,purchasematerial.QuoNum,purchasematerial.date,   material.product,purchasematerial.description,purchasematerial.unit_price,purchasematerial.UOM,purchasematerial.qua  ntity ,purchasematerial.amount FROM purchasematerial INNER JOIN material ON  purchasematerial.product=material.id where PONum='$PONum'"); 
    $col=25; 
    $num=1; 
    while($row = mysql_fetch_array($result)){ 

if($col<43){ 
$objPHPExcel->getActiveSheet()->setCellValue('AA11', $row['PONum']); 
$date = new DateTime($row['date']); 
$objPHPExcel->getActiveSheet()->setCellValue('AA12', $date->format('d-M-y')); 
$objPHPExcel->getActiveSheet()->setCellValue('I45', '=AA12+7'); 
$QuoNum=$row['QuoNum']; 
if ($QuoNum=='' || $QuoNum== null) 
$objPHPExcel->getActiveSheet()->setCellValue('I47', "N/A"); 
else 
$objPHPExcel->getActiveSheet()->setCellValue('I47', $row['QuoNum']); 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$col, $num); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$col, $row['product']); 
$objPHPExcel->getActiveSheet()->SetCellValue('J'.$col, $row['description']); 
$objPHPExcel->getActiveSheet()->SetCellValue('S'.$col, $row['unit_price']); 
$objPHPExcel->getActiveSheet()->setCellValue('V'.$col, $row['UOM']); 
$objPHPExcel->getActiveSheet()->SetCellValue('Y'.$col, $row['quantity']); 
$objPHPExcel->getActiveSheet()->SetCellValue('AB'.$col, $row['amount']); 
$col=$col+3; 
$num++; 
} 

else{ 

$objPHPExcel->createSheet(); 
$objPHPExcel->setActiveSheetIndex(1); 
$col=25; 
$objPHPExcel->getActiveSheet()->setCellValue('AA11', $row['PONum']); 
$date = new DateTime($row['date']); 
$objPHPExcel->getActiveSheet()->setCellValue('AA12', $date->format('d-M-y')); 
$objPHPExcel->getActiveSheet()->setCellValue('I45', '=AA12+7'); 
$QuoNum=$row['QuoNum']; 
if ($QuoNum=='' || $QuoNum== null) 
$objPHPExcel->getActiveSheet()->setCellValue('I47', "N/A"); 
else 
$objPHPExcel->getActiveSheet()->setCellValue('I47', $row['QuoNum']); 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$col, $num); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$col, $row['product']); 
$objPHPExcel->getActiveSheet()->SetCellValue('J'.$col, $row['description']); 
$objPHPExcel->getActiveSheet()->SetCellValue('S'.$col, $row['unit_price']); 
$objPHPExcel->getActiveSheet()->setCellValue('V'.$col, $row['UOM']); 
$objPHPExcel->getActiveSheet()->SetCellValue('Y'.$col, $row['quantity']); 
$objPHPExcel->getActiveSheet()->SetCellValue('AB'.$col, $row['amount']); 
$col=$col+3; 
$num++; 
} 
} 

$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getActiveSheet()->getStyle('I45')->getNumberFormat()- >setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15); 
$objPHPExcel->getActiveSheet()->setCellValue('AC1', 'WEEKNUM(I45)'); 
$objPHPExcel->getActiveSheet()->setCellValue('Q44', 'TOTAL'); 
$objPHPExcel->getActiveSheet()->SetCellValue('Y44','RM'); 
$objPHPExcel->getActiveSheet()->SetCellValue('AB44', '=SUM(AB25:AB43)'); 
$objPHPExcel->getActiveSheet()->getStyle('Q44')->getFont()->setBold(true); 
$objPHPExcel->getActiveSheet()->getStyle('Y44')->getFont()->setBold(true); 
$objPHPExcel->getActiveSheet()->getStyle('AA44')->getFont()->setBold(true); 

$objPHPExcel->setActiveSheetIndex(1); 
$objPHPExcel->getActiveSheet()->getStyle('I45')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15); 
$objPHPExcel->getActiveSheet()->setCellValue('AC1', 'WEEKNUM(I45)'); 
$objPHPExcel->getActiveSheet()->setCellValue('Q44', 'TOTAL'); 
$objPHPExcel->getActiveSheet()->SetCellValue('Y44','RM'); 
$objPHPExcel->getActiveSheet()->SetCellValue('AB44', '=SUM(AB25:AB43)'); 
$objPHPExcel->getActiveSheet()->getStyle('Q44')->getFont()->setBold(true); 
$objPHPExcel->getActiveSheet()->getStyle('Y44')->getFont()->setBold(true); 
$objPHPExcel->getActiveSheet()->getStyle('AA44')->getFont()->setBold(true); 

답변

0

유창한 인터페이스를 사용하는 것이 하나의 방법 일 수 있습니다.

대신

$objPHPExcel->getActiveSheet()->setCellValue('I47', $row['QuoNum']); 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$col, $num); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$col, $row['product']); 
$objPHPExcel->getActiveSheet()->SetCellValue('J'.$col, $row['description']); 
$objPHPExcel->getActiveSheet()->SetCellValue('S'.$col, $row['unit_price']); 
$objPHPExcel->getActiveSheet()->setCellValue('V'.$col, $row['UOM']); 
$objPHPExcel->getActiveSheet()->SetCellValue('Y'.$col, $row['quantity']); 
$objPHPExcel->getActiveSheet()->SetCellValue('AB'.$col, $row['amount']); 

의 세포가 처음으로 동일 당신이 지속적으로, 두 번째 시트의 설정 방법 $objPHPExcel->getActiveSheet()

호출하지 않을 것을

$objPHPExcel->getActiveSheet()->setCellValue('I47', $row['QuoNum']) 
    ->setCellValue('A'.$col, $num) 
    ->setCellValue('B'.$col, $row['product']) 
    ->SetCellValue('J'.$col, $row['description']) 
    ->SetCellValue('S'.$col, $row['unit_price']) 
    ->setCellValue('V'.$col, $row['UOM']) 
    ->SetCellValue('Y'.$col, $row['quantity']) 
    ->SetCellValue('AB'.$col, $row['amount']); 

그렇게; 셀 값을 설정하고 그 함수를 두 번 호출하는 함수를 만들 수 있습니다 (기본 PHP 101). 또는 첫 번째 시트의 셀을 설정 한 다음 해당 시트를 복제하고 두 번째 시트로 복제본을 설정할 수 있습니다.

+0

yx 제안을위한 thx. – jannet

+0

$ objPHPExcel-> getActiveSheet() -> getPageSetup() -> setRowsToRepeatAtTopByStartAndEnd (1, 23);을 사용하는 다른 솔루션을 찾았습니다. – jannet

+0

반복 할 행이 전혀 똑같은 일을하지 않는다는 것을 알고 있습니다. 인쇄 옵션과 관련이 있습니다. –

관련 문제