強制匯入Excel日期列的格式JMP 社群您好,
我正在尋求有關透過 JSL 使用 Excel 匯入精靈強制匯入日期格式的協助。 我正在嘗試導入 Excel 文件中僅兩列的數據,一個日期,一個數據,如下所示:

我遇到的問題是從日期 12.02.2019 到 13.02.2019(左側以紅色標記)的過渡。 由於某種原因,JMP 將以 dd.mm.yyyy 格式讀取從開始到最後 12.02.2019 值的日期值,但隨後在 13.02.2019 切換為以 mm.dd.yyyy 格式讀取日期。 當我進入 Excel 文件並檢查單元格的格式時,它們是相同的。 我不明白為什麼JMP會突然切換。 當進行此切換時,JMP 表中的日期儲存格將保留為空。
如果我將數據導入兩個不同的區塊中,即從開始到最後一個dd.mm.yyyy 格式的數據,以及其他區塊的第二個資料區塊,它會正確讀取每個日期,但兩個不同日期的列資訊的格式不同且彼此不相容。 如果我嘗試連接兩個子集,它只會切換我連接到的表的日/月。
我還嘗試更改 JMP 首選項中的多個切換選項以嘗試強制系統或 JMP 設置,但均不成功。
如果我可以將日期作為字元匯入,我可以相應地修改內容,然後將其切換回連續資料類型,那麼一切都應該沒問題。 唯一的問題是我不確定如何強制執行此操作,或者這是否是最好的方法。
與大多數自動化嘗試一樣,我強烈不想進入並編輯每個 Excel 工作表或文件。 我想讓 JMP 透過 JSL 腳本執行此操作。
我用來導入的 JSL 程式碼是:
Open(
"file_location\file.xlsx",
Worksheets( "Sheet 1" ),
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( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 15 ),
Data Ends on Row( 0 ),
Data Ends on Column( 16 ),
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( "-" )
)
)
它與“限制列檢測(0)”選項有關嗎? 我找不到任何有關此內容及其用途的文件。
這個問題與 發布的問題類似@ghartel早在2017年5月( https://community.jmp.com/t5/Discussions/Excel-Import-Date-Format/td-p/16619 ),至少據我所知,他們沒有直接解決他們的具體問題。
任何幫助深表感謝!
謝謝,
DS
回覆:強制匯入Excel日期列的格式我使用的是 Excel 365 build 1908,這是一個相當新的版本。您使用什麼版本的 JMP?
布萊恩
回覆:強制匯入Excel日期列的格式我嘗試了很多不同的方法來嘗試使這項工作正常進行,包括您發送的內容,並且導入將顯示數字,但沒有實際值...
Excel 值:2019 年 11 月 26 日 9:41:04。 191午安
導入 JMP:2019 年 11 月 26 日 9:41:04。 000午安
是否有一個導入設定可能會改變我尚未打開的設定或類似的設定?
我在處理此問題時確實注意到 Excel 中的一個錯誤,我很好奇您是否也發生了同樣的事情。 當 Excel 中的格式為 dd/mm/yyyy hh:mm:ss.000 時,值 0.191 顯示在儲存格中,但不會顯示在頂部的公式列中。 當我單擊公式欄時,數字不再顯示在公式或儲存格中。 然後,當我單擊公式欄外時,所有數字都會更改為 .000...... 我很好奇這是否會影響從 Excel 獲取數據的方式。
我不知道這是否只是 Excel 的錯誤,或者可能是我擁有的版本(Excel 2013)。當該腳本適合您時,您使用的是哪個版本的 Excel?
回覆:強制匯入Excel日期列的格式您可以嘗試使用“限制列檢測”選項以及自訂格式。您可能需要 JMP 15 才能實現此功能。以下對我有用:
Open(
"C:\Users\sasbxc\Desktop\test.xlsx",
Worksheets( "Sheet1" ),
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( 1 ),
Data Starts on Row( 2 ),
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( 1 ),
Column Separator String( "-" ),
Column Numeric Format(
Index( 0 ),
Column Name( Col1 ),
Format( "d/m/y h:m:s", 26, 3 )
)
)
)
布萊恩
回覆:強制匯入Excel日期列的格式太好了! 謝謝!
導入時我應該使用什麼腳本格式將其讀取為字串?
回覆:強制匯入Excel日期列的格式我過去看到解決此類問題的方法是將列作為字串讀取,然後將過程發佈到日期值中。
回覆:強制匯入Excel日期列的格式感謝您如此快速的回覆!
問題實際上是在導入過程中(我認為),因此作為後期處理運行對我來說不起作用。
所以第一列中的 Excel 資料看起來格式如下:
26/11/2019 09:41:04.190 下午
當我將其導入 JMP 時使用開啟(檔案路徑,工作表()….)資料格式如下:
26/11/2019 9:41:04 下午
如果我在匯入後更改格式,結果是這樣的:
2019 年 11 月 26 日 9:41:04.000 下午
所以看起來最後三位數字在導入過程中被刪除了。 有沒有辦法在匯入 JMP 表時強制採用該格式?
回覆:強制匯入Excel日期列的格式假設下載的資料是毫秒的,那麼只要匯入資料表後改變格式即可。此範例的另一個假設是具有日期和時間值的欄位稱為 DateTime,可以套用下列 JSL 來變更資料顯示。
:DateTime << set format( "d/m/y h:m:s", 27, 3 );
回覆:強制匯入Excel日期列的格式嗨布萊恩,
我正在嘗試導入 Excel 資料並努力以我想要的格式獲取它。 我注意到您說 JMP 15 具有額外的導入格式化功能。 由於我使用的是 JMP15,我希望你能在這方面幫助我。
Excel 中的時間資料(第一列)附加了毫秒,因此我需要強制導入來識別這一點。 導入時,JMP 僅給出格式("d/m/yh:m:s",27,0)。 我需要將其設定為格式(“d/m/yh:m:s”,27,3)。 如果這是我的程式碼,那麼小數點到 3 的格式在哪裡?
Open(
"file_location\file.xlsx",
Worksheets( "Sheet 1" ),
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( 1 ),
Data Starts on Row( 2 ),
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( "-" )
)
);
回覆:強制匯入Excel日期列的格式你好@gzmorgan0 ,
我終於回來並能夠測試您使用 VB 保存為 txt 的 JSL 腳本。 它有效,我可以根據需要導入信息,我唯一的問題是它只對 Excel 文件中的最後一個選項卡執行此操作。
我的 Excel 檔案有多個需要匯入的選項卡,所有選項卡都存在日期問題。 進入 JMP 後,我將所有資料連接到一個資料表中進行分析。 我還發現我需要修改 JSL 來開啟多個 Excel 文件,然後將所有資料放在一起。 增加了複雜性。
不幸的是,我對 VB 不太熟悉,無法編寫處理多個選項卡的東西。 我有一個同事,他們正在研究這個問題。
我嘗試更改 JMP 中的首選項以查看是否可以解決問題,但沒有解決。 似乎確實存在一個錯誤,即使我將作業系統日期格式設為德國 (dmy),它仍然使用安裝作業系統(英語)並將日期讀取為 mdy,因此它只會忽略任何大於 12 的日期。
JSL 腳本非常有幫助,感謝您發布它。 我們只需要修改 VB 部分來處理多個選項卡,僅此而已。
回覆:強制匯入Excel日期列的格式謝謝@gzmorgan0 ,特別是對於範例導入文件。 我將在下週對其進行測試,看看它是否有效,但無法很快實現。
期待 JMP 15 中的新“強制”選項。
謝謝!,
DS
回覆:強制匯入Excel日期列的格式@ghartel , 注意@briancorcoran提到 JMP 15 中可能有更多選項。
隨附的腳本可將 Excel 工作表另存為製表符分隔的文字文件,然後將該文字檔案讀入 JMP。
您可能想要嘗試使用系統預設值(在澳洲和德國)讀取文字文件,以查看 JMP 匯入文字預設值是否會將日期讀取為文字。 如果沒有,那麼您必須命名所有列並指定資料類型。
由於此腳本使用 VBScript,因此它可能不適用於 Mac。
該腳本是作為“以防萬一這可能有幫助”而提供的。
回覆:強制匯入Excel日期列的格式嗨 JMP 們,
澳洲也使用「不正確」的日期格式:(因此天被解釋為月,並且 >12 由於格式違規而成為缺失值。 這可能發生在第二行。這是非常令人沮喪的,因為如果你不幸運,第一天 > 12 可能會發生在你沒有註意到的文件中,並且最終會得到一個缺失值沒有警告因為 JMP 認為它讀取了不正確的日期格式。
有兩件事可能使它發揮作用。首先,在「Windows 特定」下的 JMP 首選項中取消選取「使用 JMP 語言而不是系統區域設定...」方塊。我在 JMP 中找不到任何可以設定預設日期格式的地方 - 所以不確定這個標誌指的是什麼。第二步是更改 Windows 區域設置,如上一張海報所示,但是 JMP 不喜歡 dd/mm/YYYY 設置 - 它必須是 dd/MM/yy - 不知道為什麼,但它至少可以工作為我。不知道這是否只是 Windows 的問題,即 Mac 是否沒有這個問題。我在 Windows 7 電腦和 Windows 10 電腦上執行 JMP - JMP PRO 14.3 64 位,但我遇到了這個問題,因為 Excel 匯入是 JMP 中的功能。
有些人建議以文字形式讀取列 - 我看不到任何強制 JMP 以文字形式讀取特定列的選項 - 這可能嗎?
另一種解決方法是以 CSV 格式取得數據,因為某些原因 JMP 允許對輸入進行非常精細的控制,這與 Excel 不同。第三種選擇是使用資料庫介面讀取 Excel 檔案。但這需要在您的 PC 上進行適當的 ODBC 設置,這也有點麻煩。
JMP 請注意 - 如果由於格式錯誤而無法匯入字段,JMP 會發送一些警告或錯誤訊息,那就太好了。我有一些客戶在數字字段中添加 * 或 <,Excel 很樂意將其轉換為字元字段,而 JMP 則很樂意且默默地轉換為缺失值。JSL 非常適合自動化任務,但這種情況使得程式的防錯變得非常困難。
乾杯
甘特
回覆:強制匯入Excel日期列的格式@SDF1 ,我有兩個建議:
- JSL 透過 Run Program() 可以執行其他程序,例如 VBSript。您的 JSL 可以寫入透過 Excel 開啟文件,將列格式設為文字(如果需要);將文件另存為製表符分隔的文字;關閉 Excel,然後讀入文本文件,您可以選擇將列讀取為文本,然後進行轉換。
- Excel 檔案可以用作資料庫。 我做了一些閱讀,你的德國同事看到的問題可能是由於資料類型的 Excel 轉換器造成的。下面是使用 Open Database() 的 JSL。 這需要一些準備。 您的德國同事需要為 Excel 定義 DSN 並使用相同的名稱。現在,如果每個人都有 64 位元 JMP 和 64 位元 MW Office,那就很容易了。 如果他們有 32 位元 MS Office,我可以傳送設定步驟。程式碼 IMEX=1 告訴 Excel 如果它看到看起來像 Excel 混合資料類型的列,請將其轉換為文字。
dt2 = Open Database( "DSN=Excel Files;
DBQ=c:/temp/ExcelDateBlog.xlsx;IMEX=1",
"SELECT * FROM [Sheet1$]",
"Result from XLS"
);
我認為在 JMP 15 之前使用文字檔案會更容易,此時 Excel 精靈允許指定列格式。 如果您需要選項 #1 的幫助/範例,請告訴我。
回覆:強制匯入Excel日期列的格式你好@briancorcoran ,
抱歉,我總是忘記將我的系統詳細資訊放在新帖子的開頭。
W7 企業版,64 位
JMP Pro 14.1.0(和 JMP 14.0.0)
我正在運行英語(美國)作業系統,並嘗試為也運行 W7 Enterprise 的德國同事編寫一些自動化程式碼,但將作業系統設定為德語。 對於像這樣的其他項目,我沒有遇到任何日期被誤讀的問題。 不過,我確實必須編寫兩種不同版本的程式碼,一種為我的美國同事,另一種為我的德國同事,因為普通的美國作業系統將日期作為文字讀取。 並作為@gzmorgan0已經提到,當它作為文字讀入時,處理和轉換它是沒有問題的。 但是,如果我的德國同事嘗試運行為在美國電腦上運行而編寫的 JSL 腳本,則效果不佳,因此我必須更改程式碼才能在德語作業系統上正確運行。
為了編寫在德國電腦上運行的程式碼,我將作業系統中的區域/本地設定更改為“德語(德國)”。 不幸的是,JMP 似乎無法從我擁有的 Excel 檔案中正確匯入日期設定。
回覆:強制匯入Excel日期列的格式謝謝格魯吉亞。 我已將其作為可能的錯誤發送出去進行調查。
布萊恩
回覆:強制匯入Excel日期列的格式@SDF1 ,抱歉,它不適合你。
JMP 並非來自德國,因此將 dd.mm.yyyy 格式解釋為文字。
您可以嘗試以下建議之一:
- 將該日期列設定為文字列。
- 將資料儲存為文字文件,其中匯入預覽或腳本允許您設定格式並強制其為字元。
我確實認為存在內部錯誤。 請參閱我給布萊恩的上一篇文章。
回覆:強制匯入Excel日期列的格式@briancorcoran ,你看到我的依靠了嗎@SDF1 ?
- 我在 Excel 工作表中以文字/字元形式讀取
- 然後發了專欄訊息
dt:Date << Data Type (Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "ddmmyyyy" ));
- 描述的相同行為@SDF1也發生了。我在 2019 年 2 月 13 日讀取了第一個數據,後來這些值是空的。 這與 Excel 工作表無關:JMP 將日期列讀取為文字。
- 但是,如果我使用下面的列訊息,其中沒有 2 次轉換,輸入格式和格式相同,則資料會正確轉換。
dt:Date << Data Type (Numeric,
"Continuous",
Format( "ddmmyyyy", 12 ),
Input Format( "ddmmyyyy" ));
- 然後使用上一列 Data Type() 訊息,選擇的格式就可以了。
正如我在回覆中所述,這是非常意外的行為,對我來說似乎是個錯誤。 我使用的是 JMP Pro 14.3
回覆:強制匯入Excel日期列的格式您使用什麼版本的 JMP?
布萊恩
回覆:強制匯入Excel日期列的格式嗨布萊恩( @briancorcoran ),
是的,事實上該列設置為“日期”,並採用德國風格的 dmy 格式。 請查看該線程中的上一篇文章,其中包含 Excel 列屬性視窗和設定的螢幕截圖。 就連我的系統設定也是這樣,請看下文。
謝謝!,
DS

