2013-05-10 4 views
3

Excel의 Excel 파일에 행에 양식 데이터를 입력하는 스크립트가 있습니다. 양식이 전송 될 때마다 새 데이터가 동일한 Excel 파일에 추가됩니다.많은 행이 추가됩니다 PHPExcel

문제는 새 데이터가 두 행으로 추가된다는 것입니다. 빈 행이 각 행 사이에 삽입됩니다.

다음은 코드입니다. $ data는 $ _POST 데이터를 포함합니다.

function generateExcel($data) { 
    $filename = dirname(__FILE__).'/myexcelfile.xlsx'; 

    // this is shortened 
    $columns = array(
     'fieldname1' => 'Column 1', 
     'fieldname2' => 'Column 2', 
    ); 

    // check if file exist 
    if(file_exists($filename)) { 

     // load existing excel file 
     $objPHPExcel = PHPExcel_IOFactory::load($filename); 

    } else { 

     // Create new PHPExcel object 
     $objPHPExcel = new PHPExcel(); 
     $objWorksheet = $objPHPExcel->getActiveSheet(); 

     $objWorksheet->insertNewRowBefore(1, 1); 

     // Set column names 
     $columnIndex = 0; 
     foreach($columns as $columnName) { 
      $objWorksheet->setCellValueByColumnAndRow($columnIndex, 1, $columnName); 
      $columnIndex++; 
     } 
    } 

    // get sheet and highest row 
    $objWorksheet = $objPHPExcel->getActiveSheet(); 
    $numberOfRows = $objPHPExcel->getActiveSheet()->getHighestRow(); 

    // Insert a new row after highest row 
    $objWorksheet->insertNewRowBefore($numberOfRows + 1, 1); 

    // Get the highest row again (should be one more since last time) 
    // $numberOfRows2 = $objPHPExcel->getActiveSheet()->getHighestRow(); 

    // Insert data for each column 
    $columnIndex = 0; 
    foreach($columns as $fieldName => $columnName) { 
     $fieldValue = $data[$fieldName]; 

     $objWorksheet->setCellValueByColumnAndRow($columnIndex, $numberOfRows + 1, $fieldValue); 

     $columnIndex++; 
    } 

    // Save Excel 2007 file 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
    $objWriter->save($filename); 
} 

내가 사용하는 것입니다 : https://stackoverflow.com/a/12417477

http://i.imgur.com/eYIIktZ.png

+0

NewRowBefore()를 삽입 할 필요가 없습니다. 문제가 발생할 가능성이 높습니다. –

+0

@MarkBaker 문제가 해결되지 않는 것 같습니다. 첫 번째 양식 데이터가 2 행에 추가되었지만 두 번째 입력이 4 행에 추가되고 다음 입력이 행 6에 추가되었습니다. – Patrik

+0

getHighestRow()는 새로운 행을 삽입하여 변경되지 않습니다. 순전히로드시 가장 높은 행 값. –

답변

0

난 그냥 생각이 있음을, 우리는이

$objWorksheet->setCellValueByColumnAndRow($columnIndex,"",$columnName); 

대신 시도 할 수 있습니다

$objWorksheet->setCellValueByColumnAndRow($columnIndex, 1, $columnName); 
+0

그 방법은 다음과 같이 보이기 때문에 오류가 발생합니다 : setCellValueByColumnAndRow (columnindex, rowindex, cellvalue); – Patrik

+0

ok @Patrik, 의견을 보내 주셔서 감사합니다. – SagarPPanchal

관련 문제