2013-05-13 153 views
9

我是新來的PHP以及phpExcel。我只想將發佈的數據保存到現有的excel表格中,每次都將其保存到新的行中。使用phpExcel庫追加新行到Excel文件

當我在Stackoverflow.com上搜索時,我得到了庫phpExcel的參考。

我從記錄一些樣本中記下下面的代碼。

<?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');  

?> 

但我面臨的問題是我不知道如何將新行添加到Excel表中,因此每次發佈數據都保存到新行。

我知道我的這段代碼每次只用一行將文件保存到磁盤,但是我需要在excel表單中追加新行。

+0

除非您想要在現有行之前插入新行,否則您無需擔心。 set cellValue()會在你指定的單元格中添加數據:如果一個單元格的值已經存在,它將被覆蓋;如果它不存在,那麼它將被創建。如果您需要知道最後一行的編號,請使用工作表的getHighestRow()方法或getHighestDataRow()方法 – 2013-05-13 06:31:01

+0

我只是想在每次發佈數據時添加新行,並且我的excel場已放置在服務器上。意味着我不想丟失舊數據。新數據新行。 – rahularyansharma 2013-05-13 06:32:38

+1

在這種情況下:加載文件,調用getHighestRow()獲取最後一行,將其添加到該值,然後將新數據寫入新行號 – 2013-05-13 06:33:39

回答

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

我有同樣的問題,我發現解決方案從fromArray方法對錶和第三個參數,startCell

對PHP督一看:

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 

,只需:

<?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

爲了更好的理解,在你的答案中添加一些描述。 – 2016-01-13 06:27:26