gpt4 book ai didi

文件迭代中的 PHPExcel 日期问题

转载 作者:行者123 更新时间:2023-11-29 07:01:36 24 4
gpt4 key购买 nike

我使用 PHPExcel 将 xlsx 文件导入数据库,以下代码非常适合传递 $val 作为单元格值并避免插入列标题:

        $dataArr = array();

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

for ($row = 1; $row <= $highestRow; ++ $row) {
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();
$dataArr[$row][$col] = $val;
}
}
}

unset($dataArr[1]);

问题是当我尝试插入日期值时,当前的 Excel 单元格日期格式为 10/03/17,但在我的数据库中插入了 0000-00-00。

我尝试回复here但运气不好。

这是我当前的代码:

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

for ($row = 1; $row <= $highestRow; ++ $row) {
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();
if (PHPExcel_Shared_Date::isDateTime($val)) {
echo $cell->getFormattedValue() , EOL;
}
else {
echo $cell->getValue() , EOL;
}
$dataArr[$row][$col] = $val;
}
}
}

但这导致我出现 fatal error “未捕获类型错误:传递给 PHPExcel_Shared_Date::isDateTime() 的参数 1 必须是 PHPExcel_Cell 的实例,给定字符串”

有什么建议吗?

最佳答案

如果单元格的日期格式掩码是 10/03/17,那么这就是调用 getFormattedValue() 将返回的格式;这不是插入数据库的好格式。您最好显式使用不同的格式掩码,甚至将值作为 DateTime 对象(或 unix 时间戳)而不是格式化字符串检索。

但是,更关键的是

if (PHPExcel_Shared_Date::isDateTime($val)) {

您在其中传递 MS Excel 时间戳值(一个简单的 float )以查看它是否是日期/时间。 PHPExcel 无法识别 float 是否为日期;它需要能够读取单元格的数字格式掩码。您需要将单元格本身传递给 isDateTime(),而不仅仅是值。

if (PHPExcel_Shared_Date::isDateTime($cell)) {

PHPExcel API Documentation所示;与错误消息完全相同

"Uncaught TypeError: Argument 1 passed to PHPExcel_Shared_Date::isDateTime() must be an instance of PHPExcel_Cell, string given"

告诉你:

关于文件迭代中的 PHPExcel 日期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43215963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com