簡體   English   中英

在php中使用simplexlsx讀取excel xlsx文件

[英]Read excel xlsx file using simplexlsx in php

我使用simplexlsx.class.php來讀取xlsx文件類型。 當文件包含excel文件中的日期字段時,它會出現問題。

樣本輸出:

在文件數據中:

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

節目輸出:

日期

周四40941
周四40942

它沒有給出正確的日期

<?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" />

這些是正確的日期,只是Excel的內部格式:自1900年1月1日以來的天數(允許1900年為閏年)。 顯然,simplexlsx類中的某些東西是將xlsx日期值轉換為Excel內部格式。

我之前沒有遇到過simplexlsx(這讓我感到驚訝,因為我認為我知道PHP的所有Excel文件讀取器/編寫器庫)...但是代碼中的某處必須有一個方法來處理轉換,所以我會想象一下,還有一種反向方法(將Excel時間戳轉換為PHP)

編輯

您想要的方法是在代碼中:

function unixstamp( $excelDateTime ) {
    $d = floor( $excelDateTime ); // seconds since 1900
    $t = $excelDateTime - $d;
    return ($d > 0) ? ( $d - 25569 ) * 86400 + $t * 86400 : $t * 86400;
}

我不保證它是准確的

編輯進一步

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);

float 1328140800

這看起來非常類似於今年正確范圍內的unix時間戳值,當然可以:

02-Feb-2012

看起來它對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM