2016-03-27 15 views
0

'a içe aktarım yapmam gerekiyor Hücrede tarih ve saat olan bir Excel veri dosyasına sahibim. (Formül çubuğuna verileri aka) hücrede depolanan veriler:Bir excel hücresindeki tüm verilere nasıl erişirim? MATLAB

3/11/2016 5:27:36 PM 

Ama aynı hücre görüntüler

2016/03/11 17:27:37.653 

Ben milisaniye erişmek gerekir ve nedense bu bilgi değil mi Aynı şekilde ele alındı. Excel, Word'e kopyalayıp Excel'e yapıştırmadıkça, onunla çalışamaz. Milisaniye MATLAB'a nasıl ulaşabilirim? Bu dosyaların düzinelerce okunması gerekecek.

My MATLAB kodu yalnızca oluşur:

2016/03/11 17:27:19.213 0.000004 
2016/03/11 17:27:35.813 -0.00002 
2016/03/11 17:27:36.000 0.000015 

Bu hücrelerde bulunan budur:

3/11/2016 5:27:19 PM 0.000004 
3/11/2016 5:27:36 PM -0.00002 
3/11/2016 5:27:36 PM 0.000015 

for i=1:5 
    traverse_file=sprintf('traverse_s4r%d.xlsx',i); 
    [num,text,both{i}]=xlsread(traverse_file); 
end 

budur Excel hücreleri nasıl göründüğünü Teşekkürler. Aşağıdaki işe yaramazsa

+1

ben, bilmiyorum ama gerçek değeri:

Son olarak verileri yüklemek ve işleyebilirsiniz ancak yo istiyorum Bu hücrede saklanan, 1/1/1900 tarihinden bu yana günlerin ve kesirlerin sayısı olacaktır (veya bu sistemi kullanıyorsanız 1/1/1904). Görüntülenen tarihiniz için bu değer Range nesnesinin '.Value2' özelliği olarak erişilebilen '42440.7275191319' veya hücreyi yeterli sayıda ondalık basamaklı" Number "olarak biçimlendirirseniz görülebilir. –

+0

excel dosyasını okumak için kullandığınız kodu gönderin. Ayrıca örnek bir dosya yardımcı olacaktır. – Amro

+0

@Amro Daha fazla bilgi ekledim. Teşekkürler – echou

cevap

0

, xlsread geçerli sistem yerel ayarı göre biçimlendirilmiş dizeleri olarak tarih/saat alanları alır. Sorun şu ki, çoğu durumda saniyeler kesirli kısmı görüntülenmiyor, bu da dosyayı aldığınızda kayboluyor. Windows için Excel olmadan

xlsreadbasic modu dışında (örneğin '10/31/96' gibi) dizeleri olarak ithalatı biçimlendirilmiş tarihleri ​​ve bilgisayarlarda: Bu açıklayan the documentation of xlsread sonunda bir not var.

Fortunately

, (bu yalnızca Excel yazılımı yüklü olan Windows bilgisayarlarda desteklenir) ham biçimlendirilmemiş değerleri almak için xlsread bir custom processing function geçebilir. @RonRosenfeld yorumların açıklandığı gibi, serial numbers olarak Excel saklar tarihsaat 00 Ocak-1900 yılından bu yana fraksiyonel günlerini temsil: onlar hesaplamalarda kullanılan böylece

Excel saklar ardışık sayılar halinde uzanıyor. o 39.448 gün 1 Ocak sonra olduğu için varsayılan, 1 Ocak 1900 olarak, seri numarası 1 ve 1 Ocak 2008 olup, 1900

Sen biçimlendirilmemiş değerler elde edebilirsiniz gelen COM/ActiveX, seri numarası 39448 olan .Value2 özelliğini kullanarak.

