質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1707閲覧

【PHPExcel】xlsx→csv 変換時の日付フォーマットについて

HapN

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/11/19 05:30

編集2020/11/19 05:31

前提・実現したいこと

PHPExcel を利用し、xlsx→csv ファイルへの変換処理を行っています。

日付型 のデータを変換した際に、年月日の区切り文字によって、変換後の値が変わってしまいます。
変換後の日付型フォーマットの出力形式を'yyyy-mm-dd' に統一したいです。

該当のソースコード

  • xlsx→ csv 変換処理

php

1$reader = PHPExcel_IOFactory::createReader('Excel2007'); 2$book = $reader->load("./hoge.xlsx"); // csv化するxlsxファイルパス 3$writer = PHPExcel_IOFactory::createWriter($book, 'CSV')->setDelimiter(',')); 4$writer->save("./hoge.csv");
  • xlsx サンプルと、csv 変換後の値

xlsx

1日付 22020-12-31 //(ハイフン区切り)2020-12-31 32020/12/31 //(スラッシュ区切り)12-31-20

csv

1日付 22020-12-31 312-31-20

試したこと

  • サーバーのlocale 設定に依存するものと考え、下記コードを前述の変換処理前に追加しましたが、結果は変わらずでした・・・。

php

1setlocale(LC_ALL, 'ja_JP.UTF-8');

補足情報(FW/ツールのバージョンなど)

PHPExcel (1.7.4)
PHP (5.6.40)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/19 05:56

PHPExcelは非推奨なのでPhpSpreadSheetを使いましょう。 PHPもさすがにもう古いような。
guest

回答1

0

ベストアンサー

PHPExcelで取り込んだ日付データは変換が必要になります。

php

1// $serial = PHPExcelから読み込んだ日付データとします 2$fdate = gmadate('Y-m-d', $serial * 60 * 60 * 24);

このように変換した$fdateを使ってみてください。

追記:
他の方も指摘されていますが、これからはPhpSpreadSheetに切り替えることをお勧めします。コードの書き方はPHPExcelと似た部分も多いです。

投稿2020/11/25 15:15

編集2020/11/25 15:17
cerfweb

総合スコア1907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HapN

2020/11/26 13:01

ご回答頂きありがとうございます。 シリアル値→フォーマット指定での変換 は考慮の外で、参考になりました。 ただ、ソースコードにあるように、セル毎に個別変換を行っているわけではなく、 xlsxを一括でcsv に変換 しているため今回の用途では利用できませんでした。 (どのカラムに日付型のデータが入るか不定のため) # PHP のバージョンについては、諸々の事情もあり、すぐに上げることが難しい状況です。 しかしながら、現状のままですとPhpSpreadSheet の導入すら出来ませんので、 諸々バージョン更新していきたいと思います。ご回答頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問