首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用php中的simplexlsx读取excel xlsx文件

使用php中的simplexlsx读取excel xlsx文件
EN

Stack Overflow用户
提问于 2012-04-20 08:38:51
回答 1查看 22.5K关注 0票数 10

我使用simplexlsx.class.php读取xlsx文件类型。当文件在excel文件中包含日期字段时,会出现问题。

示例输出:

在文件数据中:

2012年2月2日星期四,2012年2月2日星期五

程序输出:

日日

星期四40941

星期五40942

没有给出正确的日期

代码语言:javascript
运行
复制
<?php

if (isset($_FILES['file'])) {

require_once "simplexlsx.class.php";

$xlsx = new SimpleXLSX( $_FILES['file']['tmp_name'] );

echo '<h1>Parsing Result</h1>';
echo '<table border="1" cellpadding="3" style="border-collapse: collapse">';

list($cols,) = $xlsx->dimension();

foreach( $xlsx->rows() as $k => $r) {
    if ($k == 0) continue; // skip first row
    echo '<tr>';
    for( $i = 0; $i < $cols; $i++)
    {

        echo '<td>'.( (isset($r[$i])) ? $r[$i] : '&nbsp;' ).'</td>';

    }
    echo '</tr>';
}
echo '</table>';
}

?>
<h1>Upload</h1>
<form method="post" enctype="multipart/form-data">
*.XLSX <input type="file" name="file"  />&nbsp;&nbsp;<input type="submit" value="Parse" />

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-20 09:08:22

这些是正确的日期,只是Excel的内部格式:从1900年1月1日起的天数(考虑到1900年是闰年)。显然,simplexlsx类中的一些内容是将xlsx日期值转换为Excel内部格式。

我以前从未见过simplexlsx (这让我感到惊讶,因为我以为我知道PHP的所有Excel文件读取器/编写器库)。但是在代码中的某个地方必须有一个方法来处理这种转换,所以我想也会有一个反向的方法(将Excel时间戳转换为PHP)。

编辑

您想要的方法在代码中:

代码语言:javascript
运行
复制
function unixstamp( $excelDateTime ) {
    $d = floor( $excelDateTime ); // seconds since 1900
    $t = $excelDateTime - $d;
    return ($d > 0) ? ( $d - 25569 ) * 86400 + $t * 86400 : $t * 86400;
}

我不能保证它是准确的

编辑进一步

代码语言:javascript
运行
复制
function unixstamp( $excelDateTime ) {
    $d = floor( $excelDateTime ); // seconds since 1900
    $t = $excelDateTime - $d;
    return ($d > 0) ? ( $d - 25569 ) * 86400 + $t * 86400 : $t * 86400;
}


$dateVal = 40941;
$unixDateVal = unixstamp($dateVal);
var_dump($unixDateVal);
echo date('d-M-Y',$unixDateVal);

给出

代码语言:javascript
运行
复制
float 1328140800

它看起来非常像今年正确范围内的unix时间戳值,而且非常肯定:

代码语言:javascript
运行
复制
02-Feb-2012

所以在我看来是可行的

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10242879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档