xls または xlsx、csv、および JMP の時刻値こんにちは。Excel の時間値に奇妙な問題があります。 いくつかのデータがあります (例は Excel ファイルとしてここに添付されています)。時刻列に興味があるので、日付と時刻の列を追加して日付時刻列を作成します。 データを分析するために JMP を使用するため、Excel ファイルをインポートしています。
ただし、いくつかの奇妙なことに遭遇しました。
1. 複数のファイルをインポートすると (データを分析するために顧客から)、時間値 (秒単位) が負になり、形式を mm:dd:yyyy hh:mm に変更したときの 1899 年から始まります。 :ss。 ファイルを CSV として再度保存し、JMP で再度開くと、時間値は正確になります (元の Excel ファイルにリストされているとおり)。
2. Excel ファイルの形式を CSV に変更すると、JMP にインポートされた時刻の値は正しくなります。 xls または xlsx のファイルについては、CSV に変更する必要があります。 何故ですか?
以下は、何が起こっているのか、そして望ましい日付/時刻形式をもたらす 2 つの解決策にどのように到達したかについての私の考えをメモしたものです。
「ひどい公式」コラムでわかるように、回避策としていくつかのことを行う必要がありました。
- 日付と時刻を文字列に変換し、両方の列を連結します。 プロパティをコピーし、新しい列に貼り付けて、形式を数値に戻します。 しかし、これは常にうまくいくとは限りません。
- Second() 関数は負の値を抽出し、Second() のみを抽出しました。これは興味深いことでした。式は以下です
- 情報(
Char( Format( :Date, "mm/dd/yyyy" ) ) || " " ||
Char( 時間( :Time, 24 ) ) || ":" || Char( 分( :時間 ) ) ||
":" || Char( 60 + Second( :Time ) )、
「mm/dd/yyyy HH:mm:ss」
)
ただし、どちらの解決策も少し手間がかかるように思えます(JMP にインポートされた Excel を CSV として保存し、再度 JMP で開く必要があることを除けば)。 時間値をより速く修正する別の方法はありますか? 自動化? Excel ファイルを JMP にインポートするとき?
データアクセスRe: xls または xlsx、csv、および JMP の時刻値期間に負の値が表示されたり、JMP に double としてインポートされて時刻に再変換された日付値が表示される場合は、Excel と JMP が日付/時刻値の状態に異なる参照日付を使用していることが原因である可能性があります。Excel は 1/1/1900 を使用し、JMP は 1/1/1904 を使用します。ここのコミュニティ投稿にいくつかの情報があります。
https://community.jmp.com/t5/JMPer-Cable/Using-dates-times-datetimes-and-durations-in-JMP/ba-p/68689
ブライアン・コーコラン
JMP開発
Re: xls または xlsx、csv、および JMP の時刻値あなたの調査結果を再現しました。JMP 13 ~ 16 はすべて、同じ負の値を持つ Excel 値を読み取ります。Excel スプレッドシートを調べましたが、負の値の理由は見つかりませんでしたが、繰り返しになりますが、私は Excel の専門家ではありません。
もしかしたら他のメンバーがアイデアを持っているかもしれません?
Re: xls または xlsx、csv、および JMP の時刻値複数のExcelのインポートに関しては、少し前に誰かが共有したスクリプトを使用しています。 ここに添付されています。
Re: xls または xlsx、csv、および JMP の時刻値それはとても興味深いですね。 ウィザードで開きましたが、ソースのスクリプトがあなたのものとは異なります。
Open(
"C:\Users\liew-6\OneDrive - Mettler Toledo LLC\Desktop\JMP\Time_issue_7Sep.xlsx",
Worksheets( "W-A20122_Halexistar_20210820-12" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 6 ),
Data Starts on Row( 7 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
また、タイムの形式を「ベスト」に変更すると、負の値が表示されます。 ここに添付させていただきました。
Re: xls または xlsx、csv、および JMP の時刻値Excel ファイルを JMP で直接開き、ウィザードを使用して、データ見出しが行 6 にあり、データが行 7 から始まることを示しました。次の JSL が生成されました
Open(
"$DOCUMENTS/Discussion Group/Time_issue_7Sep (2).xlsx",
Worksheets( "W-A20122_Halexistar_20210820-12" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 6 ),
Data Starts on Row( 7 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" ),
Column Numeric Format(
Index( 2 ),
Column Name( Variable 1 ),
Format( "Best", 9 )
),
Column Numeric Format(
Index( 3 ),
Column Name( Variable 2 ),
Format( "Best", 9 )
)
)
)
日付フィールドと時刻フィールドは両方とも、正しい日付と時刻の JMP 値として読み込まれます。それから私がしなければならなかったのは走ることだけでした
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row( :Date = :Date + :time );
複数のファイルをインポートすると、行 6 のヘッダーと行 7 から始まるデータを適切に読み取るための行オフセットを処理できないようです。
上記の入力コードを使用して各ファイルを読み取る独自の JSL ループを作成することをお勧めします。
Re: xls または xlsx、csv、および JMP の時刻値元の投稿に添付されているものは無視して、これを例として使用してください。 捕まえてくれてありがとう。
Re: xls または xlsx、csv、および JMP の時刻値添付した Excel ファイルは正しいものですか?ワークブックには、内部会議に関する情報が含まれるファイルが含まれています。
Re: xls または xlsx、csv、および JMP の時刻値修正:
以下は、何が起こっているのか、そして望ましい日付/時刻形式をもたらす 2 つの解決策にどのように到達したかについての私の考えをメモしたものです。
1. 日付と時刻を文字列に変換し、両方の列を連結します。 プロパティをコピーし、新しい列に貼り付けて、形式を数値に戻します。 しかし、これは常にうまくいくとは限りません。
2. Second() 関数は負の値を抽出しました…そして興味深いことに Second() だけを抽出しました。式は以下です
情報(
Char( Format( :Date, "mm/dd/yyyy" ) ) || " " ||
Char( 時間( :Time, 24 ) ) || ":" || Char( 分( :時間 ) ) ||
":" || Char( 60 + Second( :Time ) )、
「mm/dd/yyyy HH:mm:ss」
)