MATLAB'ın, serial date numbers (00-Ocak-0000 arası kesirli gün sayısı kadar) depolamak için kendi sözleşmesi olduğunu unutmayın. Dolayısıyla, ham seri numaralarını Excel'den yüklediğimizde, bunu MATLAB tarafından kullanılan sözleşmeye dönüştürmeliyiz.MATLAB içinde datetime sınıfı ile, dönüşüm here gösterildiği gibi kolaydır. Hepimizin yerleşmiş olduğunu Şimdi


, burada tam tarih ile Excel dosyalarınızı yüklemek için kodudur/zaman hassas:

function t = loadMyExcelFile(fnameXLSX, sheet) 
    % read Excel sheet using our custom processing function to get the 
    % raw dates without any formatting 
    if nargin<2, sheet = 1; end 
    [~,~,~,custom] = xlsread(fnameXLSX, sheet, '', '', @CustomProcessFcn); 

    % convert excel dates to MATLAB datetime, also customize how 
    % the datetime values are displayed (with full precision) 
    dt = datetime(cell2mat(custom(:,1)), 'ConvertFrom','excel', ... 
     'Format','yyyy-MM-dd HH:mm:ss.SSSSSS'); 
    val = cell2mat(custom(:,2)); 

    % compute the milliseconds part alone 
    ms = round(rem(dt.Second, 1) * 1000); 

    % build and return results as a MATLAB table 
    t = table(dt, val, ms); 
end 

function [data, V2] = CustomProcessFcn(data) 
    V2 = data.Value2; 
end 

Yukarıdaki içe aktarma işlevini doğrulamak için, ben örnek bir Excel yarattı rastgele tarihler ve değerler içeren sayfa (takip etmek isterseniz download it here yapabilirsiniz).

excel_sheet

(not: Ben milisaniye bölümü görmek için özel yyyy-mm-dd hh:mm:ss.000 için tarihlerin hücre biçimlendirme değişti). Yardımcı olur ben MATLAB ile çalışmaz olarak

>> t = loadMyExcelFile('Book1.xlsx') 
t = 
       dt     val  ms 
    __________________________ _______ ___ 
    2016-03-28 23:00:25.100877 0.31472 101 
    2016-03-29 18:58:28.578988 0.72052 579 
    2016-03-30 10:19:04.318113  0.3475 318 
    2016-03-31 10:00:26.065898 0.76088  66 
    2016-04-01 14:19:13.908256 0.89324 908 
    2016-04-02 04:29:42.858488 0.49078 858 
    2016-04-03 07:12:32.249770 0.26928 250 
    2016-04-04 16:48:25.073809 0.31616  74 
    2016-04-05 08:51:05.228647 0.77366 229 
    2016-04-06 21:38:29.768989  1.2386 769 
    2016-04-07 06:55:49.555229 0.89617 555 
    2016-04-08 01:13:40.028169  1.3668  28 
    2016-04-09 23:38:56.049314  1.8239  49 
    2016-04-10 04:13:09.258885  1.8093 259 
    2016-04-11 09:40:38.799400  2.1096 799 
    2016-04-12 03:37:27.442933  1.7515 443 
    2016-04-13 12:20:01.502968  1.6732 503 
    2016-04-14 18:15:25.406924  2.089 407 
    2016-04-15 14:46:10.802325  2.3812 802 
    2016-04-16 02:58:43.615177  2.8407 615 

>> plot(t.dt, t.val) 

datetime_plot

+0

En azından MATLAB R2014b'nin 'datetime' nesnelerle çalışması gerektiğini belirtmeliyim. Daha eski versiyonlar için, 'datenum' yerine (seri numaralar) veya sadece eski dizeleri kullanacaktınız. – Amro

+0

Teşekkürler! Bu iyi çalışıyor. – echou

0

doc datestr 

yok. Sayısız biçimlerinde tarih/zaman işlemek için çok fazla destek var. Kendinize özel bir çözüm getirerek kendinizi öldürmeden önce bunlardan yararlanın. Varsayılan olarak

time = datestr(text, 'yyyy/mm/dd hh:MM:dd.fff') 
[y,m,d,h,m,s] = datevec(time); 
ms = s - floor(s);