【问题标题】:PHPExcel - make column not drop leading zerosPHPExcel - 使列不删除前导零
【发布时间】:2015-10-12 19:36:48
【问题描述】:

我目前正在运行代码来获取一个 .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

【问题讨论】:

  • 如果有一种方法可以使整个电子表格完全按照输入的方式显示,那也可以。 .csv 格式正确。
  • 我无法重现您的问题。 @drewkroft
  • 我真的很想知道这段代码不会丢失前导零对你来说有什么不同!我已经在几个不同的系统上测试了这个确切的代码(任何许多变体),所有的结果是前导零不会传输到生成的电子表格中。即使调整格式以在电子表格中显示前导零也无济于事。我发现的唯一准可行的解决方案是将邮政编码包装在 csv 中的撇号中,不幸的是,这会导致邮政编码也被包装在生成的电子表格中的撇号中。
  • 我使用了完全相同的代码并获得了带有零的电子表格。也分享您的完整代码和部分 CSV 文件
  • 只有这段代码。它需要 .csv 文件并从那里开始。将 csv 内容添加到我的帖子中。

标签: php excel phpexcel


【解决方案1】:

因此,问题似乎与将其格式化为文本有关。我逐个单元格地运行并手动添加零并将其作为字符串插入到单元格中。当我打开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(); 
      }
    }
  }
}

如果其他人遇到类似问题,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2018-10-14
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多