MATLAB のタイマーを使用して excel ファイルを作成するプログラムのエラー
MATLAB のタイマーを使って、プログラムを実行した最後に一度だけ
excelファイルにデータを書き込もうとしています。
TimerCallback.mとtimer_sample.mを同じフォルダに入れて、timer_sample.mを実行します。
MATLABは「mac-64bitのバージョンR2017a」です。
以下のエラーメッセージが出て、excelファイルが書き出されず困っています。
エラーメッセージ
>> timer_sample
Warning: Unable to write to Excel format, attempting to write file to csv format. To write to an Excel file, convert your data to a table and
use writetable.
> In xlswrite (line 179)
In TimerCallback/callback (line 20)
In timer_sample>@(varargin)mycallback.callback(varargin{:})
In timer/timercb (line 34)
In timercb (line 24)
Warning: Unable to write to Excel format, attempting to write file to csv format. To write to an Excel file, convert your data to a table and
use writetable.
> In xlswrite (line 179)
In TimerCallback/callback (line 21)
In timer_sample>@(varargin)mycallback.callback(varargin{:})
In timer/timercb (line 34)
In timercb (line 24)
Callback executed
TimerCallback.m
classdef TimerCallback < handle
properties %public properties
state;
x_value;
y_value;
filename;
end
methods
%constructor
function this = TimerCallback(filename)
if nargin > 0
this.filename = filename;
end
this.state = true;
end
%callback function
function callback(this, ~, ~)
%consider using writetable instead of xlswrite. At least, use only one xlswrite.
xlswrite(this.filename, this.x_value, 'sender');
xlswrite(this.filename, this.y_value, 'receiver');
this.state = false;
disp('Callback executed');
end
end
end
timer_sample.m
mycallback = TimerCallback('data.xlsx');
mytimer = timer('TimerFcn', @mycallback.callback, 'StartDelay', 30);
start(mytimer);
mycallback.x_value = [mycallback.x_value, [1 2 3]];
mycallback.y_value = [mycallback.y_value, [4 5 6]];
mycallback.x_value = [mycallback.x_value, [7 8 9]];
mycallback.y_value = [mycallback.y_value, [10 11 12]];
%and so on... until the Timer completes
試したこと
タイマーを使わなければ、以下のプログラムでexcelファイルに問題なく書き出せることは確認しました。
global x_value
global y_value
global stat
stat = true;
x_value = [x_value [1 2 3]]
y_value = [y_value [4 5 6]]
x_value = [x_value [7 8 9]]
y_value = [y_value [10 11 12]]
filename = 'data.xlsx';
x_range = 'sender';
y_range = 'receiver';
xlswrite(filename, x_value, x_range)
xlswrite(filename, y_value, y_range)