Documentation:Users:Tools - MdsWiki
Navigation
Personal tools

From MdsWiki

Jump to: navigation, search

Contents

Accessing MDSplus data in Excel via Python

Using the Excel/Python interface package called xlwings it is possible to use the MDSplus python package to access data and return it to Excel running on Windows. The xlwings package is included in Anaconda Python for Windows but may be an older version. I had to update the package before it would work on my system. The following are the steps needed to make an Excel spreadsheet that accesses MDSplus data.

Install Anaconda and update xlwings

Download an installer for Anaconda from here and install it. I tested with the 2.7 version. If you prefer using the 3.6 version you will need to install the latest alpha version of MDSplus on your system as there are compatibility problems with the stable release of MDSplus and Anaconda 3.x. Once you install Anaconda you will need to install the MDSplus python module in Anaconda and update the xlwings package. To install the MDSplus package, the best way is to open a cmd.exe window as Administrator and perform the following commands:

cd \Program Files\MDSplus\mdsobjects\python
C:\Anaconda\python.exe setup.py install

To update xlwings using the same Administrator cmd.exe window issue the following commands:

cd C:\Anaconda\
pip install xlwings --upgrade
xlwings addin install

Create an Excel document

To create an Excel document which can access MDSplus do the following commands from a cmd.exe window (does not need to be run as Administrator this time):

cd %USERPROFILE%\Documents
xlwings quickstart <document-name>

This will create an Excel spreadsheet in a subdirectory with the same name as the document as well as a python module of the same name in the subdirectory. For example:

C:\Users\twf\Documents>xlwings quickstart mdsplus-data

C:\Users\twf\Documents>dir mdsplus-data
 Volume in drive C is Windows10
 Volume Serial Number is 08B0-A048

 Directory of C:\Users\twf\Documents\mdsplus-data

03/14/2017  04:01 PM    <DIR>          .
03/14/2017  04:01 PM    <DIR>          ..
03/14/2017  04:01 PM                24 mdsplus-data.py
03/14/2017  04:01 PM            35,272 mdsplus-data.xlsm
              2 File(s)         35,296 bytes
              2 Dir(s)  250,469,343,232 bytes free

The mdsplus-data.xlsm is a "macro enabled Excel Spreadsheet".

Next edit the mdsplus-data.py file and add some MDSplus python based functions to access data. Here is a sample version you might try:

import xlwings as xw

from MDSplus import Connection

_MConnection=None
 
@xw.func
def MdsConnect(host):
    global _MConnection
    try:
        _MConnection=Connection(host)
        return "Connected to %s" % host
    except Exception as e:
        return e

@xw.func
def MdsOpen(tree,shot):
    global _MConnection
    try:
        _MConnection.openTree(str(tree),int(shot))
        return "Successfully opened tree %s shot %d\n" % (str(tree),int(shot))
    except Exception as e:
        return e

@xw.func
def MdsGet(exp):
    global _MConnection
    try:
        return _MConnection.get(str(exp)).data()
    except Exception as e:
        return e

Add MDSplus data to the document

First take a close look at the UDFS tutorial as there is a one-time step needed at the top of the page to let Excel trust the use of user macros. There is a lot more information on this page if you want to explore other capabilties. Now to get the data into the document...


First double click on the xlsm file in your document directory. This should open Excel with the new spreadsheet. There should be a tab to the right labeled: "xlwings". Click on this tab and then clixk on the button labeled "fx Import Python UDFs". This will make the MdsConnect, MdsOpen and MdsGet functions available as Excel functions. You can then click on a cell and enter "=MdsConnect(host-name)" to connect to a server. Similarly you can click in another cell to open a tree with "=MdsOpen(treename,shot)" and finally retrieve some data with "=MdsGet(expression)".