, 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
xlsread
basic
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).
(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)
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. –
excel dosyasını okumak için kullandığınız kodu gönderin. Ayrıca örnek bir dosya yardımcı olacaktır. – Amro
@Amro Daha fazla bilgi ekledim. Teşekkürler – echou