使用Python打印网络共享驱动器中剩余的空间量

使用Python打印网络共享驱动器中剩余的空间量,python,excel,pywin32,python-3.3,Python,Excel,Pywin32,Python 3.3,我想打印网络共享(M:drive)上的剩余空间量(GB),然后获取该值并将其添加到Excel电子表格中。我对编程非常陌生,需要所有能得到的帮助 提前谢谢 编辑: 这是我到目前为止所做的 import ctypes from win32com.client import Dispatch import pythoncom def drivespace(): #get space in bytes free_bytes = ctypes.c_ulonglong(0) cty

我想打印网络共享(M:drive)上的剩余空间量(GB),然后获取该值并将其添加到Excel电子表格中。我对编程非常陌生,需要所有能得到的帮助

提前谢谢

编辑:

这是我到目前为止所做的

import ctypes
from win32com.client import Dispatch
import pythoncom

def drivespace():
    #get space in bytes
    free_bytes = ctypes.c_ulonglong(0)
    ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(u'M:\\'), None, None ctypes.pointer(free_bytes))

    #calculate space in GB
    free_GB = free_bytes.value/1024/1024/1024
    print(free_GB)

    #input data to Excel
    xl = Dispatch ('Excel.Application')
    xl.visible = 0
    xl.Workbooks.Add (r'C:\Location\Location1\Location2\Book1.xlsm')
    xl.Run('Down1') #macro inside the workbook, just to move the cell down 1 row
    #here is where I need some help... something to input the data to the active cell
    #xl.Cells( ?? ACTIVE CELL HERE BUT DON'T KNOW HOW ?? ).value=(free_GB)
    xl.Quit()

    #release held Excel process
    pythoncom.CoUninitialize()
所以基本上,除了将数据打印到活动单元格之外,我已经对所有内容进行了排序。有没有人有任何pywin32知识可以帮助我做到这一点


非常感谢

我认为你可能需要把这些问题分解成几个子问题,每个子问题都试一下,然后针对任何你一直坚持的问题发布一个问题,包括你在帖子中的尝试。以下是一些建议的步骤和需要研究的领域:

  • 计算出驱动器上剩余的空间。有一根线 这可能会有帮助
  • 要写入Excel,有一个名为xlwt的模块,可从下载。我还找到了一个简短的教程来使用它 编辑

    对于Python3.x,我发现了一个xlwt端口,值得一试。我发现了一篇指向github存储库的帖子。我看不到安装程序,但应该直接从源代码构建

    您需要将此github页面中的所有内容下载到一个文件夹中,然后从命令行将cd下载到该目录并运行

    Python setup.py install
    

    编辑以下评论

    import ctypes, os, pythoncom
    from win32com.client import Dispatch
    
    def drivespace(drive, xl_path, col):
        #get space in bytes
        free_bytes = ctypes.c_ulonglong(0)
        ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(drive), \
                                                   None, None, ctypes.pointer(free_bytes))
    
        #calculate space in GB
        free_GB = free_bytes.value/1024/1024/1024
        print(free_GB)
    
        #input data to Excel
        xl = Dispatch('Excel.Application')
        xl.visible = 0
        wb = xl.Workbooks.Open(xl_path)
        ws = wb.Worksheets(1)
    
        # initialise values
        empty = False
        row = 1
    
        # loop until first empty cell in this column
        while not empty:
            val = ws.Range(col+str(row)).value
            print val
            if val == None:
                print "Found first empty cell! Writing Value..."
                ws.Range(col+str(row)).value = free_GB
                empty = True
            row += 1
    
        wb.Close(True)
        xl.Quit()
    
        #release held Excel process
        pythoncom.CoUninitialize()
    
    def main():
        drive = 'C:\\'
        xl_path = os.path.join(os.getenv('so'),'free_space_to_excel','Book1.xlsm')
        xl_column = 'A'
        drivespace(drive, xl_path, xl_column)
    
    if __name__ == '__main__':
        main()
    

    您只需更改主过程中的值即可将其设置为驱动器、xl_路径等。这需要对列字母进行额外的论证,并在该列中找到第一个可用的单元格。我认为这是一种比在打开工作表时依赖某个特定单元格处于活动状态更安全的方法。

    w到目前为止您有没有尝试过?什么有效,什么无效?我已将你对问题的替换回滚为解决方案。请找到并将其作为自己的答案发布。我尝试安装xlwt,但没有成功。在安装中,它提到它只适用于Python2.2-2.7,但我运行的是3.3。谢谢你回复我,顺便说一句:@user2696497好的,我自己没有试过,但我发现一个模块说它支持3.3:。谢谢你,我会试试的。目前正在试用openpyxl,但遇到一些问题,只是进行了检查,但xlsxwriter无法修改现有的电子表格(这是我所需要的),它只创建新的电子表格。有人已经将xlwt移植到Python 3,这可能值得一试。我在此处找到一篇文章()指向github存储库()。我看不到安装程序,但应该直接从源代码构建。我正在编辑上面的答案,并详细说明如何做到这一点。是的,这正是我的初衷。。。但我不希望必须选择单元格(即A2、B1等)。我希望在Excel宏将活动单元格移动到位时,能够将数据输入到当前活动的单元格中。谢谢你的帮助,克里斯,这真的很有帮助。@user2696497我在这里发布了一个更新的答案。现在,它将在指定列的单元格中循环,并找到第一个可用的列。如果你有任何问题,请告诉我。太棒了,我会在周一早上试一试,让你知道进展如何。再次感谢克里斯。不得不做了一些修改(见修改后的答案),但现在排序:)谢谢@用户2696497很高兴你最终到达了那里。如果此问题已解决,请将其标记为已接受的答案。你确定修正后的问题正确吗?这可能只是一个缩进问题,但现在看来更新为empty和行增量在while循环之外,这在理论上会使它卡在无限循环中。