回覆:強制匯入Excel日期列的格式嗨,DS,
JMP 應遵循專門應用於 Excel 中的列的格式。您是否已進入 Excel 並使用“設定儲存格格式”對話方塊將列類型明確設定為“日期”,然後設定為歐洲格式(例如德國 dmy)?在這種情況下,JMP 應正確輸入資料。
布萊恩
回覆:強制匯入Excel日期列的格式更新:
我對 Excel 文件做了一些深入研究,當我嘗試導入資料時,所有選項卡中導致此錯誤的一個常見問題是它讀取日期列並從日期 12.02.2019(2019 年 2 月 12 日)開始)至2019年2月13日(2019年2月13日)。
我的理論是這樣的:我認為 JMP 混淆了 12 號之前到之後的日期格式。 我的原始日期範圍是2019年1月2日至2019年2月28日:2019年1月2日至2019年2月28日。
當JMP 向下讀取日期列時,它實際上似乎將日期02.01.2019 解釋為2019 年2 月1 日,因此當它到達12.02.2019 時,它實際上將日期讀取為2019 年12 月2日。 因此,當到達 13.02.2019(2019 年 2 月 13 日)時,它不知道如何讀取日期,因為沒有第 13 個月。 JMP 中的列屬性始終將其顯示為「連續」建模類型、「dmy」格式和「dmy」輸入格式。 除非我將導入分成兩部分,否則它會執行此操作。
如果我將導入分成兩個不同的部分,一個是從2019 年1 月2 日到2019 年2 月12 日,然後是從2019 年2 月13 日到2019 年2 月28 日,JMP 會相應地匯入資料並相應地分配列格式。 然後我可以將兩者連接成正確的數據表。 我不知道為什麼它在我原來的帖子中不起作用,但它可以這樣工作。
我還可以確認資料的正確導入並不依賴我在 JMP 中設定的首選項。
這不太有利於自動化,因為原始文件可能會更改第 12/13 日期更改的位置(行)。 不過,我想我可能必須透過分割路線使其工作。 如果這是 JMP 中的一個錯誤,那麼如果能夠修復它那就太好了。
回覆:強制匯入Excel日期列的格式你好@gzmorgan0 ,
感謝您的想法和意見。 不幸的是,這種方法也不行。 這個問題源自於 JMP 在匯入日期格式之前誤讀了日期格式。 如果我運行腳本或嘗試透過嚮導 GUI 執行此操作,JMP 會將日期錯誤分類為 dmy 或 mdy 格式(而實際上是另一種格式)。
即使針對日期格式的不同變更修改程式碼也不能解決問題。 它只是不匯入混合格式,只將其中一種視為連續格式,其他格式將被忽略。 JSL 程式碼也不會將其作為標稱資料類型匯入—它直接作為連續資料類型匯入。
謝謝!,
DS
回覆:強制匯入Excel日期列的格式你好@briancorcoran ,
感謝您的意見。 我嘗試了你的建議,但不幸的是,它沒有奏效。 即使在預覽窗格中「限制列偵測」並顯示所有行時,JMP 也會在讀取格式時出現問題。 它可以很好地讀取前 205 行,但在第 206 行,由於某種原因它會切換格式。
沒有意義的是,Excel 中的格式從一行到下一行並沒有改變。 如果確實如此,我就能理解為什麼 JMP 可能會以不同的方式讀取它們。 在 Excel 中,所有儲存格的格式均為「日期」dd.mm.yyyy。 同樣的事情發生在我導入的下一個選項卡上,但在第 52 行到第 53 行。 我可以理解原始 Excel 文件生成中是否存在問題,即所有表中的相同行存在一些以不同方式保存日期的故障,但當 JMP 讀入資料時,它甚至不在選項卡之間的同一位置。
我看到的 Excel 方面唯一的格式設定可能是「日期」類別中的「類型」選項以 * 開頭,請參見下面的附圖。 但是,這應該根據作業系統設定進行更新。 該列中的所有日期均採用這種方式格式化,因此如果 JMP 對其中一個日期有問題,那麼所有日期都應該有問題。
我會嘗試@gzmorgan0的導入建議,看看是否有效。
如果 JMP 在匯入過程中強制執行某些格式化類型,那就太好了,尤其是在建立用於自動化流程的 JSL 程式碼時。

