5

現在、PHPexcel を使用して基本的に Excel シートからすべてのデータを取得し、新しい Excel シートを作成してテキストにフォーマットし、古い Excel シートからすべてのデータを転送するプログラムを作成しています。

私のphpは、古いExcelシートから値を取り込んで、特に日付/数値などを正しく解析できる必要があります。

日付以外はすべて正常に機能しています。何らかの理由で、セルのフォーマットされた値を取得すると; 最初のシートの日付形式と一致しません。具体的には、次のような値: 12/31/2099 。何らかの理由で、フォーマットコードが mm-dd-yy と誤って読み取られ、12-31-99 が出力されます。これは非常に苛立たしく、私は答えを求めてインターネットの半分を探しました. 助けてください; 何が問題なのかわからない!コード:

<?php
$spreadSheet=$_FILES["filebrowser"]["tmp_name"];
/** PHPExcel_IOFactory */
require_once 'Classes/PHPExcel/IOFactory.php';
require_once 'Classes/PHPExcel/Shared/Date.php';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
//Create temporary sheet from uploaded file data
$objPHPExcel = $objReader->load($spreadSheet);
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setTitle("Original Data");
$data=$sheet->getCell("D9")->getFormattedValue();

var_dump($data);
exit;?>

D9 は DATE 形式のセルで、値は 12/31/2099 です。このコードは 12-31-99... を出力します。

4

3 に答える 3

6

PHPExcel v1.7.9 の使用

ファイル 「PHPExcel\Style\NumberFormat.php」を開きます

行 278 に移動します。

self::$_builtInFormats[22] = 'm/d/yy h:mm'; 

と置換する

self::$_builtInFormats[22] = 'dd-mm-yyyy hh:mm';

またはあなたが望むどんなフォーマットでも。

その場で変更する効率的な方法を見つけることができず、これ以外の方法で日付をフォーマットする理由がないため、このソリューションが機能します。

于 2013-07-13T23:37:59.130 に答える
1

私はあなたの質問に出くわしました。Excelが日付を保存する形式がわかっている場合は、PHPクラスDateTimeを中間の日付表現として使用できます

$data=$sheet->getCell("D9")->getFormattedValue();
$date = DateTime::createFromFormat ("m-d-y" , $data);
$string_date = $date->format($format);

必要な形式はどこに$formatありますか

于 2014-08-26T08:00:40.087 に答える