Set Analysis Settings from Excel file - demo extension

Pernelle Marone-Hitz
Member, Moderator, Employee Posts: 873
✭✭✭✭
Below is an example extension that illustrates reading information from an Excel file and defining analysis settings (number of steps, step end tile, number of substeps) based on data written in Excel file.
Tagged:
0
Answers
-
Excel file is defined as follows:
Some important points:
Tab is called “AnalysisSettings”
User must first define number of steps in B6 cell
User can add new values (in columns) but should not change the lines (ie, step end time is read in line 10 for example)
Some settings are hardcoded in the extension and not read from file (Autotime stepping and “Define By” settings).
The .xml file is:
- <extension version="1" name="SetAnalysisSettings">
- <guid shortid="SetAnalysisSettings">B8050A4F-DB37-46D9-BB33-349D70027F2D</guid>
- <script src="main.py" />
- <interface context="Mechanical">
- <images>images</images>
- <toolbar name="SetAnalysisSettings" caption="Set Analysis Settings">
- <entry name="SetAnalysisSettings" icon="testIcon">
- <callbacks>
- <onclick>SetAnalysisSettings</onclick>
- </callbacks>
- </entry>
- </toolbar>
- </interface>
- </extension>
The .py file is:
- def SetAnalysisSettings(analysis):
- import clr
- clr.AddReference("Ans.UI.Toolkit")
- clr.AddReference("Microsoft.Office.Interop.Excel")
- import Microsoft.Office.Interop.Excel as Excel
- excel = Excel.ApplicationClass()
- #excel.Visible = True # makes the Excel application visible to the user
- #excel.ScreenUpdating = True # enables screen refreshing.
- import Ansys.UI.Toolkit
- ## Create Windows explorer pop-up
- DefaultFolder = r'C:\'
- FilePath =Ansys.UI.Toolkit.FileDialog.ShowOpenFilesDialog(Ansys.UI.Toolkit.Dialog(),DefaultFolder,'All Files(s)|*.*',0,'Select .fac file',None)
- if str(FilePath[0]) != 'OK':
- return
- filename = list(FilePath[1])[0] # only one Excel file must be selected
- workbook = excel.Workbooks.Open(filename)
- inputdata=workbook.Worksheets("AnalysisSettings").Select()# Select Worksheet by Name
- ws1 = workbook.Worksheets("AnalysisSettings")
- ## Create analysis settings from reading Excel sheet
- analysisSettings = analysis.AnalysisSettings
- # Read and store values
- numberSteps = int(ws1.Range("B6").Value2)
- stepEndTimeList=[]
- autotimeSteppingList=[]
- numberSubstepsList=[]
- for step in range(numberSteps):
- # read values
- stepEndTime = str(ws1.Cells(10,2+step).Value2) # read step end time
- autotimeStepping = str(ws1.Cells(11,2+step).Value2) # read autotimeStepping
- numberSubsteps = str(ws1.Cells(13,2+step).Value2) # read number of substeps
- # store values
- stepEndTimeList.append(stepEndTime) # append to list of steps end time
- autotimeSteppingList.append(autotimeStepping) # append to list of autotimeStepping
- numberSubstepsList.append(numberSubsteps) # append to list of substeps
- # transform values with needed format
- stepEndTimeList = [Quantity(i+"[sec]") for i in stepEndTimeList]
- numberSubstepsList = [int(float(i)) for i in numberSubstepsList]
- # Apply settings
- analysisSettings.Activate()
- for step in range(1,numberSteps+1):
- analysisSettings.NumberOfSteps = step
- analysisSettings.CurrentStepNumber = step # set current step number
- analysisSettings.StepEndTime = stepEndTimeList[step-1]# apply step end time
- analysisSettings.DefineBy = TimeStepDefineByType.Substeps
- analysisSettings.NumberOfSubSteps = numberSubstepsList[step-1]
- analysisSettings.AutomaticTimeStepping = AutomaticTimeStepping.Off
- ExtAPI.Log.WriteMessage(str(numberSubstepsList[step-1]))
- ExtAPI.Log.WriteMessage(str(analysisSettings.NumberOfSubSteps))
- ExtAPI.DataModel.Tree.Refresh()
- excel.Application.Quit() ## Close Only the Excel file.
- excel.Quit() ## Close entire Excel
2