[[20200527153043]] 『エクセルに貼り付けされている写真を上から順番に』(高梨) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルに貼り付けされている写真を上から順番に取り出したい』(高梨)

写真貼り付けソフトよりエクセル書き出しをした
エクセルファイルから写真データを取り出したいです。
1枚に、2〜3枚貼りついていて多いものではページ数が50枚を超えます。

使用中のソフトでは、写真だけを落とすことができないようで。
(でも、このソフトは指定なので変更することができません)

よい方法を、ご教示ください。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


写真が貼り付けられているエクセルファイルをコピーして、拡張子を.zipに変えてファイルを開いてみてください。
すると「xl」というフォルダの中に「media」というフォルダがあるのでそちらから取り出せます。
しかし順番がどうなっているのかは失念してしまいましたので確認してみてください。
(いち) 2020/05/27(水) 15:46

いち さん

やっぱり、そのやり方しかないんですかね。
それで、やったのですが順番にならなかったので
他にないかな〜と思って質問しました。
(高梨) 2020/05/27(水) 23:38


 少数例でしかみていませんが、shapeのZOrderPosition(PictureならZOrder)の順番に
 連番が振られて mediaフォルダに書き出されているのではないかと思われます。
 で、それらの順序は位置関係ではなく、書き込まれた時刻の順序だろうと思われます。

    Dim sp As Picture
    For Each sp In ActiveSheet.Pictures
        sp.BottomRightCell.Value = sp.ZOrder
    Next
 のようなコードで、それらのファイルが、どれに対応するものかはわかりますけど。
 むろん写真の現物を見れば、それがどれに対応するものかはわかりますので、必要もないかもしれません。

 位置関係の順に番号を振り直すことも、理屈の上からは可能でしょうね。(書く気はありませんが。)

(γ) 2020/05/28(木) 08:32


複数のシートにまたがっていてもひとつのmediaフォルダにまとめられるので、
上記の方針では判別がつかないですね。

もっとも、こんな方法もあるかもしれません。
各画像をCopyPictureでクリップボードにコピーし、
それを、WindowsAPIを使ってクリップボードから例えばjpgファイルに転送するという方法です。
グラフィックフィルタを利用する方法だったように記憶します。
どなたか詳しい方からコメントがあればよいと思います。

いずれにせよ、TopLeftCellのアドレスをたよりに、
位置関係から順序を決めるロジックを書く必要はあると思います。

(γ) 2020/05/28(木) 08:44


案1。
ブックを開いて、シートに貼られた画像オブジェクト分ループ。 TopLeftCellプロパティを参考にして、順番情報とオブジェクト名を抜き出し。 順番情報でソート。 オブジェクトを順番通りに参照しつつ、イメージ情報を名前を付けて保存。 こういうマクロを書けば実現できますが、画像を再圧縮する事になるので、若干劣化するでしょう。

案2。
対象ブックをZIPファイルとしてコピー。 保存されている画像ファイル名を元に、シート毎のXMLファイルを解析して、どの位置にどのファイル名が貼られているかをデータ化。 位置情報を元にソート。 ファイルを順番通りリネームしつつ、ZIPファイルから取り出す。 こういうマクロだと、劣化なしで処理できます。

いずれにせよ、掲示板で他人に作らせるレベルの処理内容ではないので、ご自身で頑張るか、諦めるのが良いかと思います。
(???) 2020/05/28(木) 11:34


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.