2007年12月18日火曜日

pythonで PowerPointを操作する。

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

以下サンプル。

・powerpoint.py
  1. #!/bin/env python  
  2. # -*- encoding: shift-jis -*-  
  3. import sys  
  4. import os  
  5. import re  
  6. import time  
  7. import win32com.client, pythoncom  
  8.   
  9.   
  10.   
  11. from_path="test.ppt"  
  12. pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)  
  13. ppt = win32com.client.DispatchEx('Powerpoint.Application')  
  14. ppt_file = ppt.Presentations.open(from_path, FalseFalseFalse)  
  15. slide_count = ppt_file.Slides.Count  
  16. for slide_num in range(1, slide_count):  
  17. print slide_num  
  18. slides=ppt_file.Slides(slide_num)  
  19. #################3  
  20. #オブジェクト  
  21. ##################  
  22. for i in range(1,slides.Shapes.Count):  
  23. print i  
  24. try:  
  25. print slides.Shapes(i).TextFrame.TextRange.Text  
  26. except:  
  27. pass  


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

  1. #-*- coding:utf-8 -*-  
  2. """ 
  3. win32モジュールを使用してExcelを操作するサンプル 
  4. """  
  5.   
  6. import win32com.client  
  7.   
  8. #Excel.Applicationを起動  
  9. xlApp=win32com.client.Dispatch("Excel.Application")  
  10.   
  11. #visible  
  12. xlApp.Visible=1  
  13.   
  14. #workbooksを追加  
  15. xlApp.Workbooks.Add()  
  16.   
  17. #シートを指定  
  18. sheet=xlApp.Workbooks(1).Sheets(1)  
  19.   
  20. #シートの(1,1)に値を代入  
  21. cellObj=sheet.Cells(1,1)  
  22. cellObj.Value="Hello From Python"  
  23. cellObj.Font.Size=18  
  24.   
  25. sheet.Range("A2:A5").Value=("A2","A2","A2","A2")  
  26. sheet.Range("B2:C5").Value=(("B2","C2"),("B2","C2"),("B2","C2"),("B2","C2"))  
  27. sheet.Range("A2:C5").Borders.Weight=2  
  28.   
  29. #ファイルの保存  
  30. xlApp.Workbooks(1).SaveAs(Filename='output.xls')  
  31.   
  32. #終了  
  33. xlApp.Quit()  

グラフを描写するサンプル。
・ExcelGraphSample.py
  1. #-*- coding:utf-8 -*-  
  2. """ 
  3. win32モジュールを使用してExcelを操作するサンプル 
  4. """  
  5.   
  6. import win32com.client  
  7.   
  8. #data  
  9. MyData = ( ('Name','Value'), ('A',5), ('B',2), ('C',3), ('D',7), )  
  10. MyRange = "A1:B5"  
  11.   
  12. #Excel.Applicationを起動  
  13. xlApp=win32com.client.Dispatch("Excel.Application")  
  14.   
  15. #visible  
  16. xlApp.Visible=1  
  17.   
  18. #workbooksを追加  
  19. xlApp.Workbooks.Add()  
  20.   
  21. #シートを指定  
  22. sheet=xlApp.Workbooks(1).Sheets(1)  
  23.   
  24. #  
  25. DataRange = sheet.Range(MyRange)  
  26. DataRange.Value = MyData  
  27.   
  28. #ChartWizard  
  29. xlChart=xlApp.Charts.Add()  
  30. xlChart.ChartWizard( Source=DataRange ,  
  31. Gallery =3 ,  
  32. Format=None,  
  33. PlotBy=2,  
  34. CategoryLabels=1,  
  35. SeriesLabels=1,  
  36. HasLegend=1,  
  37. Title='sample',  
  38. CategoryTitle='NAme',  
  39. ValueTitle='Value'  
  40. )  
  41.   
  42. #シート上にグラフ作成  
  43. xlChart2 = xlApp.Charts.Add()  
  44. xlChart2.ChartWizard(DataRange, 2None2111,'Sample01''Name''Value','Extra')  
  45.   
  46. xlChart2.Location(2"Sheet1")    #Sheet1に表示する  
  47. xlChartObj = sheet.ChartObjects(1)  
  48. CellC2 = sheet.Cells(2,3)    #セルC2を基準に使う  
  49. xlChartObj.Left, xlChartObj.Top = CellC2.Left, CellC2.Top    #位置の設定  
  50. xlChartObj.Width, xlChartObj.Height= CellC2.Left * 2, CellC2.Height * 10  #縦横サイズの設定       
  51.   
  52. #ファイルの保存  
  53. xlApp.Workbooks(1).SaveAs(Filename='graph.xls')  
  54.   
  55. #終了  
  56. xlApp.Quit()