2013-05-13 20 views
9

Jestem również nowy w stosunku do php również do phpExcel. Chcę tylko zapisywać dane pocztowe do istniejącego arkusza Excela za każdym razem do nowego wiersza.Dołącz nowy wiersz do pliku excel przy użyciu biblioteki phpExcel

Podczas wyszukiwania w dniu Stackoverflow.com otrzymałem numer biblioteki phpExcel.

Zapisuję poniższy kod z pobierania niektórych próbek.

<?php 

/** Include PHPExcel */ 
require_once 'Classes/PHPExcel.php'; 

$objPHPExcel = new PHPExcel(); 

$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$row, $_POST['name']); 
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$row, $_POST['email']); 
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$row, $_POST['phone']); 
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$row, $_POST['city']); 
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$row, $_POST['kid1']); 
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$row, $_POST['kid2']); 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('myfile.xlsx');  

?> 

ale problem jestem stoi, że nie mam pojęcia, jak dołączyć nowy wiersz do arkusza Excela tak za każdym razem pisał dane zapisane do nowego wiersza.

Wiem, że mój kod jest tylko zapisywanie pliku na dysk za każdym razem za pomocą jednego wiersza, ale muszę dodać nowy wiersz do ostatniego arkusza programu Excel.

+0

Jeśli nie chcesz wstawiać nowego wiersza przed istniejącym wierszem, nie musisz się martwić. set cellValue() doda dane w podanej komórce: jeśli wartość komórki już istnieje, zostanie nadpisana; jeśli nie istnieje, zostanie utworzony. Jeśli potrzebujesz znać numer ostatniego wiersza, użyj metody getHighestRow() z arkusza roboczego lub metody getHighestDataRow(). –

+0

Po prostu chcę dodać nowy wiersz za każdym razem, gdy dane są wysyłane, a mój pakiet excel fiel jest już umieszczony na serwerze. oznacza, że ​​nie chcę stracić starych danych. nowe dane nowy wiersz. – rahularyansharma

+1

W takim przypadku: załaduj plik, wywołaj getHighestRow(), aby uzyskać ostatni użyty wiersz, dodaj go do tej wartości, a następnie napisz nowe dane do tego nowego numeru wiersza –

Odpowiedz

20
<?php 

/** Include PHPExcel */ 
require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/IOFactory.php'; 

$objPHPExcel = PHPExcel_IOFactory::load("myfile.xlsx"); 
$objPHPExcel->setActiveSheetIndex(0); 
$row = $objPHPExcel->getActiveSheet()->getHighestRow()+1; 
//echo $row; 
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$row, $_POST['name']); 
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$row, $_POST['email']); 
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$row, $_POST['phone']); 
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$row, $_POST['city']); 
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$row, $_POST['kid1']); 
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$row, $_POST['kid2']); 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('myfile.xlsx'); 
?> 
3

miałem ten sam problem, i znalazłem rozwiązanie z fromArray metody na arkuszu, a trzeci parametr, startCell

spojrzeć na PHP-Doc:

Worksheet::fromArray 
    Fill worksheet from values in array 
Parameters: 
    array $source 
     Source array, default null 
    mixed $nullValue 
     Value in source array that stands for blank cell, default null 
    string $startCell 
     Insert array starting from this cell address as the top left coordinate, default 'A1' 
    boolean $strictNullComparison 
     Apply strict comparison when testing for null, default false 

tak, po prostu :

<?php 

/** Include PHPExcel */ 
require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/IOFactory.php'; 

$objPHPExcel = PHPExcel_IOFactory::load("myfile.xlsx"); 
$objPHPExcel->setActiveSheetIndex(0); 
$row = $objPHPExcel->getActiveSheet()->getHighestRow()+1; 
//echo $row; 
$rowData = array( 
    array($_POST['name'], $_POST['email'], $_POST['phone'], 
    $_POST['city'], $_POST['kid1'], $_POST['kid2']) 
); //fromArray allow you multi-row append 
$objPHPExcel->getActiveSheet()->fromArray($rowData, null, 'A'.$row); 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('myfile.xlsx'); 
?> 
1
<?php 
    require_once 'PHPExcel.php'; 
    require_once 'PHPExcel/IOFactory.php'; 
    //Update the multiple sheets in PHP excel 
$report_file = 'Report_' . date('Y-m-d') . '.xlsx'; 
$report_file_exists = 0; 
//If the file doesnot exist , create new otherwise append the data at last 
if (!file_exists($report_file)) { 
     $objPHPExcel = new PHPExcel(); 
} else { 
     $report_file_exists = 1; 
     $objPHPExcel = PHPExcel_IOFactory::load($report_file); 
} 

$columns = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); 

//Sheet details 
$sheet_details = array(
         //1st sheet details 
         0 => array('sheet_title' => 'Products', 
            'sheet_heading' => array('Article_Number','Name'), 
            'sheet_data' => array('1234','Pen') 
            ), 
         //2nd Sheet Details 
         1 => array('sheet_title' => 'Categories', 
            'sheet_heading' => array('Category Id','Name'), 
            'sheet_data' => array(123,'Accessories') 
           ) 
        ); 

$sheet_count = 0; 
$row = 1; 
$column = 0; 
while ($sheet_count <= count($sheet_details)) { 
     $objWorkSheet = ''; 
     if ($report_file_exists == 0) { 
      if ($sheet_count > 0) { 
       $objWorkSheet = $objPHPExcel->createSheet($sheet_count); 
      } else { 
       $objWorkSheet = $objPHPExcel->getActiveSheet(); 
      } 
      $row = 1; 
      $column = 0; 
      foreach ($sheet_details[$sheet_count]['sheet_heading'] as $head) { 
       $objWorkSheet->setCellValue($columns[$column] . $row, $head); 
       $column++; 
      } 
     } else { 
      $objPHPExcel->setActiveSheetIndex($sheet_count); 
      $objWorkSheet = $objPHPExcel->getActiveSheet($sheet_count); 
     } 

     $row = $objWorkSheet->getHighestRow() + 1; //row count 
     foreach ($sheet_details[$sheet_count]['sheet_data'] as $report_details) { 
      $column = 0; 
      foreach ($report_details as $data) { 
       $objWorkSheet->setCellValue($columns[$column] . $row, $data); 
       $column++; 
      } 
      $row++; 
     } 

     $objWorkSheet->setTitle($sheet_details[$sheet_count]['sheet_title']); 
     $sheet_count++; 
} 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 

$objWriter->save($report_file); 
?> 
+0

Dodaj opis do swojej odpowiedzi, aby lepiej zrozumieć. –

Powiązane problemy