19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

パワポのリンク切れグラフを救うMATLAB術

Last updated at Posted at 2023-04-08

こんにちは、HerniaBabyです。
今回はPowerPointの資料を引き継いだ時あるあると対処法やっていきたいと思います。

目次

はじめに

皆さん、こんなことありませんか?

パワーポイントの資料にあるグラフを使いたい…
image_0.png

右クリックしてデータの編集を押しますよね?
image_1.png

そしたらこれ
image_2.png

image_3.png

ここでだいたい諦めると思いますが、今回はそれを救出しましょう。

準備

まずはパワポのデータをコピーして拡張子をzip形式にします。
image_4.png

中身を見てみよう

以下の手順で chart1.xml を探します。
image_5.png

VSCodeで中身を見てみると・・・
image_6.png

どうも < c:v > と < /c:v > の間に数字が埋まってそうです。

データを救出

まずはデータを読み込みます。

Code
fname   = 'chart1.xml';
txt     = fileread(fname);

次に < c:numCache > と < /c:numCache > の間をとります。

Code
startPat    = '<c:numCache>';
endPat      = '</c:numCache>';
T = extractBetween(txt,startPat,endPat)
Output
T = 2x1 cell    
'<c:formatCode>General</c:formatCode><c:ptCount val="26"/><c:pt idx="0"><…  
'<c:formatCode>General</c:formatCode><c:ptCount val="26"/><c:pt idx="0"><…  

x軸とy軸のデータがとれそうですね。

ここからそれぞれの数字をとってみましょう。

Code
startPat    = '<c:v>';
endPat      = '</c:v>';
C = extractBetween(T,startPat,endPat)'
Output
C = 26x2 cell    
'0'          '0.46535735484144181'
'1'          '0.24058892718565272'
'2'          '0.38828185922115804'
'3'          '0.14205571372730461'
'4'          '0.74214061125431341'
'5'          '1.1921126247527463' 
'6'          '1.1255206724949594' 
'7'          '0.11089586657166785'
'8'          '1.3045562710033081' 
'9'          '0.21587902699026487'

ここでまだやったーとはなりません。

中身を見ると文字として抜き出してます。

Code
class(C{1})
Output
ans = 'char'

数値に変えましょう。

Code
C = str2double(C)
Output
C = 26x2    
         0    0.4654
    1.0000    0.2406
    2.0000    0.3883
    3.0000    0.1421
    4.0000    0.7421
    5.0000    1.1921
    6.0000    1.1255
    7.0000    0.1109
    8.0000    1.3046
    9.0000    0.2159

Code
plot(C(:,1),C(:,2),'ko-','Color',[.3 .3 .3])

figure_0.png

エクセルだと曲線プロットになってましたが、MATLABではジグザグしてます。

でもなんかとれてそうですね。

エクセルに保存

保存して中身をプロットしてみましょう。

Code
writematrix(C,'data.xlsx')

image_7.png

うん、できてますね。

ちなみに横軸日付の場合はシリアル値で書かれます。

datetimeなどで形を変えて保存しましょう。

終わりに

画像からだいたいの数値を持ってくる方法もあるけど、今回は厳密に欲しいということでやってみました。

この方法はパワポのリンク切れグラフから値を探したかったのでchart1.xmlを探ってみたを参考にしました。

勉強になりました。

おまけ

今回はTable of Contents の追加:Live Script から Markdown への自動変換 を参考に作成しました。

いつもとても非常に助かっております。

19
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?