【问题标题】:How to remove apostrophe before date in PHP spreadsheet如何在 PHP 电子表格中删除日期前的撇号
【发布时间】:2023-03-02 22:19:02
【问题描述】:

我正在使用php Spreadsheet包来生成和下载csv文件,

它在数字前加上撇号。

   public function downloadCsv()
   {
       $spreadsheet = new Spreadsheet();
       $spreadsheet->getProperties()
                   ->setCreator("ABC")
                   ->setTitle("Test");
       $spreadsheet->setActiveSheetIndex(0)
                   -> setCellValue('A1', '01/02/92')
                   ->setCellValue('A2', '01/02/92')
                   ->setCellValue('A3', '01/04/92');

       $filename = 'hello world';
       $spreadsheet->setActiveSheetIndex(0);
       $spreadsheet->getActiveSheet()->setAutoFilter(
            $spreadsheet->getActiveSheet()
        ->calculateWorksheetDimension()
        );

       header('Content-Type: application/     vnd.openxmlformats-officedocument.spreadsheetml.sheet');
       header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
       header('Cache-Control: max-age=0');
       $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
       $writer->save('php://output');
}

我得到的输出

     '01/02/92
     '01/02/92
     '01/04/92

现在如何去掉数字前的撇号?? 谢谢

【问题讨论】:

  • 单撇号是为了让 Excel 可以将其识别为文本。您应该指定列的类型(即日期)。
  • 有人遇到了同样的问题 (stackoverflow.com/questions/35673245/…)。请注意,PHPExcel 是旧版本的 PHPSpreadsheet。我在导出 CSV 文件时遇到了同样的问题。显然,外壳格式不正确。我不得不把单引号放在一边。

标签: php codeigniter phpspreadsheet


【解决方案1】:

您需要将该字符串转换为 MS Excel 序列化时间戳,然后将格式掩码应用于单元格。

除非您应用值绑定器来执行此操作,否则 PHPSpreadsheet 不会神奇地为您执行此操作,而默认值绑定器不会。

PhpOffice\PhpSpreadsheet\Shared\Date 类(分别为excelToTimestamp()excelToDateTimeObject())中可以找到在 unix 时间戳或 PHP DateTime 对象和 MS Excel 时间戳之间进行日期转换的函数,但您需要转换该字符串首先到一个 unix 时间戳或 DateTime 对象,可能使用类似 DateTime::createFromFormat() 方法的东西。我不知道你的格式是d/m/y 还是m/d/y,但是该函数的文档应该会告诉你如何使用它。

附:阅读PHPSpreadsheet documentation可以为你解答很多这类问题

【讨论】:

    【解决方案2】:

    将单元格值datatypestring设置为date

    $spreadsheet->getActiveSheet()->setAutoFilter(
            $spreadsheet->getActiveSheet()
        ->calculateWorksheetDimension()
        );
    
    /* -----add this line of code----- */
    $spreadsheet->getActiveSheet()->getStyle('A1:A3')
    ->getNumberFormat()
    ->setFormatCode(
        \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME
    );
    
     header('Content-Type: application/     vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
     header('Cache-Control: max-age=0');
     $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
     $writer->save('php://output');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多