このマクロでは、基本的にPowerPointの各スライドをスキャンし、指定された言語を設定します。よく働く。 Howerverは、テキストボックスではないコンテナをスキップします。私はテーブル、スマート、チャートなどにその言語を適用したいと思います。PowerPoint 2007 - テキストを含む表やグラフなどの言語を設定する
これも可能ですか?これは現在のコードです:
このマクロでは、基本的にPowerPointの各スライドをスキャンし、指定された言語を設定します。よく働く。 Howerverは、テキストボックスではないコンテナをスキップします。私はテーブル、スマート、チャートなどにその言語を適用したいと思います。PowerPoint 2007 - テキストを含む表やグラフなどの言語を設定する
これも可能ですか?これは現在のコードです:
ええ、それはPowerPointで直感的なものではありませんが、それはできます。基本的には、3つの主要なタイプのシェイプ(シンプル、グループ化、テーブル)があります。このコードはすべてをチェックします:
Public Sub changeLanguage()
On Error Resume Next
Dim gi As GroupShapes '<-this was added. used below
'lang = "English"
lang = "Norwegian"
'Determine language selected
If lang = "English" Then
lang = msoLanguageIDEnglishUK
ElseIf lang = "Norwegian" Then
lang = msoLanguageIDNorwegianBokmol
End If
'Set default language in application
ActivePresentation.DefaultLanguageID = lang
'Set language in each textbox in each slide
For Each oSlide In ActivePresentation.Slides
Dim oShape As Shape
For Each oShape In oSlide.Shapes
'Check first if it is a table
If oShape.HasTable Then
For r = 1 To oShape.Table.Rows.Count
For c = 1 To oShape.Table.Columns.Count
oShape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = lang
Next
Next
Else
Set gi = oShape.GroupItems
'Check if it is a group of shapes
If Not gi Is Nothing Then
If oShape.GroupItems.Count > 0 Then
For i = 0 To oShape.GroupItems.Count - 1
oShape.GroupItems(i).TextFrame.TextRange.LanguageID = lang
Next
End If
'it's none of the above, it's just a simple shape, change the language ID
Else
oShape.TextFrame.TextRange.LanguageID = lang
End If
End If
Next
Next
End Sub
すべてのシェイプで言語を変更するマクロを実行するときに同じ問題が発生しました。 私が知った限り、PPT2007では、ChartsやSmartArtなどのオブジェクトにプログラムで言語を設定することはできません。これらのオブジェクトのVBAにlanguageIDを設定するアクセス権はありません。ただし、SmartArtオブジェクトまたはChartオブジェクトをクリックして言語を変更すると機能します。他のオブジェクトの
:
https://superuser.com/questions/432366/how-do-i-change-the-language-of-all-powerpoint-slides-at-onceから少し時間が経ちましたがここに来ましたが。私のpythonでの作業を好むので、win32com
パッケージを使用してPythonのバージョンは次のようになります。
infile_name = 'drive:/path/to/in.pptx'
outfile_name = 'drive:/path/to/out.pptx'
target_language = 1031 # find in language list, here German
import time
import win32com.client
ppt = win32com.client.Dispatch('PowerPoint.Application')
ppt.Visible = True
presentation = ppt.Presentations.Open(infile_name)
def change_all_subshapes(target_shape, language_id):
if target_shape.HasTextFrame:
target_shape.TextFrame.TextRange.languageID = language_id
if target_shape.HasTable:
for r in range(1, target_shape.Table.Rows.Count + 1):
for c in range(1, target_shape.Table.Columns.Count + 1):
target_shape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = language_id
# look the constants msoGroup and msoSmartArt up
if target_shape.Type in [6, 24]:
for i in range(1, target_shape.GroupItems.Count + 1):
change_all_subshapes(target_shape.GroupItems.Item(i), language_id)
# necessary: hopefully ppt is open after a second
time.sleep(1)
print('all slides')
for i in range(1, presentation.Slides.Count + 1):
for j in range(1, presentation.Slides(i).Shapes.Count + 1):
change_all_subshapes(presentation.Slides(i).Shapes(j), target_language)
print('master shapes')
for i in range(1, presentation.SlideMaster.CustomLayouts.Count + 1):
for j in range(1, presentation.SlideMaster.CustomLayouts(i).Shapes.Count + 1):
change_all_subshapes(presentation.SlideMaster.CustomLayouts(i).Shapes(j), target_language)
presentation.SaveAs(outfile_name)
presentation.Close()
ppt.Quit()
それはかなりうまく動作します!しかし、それはSmartArtをチェックしていないようです。これは可能ですか?マイクロソフトでは2007年版にマクロ記録を含めるべきだったので、SmartArtオブジェクトをクリックして記録することができた。 –
私の側ではSmartArtをチェックしますが、PowerPoint 2010でテストしました.2007年でも、SmartArtは 'oShape.GroupItems 'とみなされます。 SmartArtで別のデッキでテストしようとすると、同じ結果が得られますか? –
@Kenny Bones:別のデッキでこれを試すことができましたか? –