LoginSignup
1
2

Pythonでword、excel、powerpointを画像に変換する方法

Last updated at Posted at 2023-02-24

この記事はword、excel、powerpointなどMicrosoft Officeで書いた書類のファイルから画像に変換する方法についてまとめます。

wordから画像への変換

wordから画像へ変換する方法をgoogleで検索してみたら、asposeというモジュールを使うという方法を見つけました。
https://products.aspose.com/words/python-net/conversion/word-to-image/

でもこれは有料なので、あまりおすすめできません。

他の方法なら結局wordから直接画像ファイルに変換する方法は見つからないので、まずwordからpdfに変換して、その後pdfから画像に変換することになります。

wordからpdfに変換するにはdocx2pdfというモジュールは便利です。
そしてpdfから画像に変換するにはpdf2imageというモジュールは便利です。
どれもモジュールの名前はそのままですね。

インストールはpipで簡単にできます。

pip install docx2pdf
pip install pdf2image

docx2pdfの使い方はすごく簡単です。特に説明しなくてもコードを見ればすぐわかるくらい。

pdf2imageの使い方について、この記事を参考に
https://qiita.com/masuda401/items/f5cf9102cd3380db6ffb

pdf2imageではjpg、png、gif、bmp、tiffなど色んな画像の種類ができるが、ここではpngにします。

docx2pdfpdf2imageを使ってwordを画像に変換するコードはこのように書きます。

import docx2pdf
import pdf2image
import os

word_file = r'hoge.docx' # 入力wordファイルの名前
img_path = r'fugaimage' # 出力の画像を置くフォルダ
dpi = 72 # 解像度(指定しなければ200になってたなり大きい)

# まずはpdfにする
pdf_file = word_file+'.pdf' # pdfファイルの名前(すぐ削除するからどうでもいいけど)
docx2pdf.convert(word_file,pdf_file)
# フォルダが既存でなければまずは作成
if(not os.path.exists(img_path)):
    os.mkdir(img_path)
# pdfから画像を取得する
lis_img = pdf2image.convert_from_path(pdf_file,dpi)
for i,img in enumerate(lis_img,1): # 一枚ずつ保存する
    img.save(os.path.join(img_path,str(i)+'.png'))
os.remove(pdf_file) # すべて終わった後pdfを削除する

こうやって指定したフォルダにwordの中の各ページがそれぞれ画像に出力されます。

.pngの代わりに.jpgや.gifなどが欲しい場合、拡張子を変えてもいいです。

変換したいwordが1ページしかない場合なら、簡単にこう書けばいいです。

word_file = r'hoge.docx'
img_file = r'fugaimage.png'
dpi = 72

pdf_file = word_file+'.pdf'
docx2pdf.convert(word_file,pdf_file)
pdf2image.convert_from_path(pdf_file,dpi)[0].save(img_file)
os.remove(pdf_file)

excelから画像への変換

wordと同じように、簡単で直接画像ファイルに変換する方法はないようです。

ちなみにこれもasposeでできるようですが、やはり有料なのでこの方法はひとまず不採用にします。
https://blog.aspose.com/cells/convert-excel-to-image-in-python/

まずexcelをpdfに変換してからpdfから画像に変換するということになります。

excelからpdfに変換できるモジュールとしてcomtypeswin32comがあります。この2つはとても似ていますが、win32comがよく知られているようなので、ここではwin32comを使うという方法で行きます。

win32comでexcelからpdfに変換する方法についてはこの記事を参考に
https://qiita.com/KazukiTerashima/items/2300c4e5bd56ac84ea43

その他に、win32comで色々excelを扱う方法についてはこの記事を参考に
https://qiita.com/kumarstack55/items/9ae3432446afca06497f

ちなみに、実はwin32comがwordをpdfに変換することもできます。この記事を参考に
https://qiita.com/hanchan/items/21552ed97e7203744310
でもwordの場合はやっぱりdocx2pdfを使う方が便利なので、ここでwin32comはexcelにだけ適用します。

win32compdf2imageを使ってexcelをpngに変換するコードはこうなります。

import win32com.client
import pdf2image
import os

excel_file = r'hoge.xlsx'
img_path = r'fugaimage'
dpi = 72

pdf_file = excel_file+'.pdf'
app = win32com.client.Dispatch('Excel.Application')
wb = app.Workbooks.Open(excel_file)
wb.ExportAsFixedFormat(0,pdf_file)
app.Quit()

if(not os.path.exists(img_path)):
    os.mkdir(img_path)

lis_img = pdf2image.convert_from_path(pdf_file,dpi)
for i,img in enumerate(lis_img,1):
    img.save(os.path.join(img_path,str(i)+'.png'))
os.remove(pdf_file)

ほとんどwordの場合とは同じなので、詳しい説明は省略します。

powerpointから画像への変換

次はppt(powerpoint)です。実はwordとexcelと違って、pptは簡単に直接画像に変換できる方法があります。

それができるモジュールはwin32comcomtypesです。excelと同じようにこれを使ってpdfに変換することもできますが、pptの場合はpdfだけでなく、各種の画像ファイルに変換することもできます。

この記事も参考に
https://qiita.com/Gyutan/items/dee1d6922778fe70037b

同じ方法はwordとexcelに使うことはできないのは残念です。

win32comを使ってpptからpngに変換するコードはこんな感じです。

import win32com.client

ppt_file = r'hoge.pptx' # pptファイル
img_path = r'fugaimage' # 画像を入れるフォルダ

app = win32com.client.Dispatch('Powerpoint.Application')
ppt = app.Presentations.Open(ppt_file)
ppt.SaveAs(img_path,18)
ppt.Close()
app.Quit()

ここで.SaveAs()の中の18という数字はpngに変換するという意味です。その他にもいっぱいあります。例えば

  • 16: gif
  • 17: jpg
  • 18: png
  • 19: bmp
  • 21: tif
  • 32: pdf

こうやってwin32comを使ったらpowerpointファイルを画像にもpdfにも簡単に変換できて便利です。

1
2
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
1
2