我正在使用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
现在如何在数字之前删除撇号? 感谢
答案 0 :(得分:1)
将单元格值datatype
从string
设置为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');
答案 1 :(得分:0)
您将需要您需要将该字符串转换为MS Excel序列化时间戳,然后将格式掩码应用于单元格。
PHPSpreadsheet不会神奇地为你做这件事,除非你应用一个值粘合剂来做,并且默认值粘合剂不会。
可以在PhpOffice\PhpSpreadsheet\Shared\Date
类(分别为excelToTimestamp()
和excelToDateTimeObject()
)中找到在unix时间戳或PHP DateTime对象与MS Excel时间戳之间进行日期转换的函数,但是你&# 39; ll需要首先将该字符串转换为unix时间戳或DateTime对象,可能使用DateTime::createFromFormat()方法之类的东西。我不知道您的格式是d/m/y
还是m/d/y
,但该功能的文档应该向您展示如何使用它。
P.S。阅读PHPSpreadsheet documentation可以为您回答很多这类问题