エクセルシートの文字色を調べる

47 views (last 30 days)
MATLABから、Excelのセルを指定(例えばセルA1)して、文字色を調べたいです。
戻り値は、RGB成分(例えば[0 0 1])が理想です。
どのようにすればよろしいでしょうか

Accepted Answer

Kojiro Saito
Kojiro Saito on 28 Feb 2022
Edited: Kojiro Saito on 28 Feb 2022
こちらの回答が参考になります。
Windows OS限定のやり方になりますが、actxserverというCOMインタフェースを使う方法で実現できます。
注意点としては、actxserverで立ち上げたExcelだとカレントフォルダがMATLABと違っているため、Openするときにpwdを付けて現在のフォルダにあるExcelファイルを開くようにすることと、Range('A1').Font.Colorで取得できる色情報が赤だと255、緑だと65280、青だと16711680と10進法になっています。
以下の方法でA1のセルにある色情報を取ってこれます。mycolorの中に [0 0 1]のようにRGBが格納されます。
objExcel=actxserver('excel.application');
objExcelW=objExcel.Workbooks;
objExcelF=objExcelW.Open([pwd filesep 'Book1.xlsx']); % 現在のフォルダにあるBook1.xlsxを開く
objExcelS=objExcelF.ActiveSheet;
color = objExcelS.Range('A1').Font.Color; % 10進法での色表示 例:255(赤)、65280(緑)、16711680(青)
b = floor(color / (256*256));
g = floor((color-b*256*256) / 256);
r = color-b*256*256-g*256;
mycolor = [r g b] / 255;
% Excelファイルのクローズとactxserverの消去
objExcelF.Close;
objExcel.Quit;
objExcel.delete;
処理終了後にExcelファイルを閉じる処理CloseやExcelのプロセスを終了するやQuitなどを入れてください。

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 28 Feb 2022
【類似の質問】
上記リンク先の通りExcel の ActiveX 機能を使用することで実現できます。動作未確認ですがこれで動くと思います。
h = actxserver('excel.application');
wb = h.Workbooks.Open(fullfile(pwd,'Book1.xlsx'),0,false);
ran = h.Activesheet.get('Range','A1');
validatecolor(['#' dec2hex(ran.font.Color)])
wb.Close;
h.Quit;
h.delete;
  1 Comment
Atsushi Ueno
Atsushi Ueno on 28 Feb 2022
すいません。validatecolor関数はR2020b以降の対応でした。
RGB成分(例えば[0 0 1])の取得については、先のKojiro Saitoさんの回答が参考になります。

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!