2012-04-20 31 views
10

Tôi đang sử dụng simplexlsx.class.php để đọc loại tệp xlsx. Nó gây ra vấn đề khi tệp chứa trường ngày trong tệp excel.Đọc tệp excel xlsx sử dụng simplexlsx trong php

đầu ra mẫu:

Trong dữ liệu file:

ngày ngày Thứ năm 2012/02/02 thứ Sáu 2/3/2012

đầu ra chương trình:

Ngày Ngày

Thứ năm 40.941
Thứ Sáu 40.942

Nó không đưa ra đúng ngày

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

+0

mã xin vui lòng ... – Baba

Trả lời

11

Đó là những ngày đúng, chỉ cần ở định dạng nội bộ của Excel: số ngày kể từ ngày 01 tháng một 1900 (cho phép 1900 là năm nhuận. Rõ ràng một cái gì đó trong lớp simplexlsx đang chuyển đổi giá trị ngày xlsx sang định dạng nội bộ Excel.

Tôi chưa từng gặp đơn giản trước đây (điều này làm tôi bất ngờ khi tôi biết tất cả thư viện người đọc/ghi tệp Excel cho PHP) ... nhưng ở đâu đó trong mã phải có phương pháp để xử lý chuyển đổi đó, vì vậy tôi muốn tưởng tượng rằng có cũng sẽ là một phương pháp để điều ngược lại (chuyển đổi Excel dấu thời gian để PHP)

EDIT

phương pháp bạn muốn là trong các mã:

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

tôi làm n o đảm bảo rằng đó là chính xác

EDIT THÊM

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

cho

float 1328140800 

trông khá giống như một giá trị timestamp unix trong phạm vi chính xác cho năm nay, và chắc chắn đủ:

02-Feb-2012 

Vì vậy, có vẻ như nó hoạt động s cho tôi

+0

Không hoạt động..i gửi trường ngày tới chức năng unixstamp nó không trả về ngày thực tế. – MAK

+0

Cảm ơn nhãn hiệu của nó làm việc biết .. – MAK

+0

Cảm ơn các chức năng –

Các vấn đề liên quan