Image2Excel

バージョン 1.0.0 (1.06 MB) 作成者: Hernia Baby
画像を読み込みExcelの背景色として反映させるMATLABファイル
ダウンロード: 4
更新 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 (2024). Image2Excel (https://github.com/HerniaBaby/Image2Excel), GitHub. に取得済み.

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

Community Treasure Hunt

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

Start Hunting!

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

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

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