目录中的 Python/VBA 输出文件

Posted

技术标签:

【中文标题】目录中的 Python/VBA 输出文件【英文标题】:Python/VBA outputting file in directory 【发布时间】:2013-10-09 21:08:08 【问题描述】:

我正在使用以下命令从 Microsoft Access VBA 成功运行我的 Python 脚本:,

Shell (CurrentProject.Path & "\Python\Python-Portable.exe " & CurrentProject.Path & "\Python\scripts\convert.py")

当 Python 脚本运行时,csv 输出被放置在我的 Windows 主目录中。以下是 convert.py 的 Python 源代码:

#!/usr/bin/python
import sys, os
from openpyxl.reader.excel import load_workbook

def main():
    wb=load_workbook(filename='list.xlsx')  
    for sheet in wb.worksheets:
        csv_file='%s.csv' % sheet.title
        print 'Creating %s' % csv_file
        fd=open(csv_file, 'wt')
        for row in sheet.rows:
            values=[]
            for cell in row:
                value=cell.value
                if value is None:
                    value=''
                if not isinstance(value, unicode):
                    value=unicode(value)
                value=value.encode('utf8')
                values.append(value)
            fd.write('\t'.join(values))
            fd.write('\n')
        fd.close()

if __name__=='__main__':
    main()

我希望将 CSV 文件放入“CurrentProject.Path & “\Python\scripts\”。关于为什么 Access VBA 将我的输出放入我的 Windows 主目录的任何建议?

谢谢

【问题讨论】:

【参考方案1】:

Shell 函数不保证它运行的程序有任何特定的工作目录——事实上,我相信它使用默认 shell 的任何默认值,这往往意味着你在较新的 Windows 上的主目录和在旧版 Windows 上完全没用的地方。

当您指定像 'mysheet.csv' 这样的裸文件名(或像 r'foo\mysheet.csv' 这样的相对路径名)时,Python 将使用当前工作目录来决定将其放在哪里。

因此,您的 VBA 脚本必须在运行程序之前明确地 cd,或者更简单地说,您的 Python 脚本必须明确地将文件放在正确的位置。


例如,如果您希望文件在脚本文件本身旁边结束(这是一件很奇怪的事情,但这似乎是您所要求的):

import sys, os

scriptdir = os.path.dirname(os.path.abspath(__file__))

# ... later ...

fd=open(os.path.join(scriptdir, csv_file), 'wt')

或者,您可能希望使 VB 脚本可以将输出目录作为参数传递:

fd = open(os.path.join(sys.argv[1], csv_file), 'wt')

然后:

Shell (CurrentProject.Path & "\Python\Python-Portable.exe " & 
       CurrentProject.Path & "\Python\scripts\convert.py " & 
       CurrentProject.Path & "\Python\scripts")

【讨论】:

以上是关于目录中的 Python/VBA 输出文件的主要内容,如果未能解决你的问题,请参考以下文章

pytho xlrd简介

Pytho之Django

4.pytho while 循环

pytho 的基本语法

pytho lambda表达式

模块与包--未完成整理