Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel-使列不删除前导零_Php_Excel_Phpexcel - Fatal编程技术网

PHPExcel-使列不删除前导零

PHPExcel-使列不删除前导零,php,excel,phpexcel,Php,Excel,Phpexcel,我目前正在运行代码以获取一个.csv文件,该文件每天都会新建并使用;作为分隔符,并将其导出到excel电子表格中。代码如下: $xlFileName = $outDir."output_".date("n-j-Y").".xls"; require_once 'PHPExcel_1.8.0_doc/Classes/PHPExcel/IOFactory.php'; $objReader = PHPExcel_IOFactory::createReader('CSV'); $objReader-&

我目前正在运行代码以获取一个.csv文件,该文件每天都会新建并使用;作为分隔符,并将其导出到excel电子表格中。代码如下:

$xlFileName = $outDir."output_".date("n-j-Y").".xls";
require_once 'PHPExcel_1.8.0_doc/Classes/PHPExcel/IOFactory.php';
$objReader = PHPExcel_IOFactory::createReader('CSV');

$objReader->setDelimiter(";");
//$objReader->setInputEncoding('UTF-16LE');

$objPHPExcel = $objReader->load($todayFileName);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save($xlFileName);
我遇到的问题是一列是邮政编码,可以以0开头。有没有办法告诉PHPExcel不要在特定列中删除前导零

编辑:

csv内容示例:

Date;Zip Code;Data;Data;Data
10/12/2015;01234; Some Data ; More Data  ; More Data
10/12/2015;12345; Some Data ; More Data  ; More Data
10/12/2015;23456; Some Data ; More Data  ; More Data
10/12/2015;34567; Some Data ; More Data  ; More Data

电子表格中第一个邮政编码的导出始终是1234,而不是01234,因此,问题似乎与将其格式化为文本有关。我逐个单元格地运行,手动添加零,并将其作为字符串插入单元格。当我打开excel文件时,零仍然不见了。单元格被格式化为文本,如果我在Excel中添加一个零,它就会被卡住

所以,我选择了一条完全不同的路线。我每天都要转换几个文件,而邮政编码列并不总是相同的,所以我添加了一些代码来检查它在哪里。下面是设置当前适用于我的格式的代码:

$worksheet = $objPHPExcel->getActiveSheet();
$zipColumn = "ZZ";
foreach ($worksheet->getRowIterator() as $row) {  
  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(false);
  foreach ($cellIterator as $cell) {
    if (!is_null($cell)) {
      if($cell->getColumn() == $zipColumn){
$objPHPExcel->getActiveSheet()->getStyle($cell->getCoordinate())->getNumberFormat()->setFormatCode('[<=99999]00000;00000-0000');
      }
      if(strtolower( $cell->getValue() ) == "zip code"){
        $zipColumn = $cell->getColumn(); 
      }
    }
  }
}
$worksheet=$objPHPExcel->getActiveSheet();
$zipColumn=“ZZ”;
foreach($worksheet->getRowIterator()作为$row){
$cellIterator=$row->getCellIterator();
$cellIterator->setiterateonleyexistingcells(false);
foreach($cellIterator作为$cell){
如果(!为空($cell)){
如果($cell->getColumn()=$zipColumn){

$objPHPExcel->getActiveSheet()->getStyle($cell->getCoordinate())->getNumberFormat()->setFormatCode('[如果有一种方法可以使整个电子表格完全按照输入的内容显示,也可以。csv格式正确。我无法重现您的问题。@drewkroftI很想知道这段代码与您有什么不同,前导零不会丢失!我已经测试过这段代码(有很多变体)在几个不同的系统上,所有的结果都是前导零不会传输到生成的电子表格中。即使调整格式以在电子表格中显示前导零也无济于事。我发现的唯一准工作解决方案是在csv中用撇号包装邮政编码,不幸的是,这会导致在生成的电子表格中,邮政编码也被用撇号包装。我使用了完全相同的代码,得到的电子表格带有零。共享您的完整代码和CSV文件的一部分。tooThis代码就是全部。它接受.CSV文件并从那里开始。将CSV内容添加到我的帖子中。