2012-04-20 147 views
10

Estoy usando simplexlsx.class.php para leer el tipo de archivo xlsx. Da problemas cuando el archivo contiene el campo de fecha en el archivo de Excel.Lea el archivo excel xlsx usando simplexlsx en php

salida muestra:

En los datos del archivo:

Día Fecha Jueves Viernes 2/2/2012 2/3/2012

La salida del programa:

Día Fecha

Jueves 40941
Viernes 40942

No es dar la fecha correcta

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

código por favor ... – Baba

Respuesta

11

Esas son las fechas correctas, justo en el formato interno de Excel: número de días desde el 1 Ene 1900 (teniendo en cuenta 1900 es un año bisiesto). Claramente, algo en la clase simplexlsx está convirtiendo el valor de la fecha xlsx al formato interno de Excel.

No me he encontrado antes con simplexlsx (lo que me sorprende ya que sabía todas las bibliotecas de lector/escritor de archivos Excel para PHP) ... pero en algún lugar del código debe haber un método para manejar esa conversión, así que me imagino que habría también un método para la marcha atrás (la conversión de Excel marca de tiempo a PHP)

EDITAR

el método que desea está en el código:

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

I hacer n o garantías de que es preciso

otras modificaciones

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

da

float 1328140800 

la que se parece mucho a un valor de marca de tiempo Unix en el rango correcto para este año, y por supuesto:

02-Feb-2012 

Parece que funciona s para mí

+0

No funciona ... si envía el campo de fecha a la función de unixstamp no devuelve la fecha real. – MAK

+0

Gracias marca está trabajando saber .. – MAK

+0

Gracias por la función –

Cuestiones relacionadas