• excel导入


    # Copyright(c) 2016, David Mans, Konrad Sobon
    # @arch_laboratory, http://archi-lab.net, http://neoarchaic.net
    
    import clr
    import sys
    import System
    from System import Array
    from System.Collections.Generic import *
    
    clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
    from Microsoft.Office.Interop import Excel
    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo("en-US")
    from System.Runtime.InteropServices import Marshal
    
    pyt_path = r'C:Program Files (x86)IronPython 2.7Lib'
    sys.path.append(pyt_path)
    
    from os import path
    assemblies = System.AppDomain.CurrentDomain.GetAssemblies()
    path1 = [a.Location for a in assemblies if 'bbIcons,' in a.FullName][0]
    path2 = System.IO.Path.GetDirectoryName(path1).rsplit('\',1)[0]
    bb_path = '%s\extra\' %path2
    sys.path.append(bb_path)
    import bumblebee as bb
    
    #The inputs to this node will be stored as a list in the IN variable.
    dataEnteringNode = IN
    
    filePath = IN[0]
    runMe = IN[1]
    sheetName = IN[2]
    byColumn = IN[3]
    origin = IN[4]
    extent = IN[5]
    
    if filePath != None:
        if filePath.GetType() == System.IO.FileInfo:
            filePath = filePath.FullName
    
    def ReadData(ws, origin, extent, byColumn):
    
        rng = ws.Range[origin, extent].Value2
        if not byColumn:
            dataOut = [[] for i in range(rng.GetUpperBound(0))]
            for i in range(rng.GetLowerBound(0)-1, rng.GetUpperBound(0), 1):
                for j in range(rng.GetLowerBound(1)-1, rng.GetUpperBound(1), 1):
                    dataOut[i].append(rng[i,j])
            return dataOut
        else:
            dataOut = [[] for i in range(rng.GetUpperBound(1))]
            for i in range(rng.GetLowerBound(1)-1, rng.GetUpperBound(1), 1):
                for j in range(rng.GetLowerBound(0)-1, rng.GetUpperBound(0), 1):
                    dataOut[i].append(rng[j,i])
            return dataOut
    
    def GetOrigin(ws, origin):
        if origin != None:
            origin = ws.Cells(bb.CellIndex(origin)[1], bb.CellIndex(origin)[0])
        else:
            origin = ws.Cells(ws.UsedRange.Row, ws.UsedRange.Column)
        return origin
    
    def GetExtent(ws, extent):
        if extent != None:
            extent = ws.Cells(bb.CellIndex(extent)[1], bb.CellIndex(extent)[0])
        else:
            extent = ws.Cells(ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row, ws.UsedRange.Columns(ws.UsedRange.Columns.Count).Column)
        return extent
    
    def SetUp(xlApp):
        # supress updates and warning pop ups
        xlApp.Visible = False
        xlApp.DisplayAlerts = False
        xlApp.ScreenUpdating = False
        return xlApp
    
    def ExitExcel(xlApp, wb, ws):
        # clean up before exiting excel, if any COM object remains
        # unreleased then excel crashes on open following time
        def CleanUp(_list):
            if isinstance(_list, list):
                for i in _list:
                    Marshal.ReleaseComObject(i)
            else:
                Marshal.ReleaseComObject(_list)
            return None
            
        xlApp.ActiveWorkbook.Close(False)
        xlApp.ScreenUpdating = True
        CleanUp([ws,wb,xlApp])
        return None
    
    def LiveStream():
        try:
            xlApp = Marshal.GetActiveObject("Excel.Application")
            xlApp.Visible = True
            xlApp.DisplayAlerts = False
            return xlApp
        except:
            return None
    
    live = False
    
    if runMe:
        try:
            errorReport = None
            message = None
            if filePath == None:
                # run excel in live mode
                xlApp = LiveStream()
                live = True
            else:
                # run excel from file on disk
                xlApp = SetUp(Excel.ApplicationClass())
                if path.isfile(unicode(filePath)):
                    xlApp.Workbooks.open(unicode(filePath))
                live = False                
            # get workbook
            wb = xlApp.ActiveWorkbook
            # get worksheet
            if sheetName == None:
                ws = xlApp.ActiveSheet
                dataOut = ReadData(ws, GetOrigin(ws, origin), GetExtent(ws, extent), byColumn)
                if not live:
                    ExitExcel(xlApp, wb, ws)
            elif not isinstance(sheetName, list):
                ws = xlApp.Sheets(sheetName)
                dataOut = ReadData(ws, GetOrigin(ws, origin), GetExtent(ws, extent), byColumn)
                if not live:
                    ExitExcel(xlApp, wb, ws)
            else:
                # process multiple sheets
                dataOut = []
                if isinstance(origin, list):
                    if isinstance(extent, list):
                        for index, (name, oValue, eValue) in enumerate(zip(sheetName, origin, extent)):
                            ws = xlApp.Sheets(str(name))
                            dataOut.append(ReadData(ws, GetOrigin(ws, oValue), GetExtent(ws, eValue), byColumn))
                    else:
                        for index, (name, oValue) in enumerate(zip(sheetName, origin)):
                            ws = xlApp.Sheets(str(name))
                            dataOut.append(ReadData(ws, GetOrigin(ws, oValue), GetExtent(ws, extent), byColumn))
                else:
                    if isinstance(extent, list):
                        for index, (name, eValue) in enumerate(zip(sheetName, extent)):
                            ws = xlApp.Sheets(str(name))
                            dataOut.append(ReadData(ws, GetOrigin(ws, origin), GetExtent(ws, eValue), byColumn))
                    else:
                        for index, name in enumerate(sheetName):
                            ws = xlApp.Sheets(str(name))
                            dataOut.append(ReadData(ws, GetOrigin(ws, origin), GetExtent(ws, extent), byColumn))
                if not live:
                    ExitExcel(xlApp, wb, ws)    
        except:
            xlApp.Quit()
            Marshal.ReleaseComObject(xlApp)
            # if error accurs anywhere in the process catch it
            import traceback
            errorReport = traceback.format_exc()
            pass
    else:
        errorReport = "Set RunMe to True."
    
    #Assign your output to the OUT variable
    if errorReport == None:
        OUT = dataOut
    else:
        OUT = errorReport

  • 相关阅读:
    js 日期时间大小比较
    微软开源项目地址
    通过配置host文件实现本地域名任意设置
    如何取消MSSQL自带智能提示步骤,使用第三方智能提示插件
    在Firefox中关闭缓存
    js获取select标签选中的值
    input文本框设置和移除默认值
    Power Designer 16.5 不能设置自增
    Visual Studio 2017 Key激活码
    终于找到方法关闭Siri了,之前是关不掉的必须开着
  • 原文地址:https://www.cnblogs.com/ShirleyX/p/7999176.html
Copyright © 2020-2023  润新知