回覆:強制匯入Excel日期列的格式出於效能原因,Excel 預覽會查看前 100 行以確定預覽的資料類型。在實際匯入操作期間,JMP 會查看所有行。如果它在第 100 行之後看到導致不同結論的數據,則可能會產生不同的結果。如果您希望預覽查看所有行以產生導入時將看到的內容,則可以在 UI 的預覽窗格刷新中選擇「顯示所有行」選項。如果您希望匯入在讀取資料時僅查看前 100 行,以產生預覽的行為,您可以轉到匯入對話方塊第二個窗格中的“進階選項”,然後選擇“限制列類型偵測” 。
JMP 15 將引入將各個列的數字格式類型強制為使用者選擇的功能。
布萊恩·科科倫
JMP開發
回覆:強制匯入Excel日期列的格式嗯嗯, @SDF1 ,您可能發現了一個錯誤。
我採取的方法是讀入數據,讓它成為一個字串,然後將其轉換。 但是,如果我嘗試僅使用最後一個 Data Type() 訊息,我會看到與您描述的相同的行為。 如果我保留相同的資訊和格式聲明,則不會出現問題。轉換後,然後設定為您選擇的格式
Names default to here(1);
dt = Open(
"C:\temp\ExcelDateBlog.xlsx",
Worksheets( "Sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
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( "-" )
)
);
wait(0); //change to 2 seconds to see that the data is read in as text
dt:Date << Data Type (Numeric,
"Continuous",
Format( "ddmmyyyy", 12 ),
Input Format( "ddmmyyyy" ));
dt:Date << Data Type (Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "ddmmyyyy" ));
霍普有幫助。