2015-11-19 98 views
2

我有一个问题转换文件feom CSV到XLSX格式:PHPExcel CSV到XLSX

的index.php

<?php 
if (!isset($_FILES["file"])) 
{ 
?> 
<html> 
    <body> 
     <h1>Convert CSV to XLSX</h1> 
     <form action="index.php" method="post" enctype="multipart/form-data"> 
      <input type="file" name="file"/> 
      <input type="submit"/> 
     </form> 
    </body> 
</html> 
<?php 
    exit; 
} 

//obtain PHPExcel from http://phpexcel.codeplex.com 
require_once('Classes\PHPExcel.php'); 
require_once('CSVToExcelConverter.php'); 

if ($_FILES["file"]["error"] > 0) 
{ 
    echo "Error: " . $_FILES["file"]["error"]; 
    exit; 
} 

try 
{ 
    header('Content-type: application/ms-excel'); 
    header('Content-Disposition: attachment; filename='.'example.xlsx'); 

    CSVToExcelConverter::convert($_FILES['file']['tmp_name'], 'php://output'); 
} catch(Exception $e) { 
    echo $e->getMessage(); 
} 

CSVToExcelConverter.php

class CSVToExcelConverter 
{ 
    /** 
    * Read given csv file and write all rows to given xls file 
    * 
    * @param string $csv_file Resource path of the csv file 
    * @param string $xls_file Resource path of the excel file 
    * @param string $csv_enc Encoding of the csv file, use utf8 if null 
    * @throws Exception 
    */ 
    public static function convert($csv_file, $xls_file, $csv_enc=null) { 
     //set cache 
     $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 
     PHPExcel_Settings::setCacheStorageMethod($cacheMethod); 

     //open csv file 
     $objReader = new PHPExcel_Reader_CSV(); 
     if ($csv_enc != null) 
      $objReader->setInputEncoding($csv_enc); 
     $objPHPExcel = $objReader->load($csv_file); 
     $in_sheet = $objPHPExcel->getActiveSheet(); 

     //open excel file 
     $objPHPExcel = new PHPExcel(); 
     $out_sheet = $objPHPExcel->getActiveSheet(); 

     //row index start from 1 
     $row_index = 0; 
     foreach ($in_sheet->getRowIterator() as $row) { 
      $row_index++; 
      $cellIterator = $row->getCellIterator(); 
      $cellIterator->setIterateOnlyExistingCells(false); 

      //column index start from 0 
      $column_index = -1; 
      foreach ($cellIterator as $cell) { 
       $column_index++; 
       $out_sheet->setCellValueByColumnAndRow($column_index, $row_index, $cell->getValue()); 
      } 
     } 

     //write excel file 
     $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
     $objWriter->save($xls_file); 
    } 
} 

CSV文件格式:CSV file opened with Excel

xlsx file I get after conversion

Basicaly我想获得类似于原始csv文件的输出,但是在xmlx格式中,该怎么做?

回答

1

用于在PHPExcel中读取CSV文件的“默认”分隔符是逗号(,)。您的CSV文件使用的不是逗号 - 可能是一个选项卡("\t"),它也常用于此类文件)。

如果这些值不是逗号(并且我们无法从MS Excel中查看的文件图像中分辨出来),那么您必须明确告诉PHPExcel在加载之前该分隔符是什么。

例如

$objReader->setDelimiter("\t"); 
+0

感谢您的回答!这让我对事情变得更清楚了! – JustinasT