2012-08-10 149 views
1

即時通訊使用這幾行轉換一個xlsx,其中包含4sheets轉換爲.csv。但它只轉換xlsx文件的第一張。我怎麼能使它轉換每一張xlsx。繼承人的代碼,PHPExcel將多個xlsx轉換爲csv

error_reporting(E_ALL); 
    date_default_timezone_set($this->vendor_timezone); 

    /** PHPExcel_IOFactory */ 

    require_once sfConfig::get('sf_root_dir').'/lib/PHPExcel/IOFactory.php'; 

    $file=sfConfig::get("sf_upload_dir").DIRECTORY_SEPARATOR."temp".DIRECTORY_SEPARATOR."1344500254_MyExcel.xlsx"; 

    // Check prerequisites 
    //print sfConfig::get("sf_upload_dir").DIRECTORY_SEPARATOR."temp".DIRECTORY_SEPARATOR; exit; 
    if (!file_exists($file)) { 
     exit($file."Please run 06largescale.php first.\n"); 
    } 

    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 

    $objPHPExcel = $objReader->load($file); 

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 

    $objWriter->save(str_replace('.xlsx', '.csv',$file)); 
    return "success"; 

回答

1

寫入每個片材依次到不同的文件,然後串聯這些文件到一個:PHPExcel不提供到多張紙寫入一個CSV文件的選項。

+0

哦,那就是爲什麼。太糟糕了。在使用

$objReader->setLoadSheetsOnly($sheetname); $objPHPExcel = $objReader->load($file);
轉換之前,我已經指定了該工作表。非常感謝! – 2012-08-13 04:00:51

+0

只是要清楚,沒有辦法寫入單個CSV,但如果您查看我的答案,則可以輕鬆地將每個工作表寫入不同的CSV文件。 – 2015-06-18 01:28:05

5

請檢查這裏的教程,有一步一步的代碼來實現這一

<?php 
require_once 'PHPExcel/PHPExcel/IOFactory.php'; 
$excel = PHPExcel_IOFactory::load("test123.xlsx"); 
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV'); 
$writer->setDelimiter(";"); 
$writer->setEnclosure(""); 
$writer->save("test123.csv"); 
?> 
+0

excel表中的整行轉換爲單一索引,所有列都變成單一值 – 2016-11-17 07:13:43

3

要轉換,必須遍歷所有工作表通過所有工作表,並將其設置爲活動工作表,然後寫一個文件。

$inFile = 'fileWithMultipleWorksheet.xlsx'; 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objPHPExcel = $objReader->load($inFile); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');  

$index = 0; 
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 

    $objPHPExcel->setActiveSheetIndex($index); 

    // write out each worksheet to it's name with CSV extension 
    $outFile = str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv"; 

    $objWriter->setSheetIndex($index); 
    $objWriter->save($outFile); 

    $index++; 
}