我正在使用 spreadsheet-reader 阅读一些.xls
和.xlsx
并将其转换为.csv
。
这是我的简化代码:
require_once(dirname(__FILE__) . '/../ext/spreadsheet-reader/SpreadsheetReader.php');
require_once(dirname(__FILE__) . '/../ext/spreadsheet-reader/php-excel-reader/excel_reader2.php');
$pCsvPath = Config::$generatedCSVPath . "/" . str_replace(array(".xlsx", ".xls"), ".csv", $pFileName);
$csv = fopen($pCsvPath, "w");
$pReader = new SpreadsheetReader($pFilePath);
// Read only the first sheet
$pSheets = $pReader -> Sheets();
$pReader -> ChangeSheet(0);
foreach ($pReader as $row)
{
fputcsv($csv, $row);
}
一切都很好,但是我对日期有疑问。
.xls
/ .xlsx
个文件中有一列,格式为2015-02-10
当我将它们写入.csv
时,此列的输出为2015201520152015-FebFeb-TueTue
。
如何使用上面发布的代码将其转换为.csv
,但将日期保持为正确的格式(2015-02-10
)?
提前致谢。
编辑:如果我手动将日期从2015-01-01
更改为01-01-2015
(将年份放在最后),则会正确解析日期。如果无法将日期保存为2015-01-01
,如何使用上面发布的代码将该行更改为正确的格式(年末)?
我知道我可以手动解析日期,但不能使用上面的代码,因为当我调用$pReader = new SpreadsheetReader($pFilePath)
函数时所有内容都被加载,并且无法仅操作 日期。
答案 0 :(得分:0)
使用date , strtotime
date( "d-m-Y", strtotime( "2015-02-10" ) )
会将您的日期格式转换为10-02-2015
foreach ($pReader as $row)
{
// assuming date is stored on 3rd place , $row[2]
$str = $row[0] ."+_+". $row[1]."+_+".date( "d-m-Y", strtotime( $row[2] ) );
fputcsv($csv,explode("+_+",$str));
}