Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Excelファイルからの日付データ取り込みについて。
・環境
Microsoft Office 2016
QV Desktop 12
ExcelからLoadスクリプトでデータ取り込みする際、Excel上の「日付 時刻(YYYY/MM/DD hh:mm)」が入っている項目の
書式設定が「日付」になっていないとQVで日付として扱えません。
→YYYY/MM/DDのみ(hh:mmが無い)だと特に問題無く動くのですが・・・
・例
列名:日付
値:2018/10/01 15:19
書式設定:標準
LOAD 日付 // LOAD Date#(日付)も試したがダメ
FROM Excelファイル;
「日付」はQVで日時として認識されず、またLOAD時にDate#(日付)しても同様でした。
その為、日付関連の関数を使えず困っています。
→Month()で月を取得、などができない
Excel側で該当セルの書式設定を「日付」にしてあげればQV側では特に何もせずに値を日時として扱ってくれるのですが、
その解決方法だとソースExcelが更新される度にExcel編集しなければならず、ITリテラシーの低いメンバーの
定型業務として成り立ちません。
また、列名「日付」に渡す値をYYYY/MM/DDの様に時刻を含まない書式にするとExcel側でもQV側で特に何も考えずに扱えるのですが・・・
ソースExcelにはどうしてもhh:mmが付いてきてしまい、そうなるとDate#()でDate型にすることができないようです。
解決方法ありますでしょうか?
これはそのまま、これで日付関数が使えました。
Timestamp#('2018/10/01 15:19','YYYY/MM/DD hh:mm')
これはそのまま、これで日付関数が使えました。
Timestamp#('2018/10/01 15:19','YYYY/MM/DD hh:mm')
ありがとうございます。
第2パラメータで書式を指定したところ、Timestamp#()だけでなくDate#でもいけました。
APIリファレンスではDate#(), Timestamp#()の第2パラメータは戻り値のフォーマット指定の様に読めますが、入力値の書式を指定するんですね。
ユーザー側のファイルの値が、きちんとシリアル値であればあまり気にする事はないのですが、フォーマットとしてファイルを提供しないと、書式が文字列の場合もあるので、エクセルの取り込みは慎重に記述した方が良いでしょうね。
添付の値は、上はともにシリアル値ですが、下の3つは文字列です。
こういった混在データも以下のように記載してやる事で、対応が可能ですので、参考にして下さい。
Timestamp(ALT(日付 //1~2行目のシリアル値に対応
,Timestamp#(日付,'YYYY/M/D hh:mm') //4行目のテキストコンバート用
,Timestamp#(日付,'YYYY/MM/DD h:mm') //5行目のテキストコンバート用
,Timestamp#(日付,'YY年M月D日 h時m分') //6行目のテキストコンバート用
)
,'YYYY/MM/DD hh:mm') as 日付
他にも書式パターンは複数あるため、全て網羅すると処理時間も増えるので、どこまでカバーするかといった事も考えると、取り込み用のファイルは、テンプレートとして用意してあげるのがベターでしょうけど、、、、
なるほど、複数のフォーマット指定も可能なんですね。
ありがとうございます。