3

我有大约 150 个 .xls 和 .xlsx 文件需要转换为制表符分隔。我尝试使用 automator,但我只能一个接一个地完成。不过,这绝对比单独打开每个要快。我的脚本知识很少,所以我希望有一种尽可能轻松地做到这一点的方法。

4

2 回答 2

0

如果您准备为此使用 Python,我编写了一个将 Excel 电子表格转换为 csv 文件的脚本。该代码在Pastebin中可用。

您只需要更改以下行:

writer = csv.writer(fileout)

到:

writer = csv.writer(fileout, delimiter="\t")

使输出文件制表符分隔而不是标准逗号分隔。

就目前而言,此脚本一次提示您输入一个文件(允许您从对话框中进行选择),但它可以很容易地适应在给定目录树或名称与给定模式匹配的地方提取所有 Excel 文件.

如果您首先尝试使用单个文件并让我知道您的进展情况,如果您愿意,我可以帮助您进行更改以自动化其余部分。

更新

这是您可以使用的包装脚本:

#!/usr/bin/python

import os, sys, traceback
sys.path.insert(0,os.getenv('py'))
import excel_to_csv

def main():
    # drop out if no arg for excel dir
    if len(sys.argv) < 2:
        print 'Usage: Python xl_csv_wrapper <path_to_excel_files>'
        sys.exit(1)
    else:
        xl_path = sys.argv[1]

    xl_files = os.listdir(xl_path)
    valid_ext = ['.xls', '.xlsx', '.xlsm']

    # loop through files in path
    for f in xl_files:
        f_name, ext = os.path.splitext(f)
        if ext.lower() in valid_ext:
            try:
                print 'arg1:', os.path.join(xl_path,f)
                print 'arg2:', os.path.join(xl_path,f_name+'.csv')
                excel_to_csv.xl_to_csv(os.path.join(xl_path,f),
                                       os.path.join(xl_path,f_name+'.csv'))
            except:
                print '** Failed to convert file:', f, '**'
                exc_type, exc_value, exc_traceback = sys.exc_info()
                lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
                for line in lines:
                    print '!!', line
            else:
                print 'Sucessfully conveted', f, 'to .csv'


if __name__ == '__main__':
    main()

您将需要更换:

sys.path.insert(0,os.getenv('py'))

在顶部带有 excel_to_csv 脚本的绝对路径或系统上的环境变量。

于 2013-07-22T23:33:17.347 回答
0

在控制工作簿中使用 VBA 循环遍历指定目录或工作簿列表中的源工作簿,打开每个工作簿,保存转换后的数据,然后依次关闭每个工作簿。

于 2013-07-23T01:00:03.383 回答