MATLAB を使用してエクセルファイルのワークシートを消す方法はありますか?
4 views (last 30 days)
Show older comments
XLSWRITE を使用すると、デフォルトではワークシートが 3 枚あるファイルが作成されます。その3枚のうち、1 枚のワークシートだけを使用したいと考えています。残りの 2 枚のワークシートを削除する方法を教えてください。
Accepted Answer
MathWorks Support Team
on 4 Jun 2013
Active Xの機能を使用して、ユーザの入力に応じて Excel ファイルのシートが削除できます。注意点として、Excel ファイルは少なくとも一つのシートが必要なため、全てのシートを削除するとエラーとなります。
機能を実現したコード例は、下記に紹介します。
以下のコードは、Microsoft Excel を持っている場合にのみ実行可能です。
% この例は現在のディレクトリに存在する test.xls に対して操作を実行します。
% test.xls ファイルにはデフォルトで 3枚のワークシートが存在します。
% このようなエクセルファイルは、エクセルファイルで新しいエクセルファイルを
% 作成し、test.xls と保存することで作成できます。
% XLSINFO を使用してワークブックの情報を取得
XL_file = [pwd '\test.xls'];
[type, sheet_names] = xlsfinfo(XL_file);
% Excel を COM オートメーションサーバとしてオープン
Excel = actxserver('Excel.Application');
% アプリケーションを隠す
set(Excel, 'Visible', 0);
% エクセルのアラートを非表示に設定
set(Excel,'DisplayAlerts',0);
% エクセルのワークブックのハンドルを取得
Workbooks = Excel.Workbooks;
% エクセルワークブックを開き、アクティベート
Workbook = Workbooks.Open(XL_file);
% アクティブなワークブックの中からシートを選択
Sheets = Excel.ActiveWorkBook.Sheets;
index_adjust = 0;
% ユーザの入力に合わせてワークシートを削除
for i = 1:max(size(sheet_names))
inp_prompt = sprintf('ワークシート %s を削除しますか? [y/n]',sheet_names{i});
user_inp = lower(input(inp_prompt,'s'));
switch user_inp
case{'y'}
current_sheet = get(Sheets, 'Item', (i-index_adjust));
invoke(current_sheet, 'Delete')
out_string = sprintf('ワークシート %s は削除されました。',sheet_names{i});
index_adjust = index_adjust +1;
otherwise
out_string = sprintf('ワークシート %s は削除されていません。',sheet_names{i});
end
disp(out_string);
disp(' ');
end
% ワークブックを保存
Workbook.Save;
% ワークブックをクローズ
Workbooks.Close;
% エクセルを終了
invoke(Excel, 'Quit');
% ActiveX オブジェクトのハンドルを消去
delete(Excel);
0 Comments
More Answers (0)
See Also
Categories
Find more on MATLAB の COM オブジェクト in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!