【问题标题】:Mass Convert .xls and .xlsx to .txt (Tab Delimited) on a Mac在 Mac 上将 .xls 和 .xlsx 批量转换为 .txt(制表符分隔)
【发布时间】:2013-07-21 20:30:14
【问题描述】:

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

【问题讨论】:

  • 您能否提供您的 Automator 工作流程,以便我查看您的解决方案?
  • 很多时候使用 Automator,需要使用名为“运行 AppleScript”的 Automator 操作。 Excel 支持 AppleEvents,以便用 AppleScript(或 Python)编写的脚本可以通过 AppleEvents 控制 Excel。理想情况下,AppleEvents 为您提供除 GUI 之外的第二个用户界面。
  • 获取指定的 Finder 项目 --> 打开 Excel 工作簿 --> 保存 Excel 工作簿(下载 automatorworld.com/archives/microsoft-office-automator-actions,非内置) --> 关闭 Excel 工作簿 --------- ---------------------------- 自定义“保存 Excel 工作簿”有一个下拉菜单,上面写着“另存为”,选项为“新建” 、“其他”和“新变量”。在其下方,它有一个“格式”下拉菜单,其中包含大量默认 Excel 转换工作流程所没有的选项。

标签: macos excel ms-office automator


【解决方案1】:

如果您准备好为此使用 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 脚本的绝对路径或系统上的环境变量。

【讨论】:

  • 有趣的是我其实对python有些了解。对此感到抱歉,但是您如何运行它?输出显示“~/Desktop/done/excel_to_csv.py:9: ImportError: No module named xlrd”
  • 抱歉忘了说您需要安装 xlrd 库。您可以从这里获取源代码:pypi.python.org/pypi/xlrd/0.9.2。我只在 Windows / Linux 上使用过 python,但我认为它在 osx 上是一样的——你应该只需要解压缩包,然后在下载后运行 python setup.py install
  • 考虑一下,您可能必须在上面的命令前面添加 Sudo 才能以超级用户身份安装。
  • 我收到一个错误:文件“/Users/[me]/Desktop/excel_to_csv.py”,第 130 行,在 main() 文件“/Users/[me]/Desktop/ excel_to_csv.py”,第 92 行,在主 os.chdir(os.path.join(os.getenv('userprofile'),'documents')) 文件“/System/Library/Frameworks/Python.framework/Versions/2.6 /lib/python2.6/posixpath.py",第 67 行,在 join AttributeError: 'NoneType' object has no attribute 'endswith'
  • 对不起,我忘记了。 'userprofile' 环境变量将是特定于 Windows 的。 os 库应该仍然可以工作,但是您可以将 os.chdir() 中的路径替换为您在脚本中输入的路径,或者使用在您的系统上有效的环境变量。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多