2007年12月18日火曜日

pythonで PowerPointを操作する。

win32com.clientを使う。
DispatchExメソッドを実行してPowerPointのオブジェクトを取得する。
それ以降はなんとなく関数を実行していく。

以下サンプル。

・powerpoint.py
#!/bin/env python
# -*- encoding: shift-jis -*-
import sys
import os
import re
import time
import win32com.client, pythoncom



from_path="test.ppt"
pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
ppt = win32com.client.DispatchEx('Powerpoint.Application')
ppt_file = ppt.Presentations.open(from_path, False, False, False)
slide_count = ppt_file.Slides.Count
for slide_num in range(1, slide_count):
print slide_num
slides=ppt_file.Slides(slide_num)
#################3
#オブジェクト
##################
for i in range(1,slides.Shapes.Count):
print i
try:
print slides.Shapes(i).TextFrame.TextRange.Text
except:
pass



win32com.clientでExcelを操作する方法は以下のサンプル。
・ExcelSample.py

#-*- coding:utf-8 -*-
"""
win32モジュールを使用してExcelを操作するサンプル
"""

import win32com.client

#Excel.Applicationを起動
xlApp=win32com.client.Dispatch("Excel.Application")

#visible
xlApp.Visible=1

#workbooksを追加
xlApp.Workbooks.Add()

#シートを指定
sheet=xlApp.Workbooks(1).Sheets(1)

#シートの(1,1)に値を代入
cellObj=sheet.Cells(1,1)
cellObj.Value="Hello From Python"
cellObj.Font.Size=18

sheet.Range("A2:A5").Value=("A2","A2","A2","A2")
sheet.Range("B2:C5").Value=(("B2","C2"),("B2","C2"),("B2","C2"),("B2","C2"))
sheet.Range("A2:C5").Borders.Weight=2

#ファイルの保存
xlApp.Workbooks(1).SaveAs(Filename='output.xls')

#終了
xlApp.Quit()

グラフを描写するサンプル。
・ExcelGraphSample.py
#-*- coding:utf-8 -*-
"""
win32モジュールを使用してExcelを操作するサンプル
"""

import win32com.client

#data
MyData = ( ('Name','Value'), ('A',5), ('B',2), ('C',3), ('D',7), )
MyRange = "A1:B5"

#Excel.Applicationを起動
xlApp=win32com.client.Dispatch("Excel.Application")

#visible
xlApp.Visible=1

#workbooksを追加
xlApp.Workbooks.Add()

#シートを指定
sheet=xlApp.Workbooks(1).Sheets(1)

#
DataRange = sheet.Range(MyRange)
DataRange.Value = MyData

#ChartWizard
xlChart=xlApp.Charts.Add()
xlChart.ChartWizard( Source=DataRange ,
Gallery =3 ,
Format=None,
PlotBy=2,
CategoryLabels=1,
SeriesLabels=1,
HasLegend=1,
Title='sample',
CategoryTitle='NAme',
ValueTitle='Value'
)

#シート上にグラフ作成
xlChart2 = xlApp.Charts.Add()
xlChart2.ChartWizard(DataRange, 2, None, 2, 1, 1, 1,'Sample01', 'Name', 'Value','Extra')

xlChart2.Location(2, "Sheet1")    #Sheet1に表示する
xlChartObj = sheet.ChartObjects(1)
CellC2 = sheet.Cells(2,3)    #セルC2を基準に使う
xlChartObj.Left, xlChartObj.Top = CellC2.Left, CellC2.Top    #位置の設定
xlChartObj.Width, xlChartObj.Height= CellC2.Left * 2, CellC2.Height * 10  #縦横サイズの設定     

#ファイルの保存
xlApp.Workbooks(1).SaveAs(Filename='graph.xls')

#終了
xlApp.Quit()