php

2012-04-20 8 views
10

में simplexlsx का उपयोग कर एक्सेल xlsx फ़ाइल पढ़ें xlsx फ़ाइल प्रकार पढ़ने के लिए मैं simplexlsx.class.php का उपयोग कर रहा हूं। जब फ़ाइल में एक्सेल फ़ाइल में दिनांक फ़ील्ड होता है तो यह समस्याएं दे रहा है।php

नमूना उत्पादन:

फ़ाइल डेटा में:

दिवस दिनांक गुरुवार 2012/02/02 शुक्रवार 2/3/2012

कार्यक्रम उत्पादन:

दिन की तारीख

(के लिए अनुमति के बाद से 1 जनवरी 1900 दिनों की संख्या:

गुरुवार 40,941
शुक्रवार 40,942

यह सही दिनांक

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

कोड कृपया ... – Baba

उत्तर

11

उन सिर्फ एक्सेल के आंतरिक स्वरूप में, सही तिथि नहीं देना नहीं है 1 9 00 एक लीप वर्ष होने के नाते)। स्पष्ट रूप से simplexlsx वर्ग में कुछ xlsx दिनांक मान को Excel आंतरिक प्रारूप में परिवर्तित कर रहा है।

मैं पहले simplexlsx में नहीं आया (जो मुझे आश्चर्य हुआ क्योंकि मैंने सोचा था कि मैं 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 

जो उल्लेखनीय इस वर्ष के लिए सही रेंज में एक यूनिक्स टाइमस्टैम्प मूल्य की तरह लग रहा है, और यकीन है कि पर्याप्त:

02-Feb-2012 

ऐसा लगता है कि यह काम करता है मुझे

+0

काम नहीं कर रहा है .. मैं तारीख फ़ील्ड को यूनिक्सस्टैम्प फ़ंक्शन पर भेजता हूं, यह वास्तविक तिथि नहीं लौटा रहा है। – MAK

+0

धन्यवाद यह पता है कि यह काम कर रहा है .. – MAK

+0

समारोह के लिए धन्यवाद –

संबंधित मुद्दे