Image2Excel

バージョン 1.0.0 (1.06 MB) 作成者: Hernia Baby
画像を読み込みExcelの背景色として反映させるMATLABファイル
ダウンロード: 6
更新 2024/1/2

MATLAB Online で開くにはこちらをクリック!

Open in MATLAB Online

File Exchangeにも投稿しました。

View Image2Excel on File Exchange

画像をExcelにするMATLAB術

目次

はじめに

画像を読み込む

列番号をExcelに対応させる

背景色番号を抽出

Cell型に変換

MATLABからExcelを操作しよう

使用した関数

数字をExcelの列に対応する関数

背景を塗りつぶす関数

結果

おわりに

はじめに

こんにちは、HerniaBabyです。

皆さんExcel大好きですよね?世間ではネ申Excelといわれるものが世の中にはびこるくらい日本人はExcel大好きだと思っています。

もはやExcelは和の心、大和魂…。

そんなわけで今回は画像を別の形式に変換するクソアプリをMATLABでやっていきたいと思います。

画像を読み込む

まずは画像を読み込みましょう。

このときに方眼に色を書き込むんですが、画像がデカいと反映されないみたいなのでimresizeで小さくしていきます。

色の制限もあるっぽいですが、今回はめんどくさいので減色もしません。

反映されない理由

Excel で「異なるセル形式が多すぎます」というエラー メッセージが表示される

clc, close all, clear;
I = imread('chacha_sq.jpeg');
I = imresize(I,[150 150]);
imshow(I)

figure_0.png

画像は愛犬チャチャです。かわいいね( *´艸`)

行番号と列番号を抽出します。

[row, col]  = size(I,1,2);

列番号をExcelに対応させる

Excelは列がA...AA...AAAのような英語になっています。

列番号をこれに対応させる必要があります。

MATLABで数字をExcelの列名に変換でMATLABアンバサダーの方が紹介してくれてますが、今回はMATLAB Answersのものを拾って使ってます。

I need to convert a number into its column name equivalent

col_e       = arrayfun(@int2xlcol, (1:col));
ImgString   = col_e + string((1:row)');

背景色番号を抽出

RGB値を抜き出してExcelで使えるようにします。

最初は Cody を参考にHex Stringに直してたんですが、結局hex2decに直してたのでそのままdouble型で出してます。

How to set excel cell color to red from Matlab?

※ExcelはBGRなので注意してください。

I_d         = im2double(I);
[R,G,B]     = imsplit(I_d);
bgrColor    = (B.*256^2 + G.*256 + R).*255;

Cell型に変換

forループを使うとMATLABフリークスがマジギレするのでcellfunを使います。

そのためcell配列に変換します。

ImgCells        = cellstr(ImgString);
bgrColorCell    = num2cell(bgrColor);

MATLABからExcelを操作しよう

こいつのドキュメント本当に少なくて苦労しました。

MathWorksさん!Excelは大和魂ぞ?!充実させてください(白目)

今回は色んなところからかき集めたので説明していきます。

まずはパスを指定します。

%Obtain the full path name of the file
filePath = fullfile(pwd, 'Book1.xlsx');

ExcelをActiveXで起動させます。

%Open an ActiveX connection to Excel
h = actxserver('excel.application');

Excelファイルを開きます。

%Open an excel file
wb = h.Workbooks.Open(filePath,0,false);

ここで各セルに背景色を書き込みます。

cellfun(@(x,y) xlscolor(h, x, y), ImgCells, bgrColorCell)

行の高さと列の幅を正方形にします。

ハンドルプロパティどこあるのか苦労しました。

列幅はQiita(【MATLAB】Excel ファイルのセル幅自動調整)にあったんですよね。高さが…。

ちなみに正方形の調整は以下を参考にしました。

Excelの技:すべてのセルを正方形にして方眼紙のように!

range = ImgString(1)+":"+ImgString(end);
wbrange = wb.ActiveSheet.get('Range',range);
wbrange.EntireColumn.ColumnWidth = 1.88;
wbrange.EntireRow.RowHeight = 15;

最後に上書き保存してExcelを閉じます。

% save the file with the given file name, close Excel
wb.Save;
wb.Close;
h.Quit;
h.delete;
disp('完了')
完了

使用した関数

数字をExcelの列に対応する関数

function str = int2xlcol(num)    
    raw = 'A':'Z';
    str = raw(1+rem(num-1,26));
    tmp = fix((num-1)/26);
    while any(tmp)
        str = [raw(1+rem(tmp-1,26)),str];
        tmp = fix((tmp-1)/26);
    end
    str = string(str);
end

背景を塗りつぶす関数

function xlscolor(h, range, Color)
    ran = h.Activesheet.get('Range',range);
    ran.interior.Color = Color;
end

結果

けっこうよくないですか?!

image_0.png

アップするとこんな感じです!

image_1.png

てことで完成です。

おわりに

今回は業務に関連するものではなく気ままに作りました。

応用すると昔流行ったExcelでBadAppleなんかも出来そうですね。

cellfun使ったんですがやり方が悪いのか計算が遅いんですよね。

誰か列指定して一気に背景色反映させる方法知りません?

知ってたら教えてください。

引用

Hernia Baby (2026). Image2Excel (https://github.com/HerniaBaby/Image2Excel), GitHub. に取得済み.

MATLAB リリースの互換性
作成: R2023b
すべてのリリースと互換性あり
プラットフォームの互換性
Windows macOS Linux
タグ タグを追加

GitHub の既定のブランチを使用するバージョンはダウンロードできません

バージョン 公開済み リリース ノート
1.0.0

この GitHub アドオンでの問題を表示または報告するには、GitHub リポジトリにアクセスしてください。
この GitHub アドオンでの問題を表示または報告するには、GitHub リポジトリにアクセスしてください。