TWAPI Powerpoint does not close

Roshan Shiveshwar
Roshan Shiveshwar Altair Community Member
edited October 2020 in Community Q&A

Hi,

I have created a tcl script that is supposed to perform following activities:

  1. Open ppt object
  2. Add new slide
  3. Paste animation (.avi) files.
  4. Save the file
  5. Close the ppt

Everything works fine, but at the end ppt does not close. Here is the code that I have written. Is there anything that I am missing out?

 

 set job_folder 'C:\\Users\\xcxc\\Desktop\\test_ui\\test'   set num_of_modes 15  #get the directory# set dirname [file dirname [info script]] set template_dirname '$dirname/Report_Template.pptx'   #handle the files#  file copy -force '$dirname/Report_Template.pptx' '$job_folder/Report/Report.pptx'  #modify the PPts# package require twapi set ppt [::twapi::comobj PowerPoint.Application] $ppt DisplayAlerts [expr 0] set presents [$ppt Presentations] $presents Open '$job_folder/Report/Report.pptx'; #Open the Presnetation set active_presentation [$ppt ActivePresentation]; #get the cureently active presentaatin set slides [$active_presentation Slides]; #gte the slide list set slide_1 [$slides Item 1]; #get control on slide index 1   set object_list {} set mode_counter 1 while {$mode_counter <= $num_of_modes} {     set slide_num [expr {$mode_counter + 1}]     set slide_$slide_num [$slides Add $slide_num 12]; #add one more slide into the presentation      set slide_$slide_num\_shapes [[set slide_$slide_num] Shapes]      set slide_$slide_num\_video_1 [[set slide_$slide_num\_shapes] AddMediaObject2 [file nativename '$job_folder/Report/Mode_$mode_counter\_Iso_Front.avi'] -1 -1 20 100 650 300]      set slide_$slide_num\_video_2 [[set slide_$slide_num\_shapes] AddMediaObject2 [file nativename '$job_folder/Modal_Analysis/Report/Mode_$mode_counter\_Iso_Back.avi'] -1 -1 500 100 650 300]       lappend object_list 'slide_$slide_num'     lappend object_list 'slide_$slide_num\_shapes'     lappend object_list 'slide_$slide_num\_video_1'     lappend object_list 'slide_$slide_num\_video_2'      incr mode_counter 1 }   $active_presentation Save   foreach object $object_list {     puts $object     [set $object] -destroy }  $slides -destroy $active_presentation -destroy    $ppt Quit $ppt -destroy

 

Answers

  • Roshan Shiveshwar
    Roshan Shiveshwar Altair Community Member
    edited June 2019

    Solved : There was a small eeror in the code.  One of the object was not destroyed properly

     set job_folder 'C:\\Users\\xcxc\\Desktop\\test_ui\\test'   set num_of_modes 15  #get the directory# set dirname [file dirname [info script]] set template_dirname '$dirname/Report_Template.pptx'   #handle the files#  file copy -force '$dirname/Report_Template.pptx' '$job_folder/Report/Report.pptx'  #modify the PPts# package require twapi set ppt [::twapi::comobj PowerPoint.Application] $ppt DisplayAlerts [expr 0] set presents [$ppt Presentations] set active_presentation  [$presents Open '$job_folder/Report/Report.pptx']; #Open the Presnetation set slides [$active_presentation Slides]; #gte the slide list set slide_1 [$slides Item 1]; #get control on slide index 1   set object_list {} set mode_counter 1 while {$mode_counter <= $num_of_modes} {     set slide_num [expr {$mode_counter + 1}]     set slide_$slide_num [$slides Add $slide_num 12]; #add one more slide into the presentation      set slide_$slide_num\_shapes [[set slide_$slide_num] Shapes]      set slide_$slide_num\_video_1 [[set slide_$slide_num\_shapes] AddMediaObject2 [file nativename '$job_folder/Report/Mode_$mode_counter\_Iso_Front.avi'] -1 -1 20 100 650 300]      set slide_$slide_num\_video_2 [[set slide_$slide_num\_shapes] AddMediaObject2 [file nativename '$job_folder/Modal_Analysis/Report/Mode_$mode_counter\_Iso_Back.avi'] -1 -1 500 100 650 300]       lappend object_list 'slide_$slide_num'     lappend object_list 'slide_$slide_num\_shapes'     lappend object_list 'slide_$slide_num\_video_1'     lappend object_list 'slide_$slide_num\_video_2'      incr mode_counter 1 }   $active_presentation Save   foreach object $object_list {     puts $object     [set $object] -destroy }  $slides -destroy $active_presentation -destroy    $ppt Quit $ppt -destroy