背景

我在$ DAYJOB中构建了许多文本文件,然后将其提交到非常复杂的Excel文档中的审查委员会。每个文本文件的内容必须粘贴到单独的Excel选项卡(适当命名)上的TextBox中。对于这些文本文件,任何给定的Excel工作表中都可以包含30到220个不同的选项卡。

以前的工作方式

我最初将Python脚本指向了一个充满Windows文件夹的文件夹文本文件,并要求其构建空白的exel文档;然后将选项卡复制到格式化的Excel模板中。但是,我们公司的台式机安全措施已更改,现在可以破坏该脚本。所有Excel文档均由DRM安全中间件加密,这会破坏我的脚本excel表。我阻止疯狂的恳求无济于事。

问题

现在我的解决方案是手动复制和粘贴(不可否认,我比Windows用户更像是一个Unix程序员。 )。单击数百个文本文件并将其内容手动复制到excel令人感到麻木,并且它与所需的每次单击/击键事件相乘。对于每个文件,我似乎都花了一半以上的时间:


双击打开文件(事件1和2-单击)
使用Cntla(事件)全选3-击键)
使用Cntlc复制到剪贴板(事件4-击键)
使用Cntlv将其粘贴到等待的Excel文本框中(事件5-击键)
关闭打开的文件,这样它们就不会累积(事件6-单击)

我想找到一个解决此问题的可接受方法。我找到了一个叫做“复制文本内容”的东西,据称它可以双击文件内容复制到剪贴板。但是该软件是免费的,但源代码封闭。我无法在台式机上安装封闭源免费软件。但是,可接受开源免费软件解决方案。

问题

我想要一个开源的解决方案。我正在寻求“复制文本内容”的开源替代方案,但是如果有人想出了一种可以与excel配合使用的替代软件解决方案,我就会不知所措。

注意:换行符在文本文件必须保留。

评论

您的请求仍然是半自动的-如果您更喜欢Unix(也可能是PHP脚本)-我建议此库phpexcel.codeplex.com来处理OpenOffice文件格式,例如XLSX。我要说的是,可以将其直接复制到电子表格中,而不是剪贴板中(当然,这是有道理的,尽管不需要任何智能即可粘贴到正确的单元格中)。

#1 楼

在这里,我为您创建了一个开源应用程序,该应用程序应该执行您想要的工作。

https://bitbucket.org/mrexodia/copyfile

我接受pull-请求您是否要进行改进。

编辑:

概述:
CopyFile是一个小程序,在其中注册了“ CopyFile”条目
Windows资源管理器的上下文菜单。它复制ASCII文件的内容(不支持UNICODE文件)。

评论


真好!如果将热键组合绑定到它,那会更好(从键盘复制文件内容,但这很好)。它的体积也令人沮丧...我必须看看我是否能理解你在这里所做的

–迈克·彭宁顿
2014年3月11日在16:36



您能否添加更多细节,专门告诉其他用户此应用程序的功能?

–aman207
2014年3月11日在16:46

@ aman207:当然,回购中有一个自述文件。 Mike Pennington:不可能将热键直接绑定到上下文菜单项。这将需要一些讨厌的钩子,但是源代码全由您自己处理,因此,继续添加它:P

– mrexodia
2014年3月11日17:55



#2 楼

嗯,我知道,您只想在Windows上执行xsel -bi data.txt; xdotool search --class Excel key ctrl+v

这是脚本工作,不是临时应用程序。 Windows的专用桌面自动化脚本环境。它是开源的。该脚本语言将Basic语法的优雅与Unix shell解析的直观性以及TeX扩展的规则性结合在一起,但是它可以完成工作。

这是一个脚本,可以完成我上面描述的操作。

#NoEnv
; #Warn
SendMode Input

;; Read the file passed on the command line (or prompt for one)
If %0% = 0
{
    FileSelectFile, 1
    IfNotEqual, ErrorLevel, 0, Exit, 2
}
FileRead, data, %1%
IfNotEqual, ErrorLevel, 0, Exit, 2
;; Copy the content to the clipboard
clipboard = %data%

;; Locate and activate the main Excel window.
;; To reach a dialog box, you may need to change the class. Run the AutoHotKey
;; companion program Window Spy to determine the class name.
WinGet, w, ID, A
WinActivate, ahk_class XLMAIN
IfNotEqual, ErrorLevel, 0, Exit, 1
WinGet, ww, ID, A

;; Send the paste shortcut
Send ^v

;; Restore the original active window
WinActivate, ahk_id %w%


从命令行运行

autohotkey \path\to\copy-to-excel.ahk data.txt


您可以将命令\path\to\autohotkey \path\to\copy-to-excel.ahk添加到右键单击菜单在资源管理器中;请参阅如何将程序添加到所有文件的上下文菜单?,更改Windows默认使用的程序或如何在Windows 7中设置文件关联(不是“打开”,而是其他)或自定义Windows 7或Vista发送到菜单取决于要在菜单中显示命令的确切位置和时间。

评论


吉尔,谢谢你的回答。当您将片段添加到Excel中时,您的工作有点过头了(我希望将事情放在工作表中的特定位置,并且每个工作表有多个文本框);但是,这无疑很好地说明了这一概念。谢谢

–迈克·彭宁顿
2014年3月13日在11:33



#3 楼

我回答了您的问题的这一部分:


如果有人提出了脚本化的excel替代方案,那我就耳熟能详。


AutoIt是一种脚本语言,可让您自动执行Windows的用户界面,然后绕过安全限制。

为满足您的需求AutoIt提供了基本的文件访问功能(就像您在Python中所做的那样)认为)以读取您的.txt文件的内容。然后,借助其Windows gui的自动化功能,您可以像人工操作一样将内容写入Excell文件(我建议使用键触发而不是鼠标)。

这是一种编程脚本语言,因此的功能非常强大,但对于没有经验的公众来说可能会很复杂,但是您似乎对编程很满意。实际上,它提供了一个宏记录器,对于学习它非常有用。

AutoIt以它创建的大量游戏机器人而闻名。我个人使用它来自动执行文本复制/粘贴并通过网络发送。

评论


谢谢您的回答;但是,我要的是文件内容复制解决方案而不是编程语言来构建解决方案。但是,如果您发布了AutoIT脚本来执行此操作,则可以回答我的问题。

–迈克·彭宁顿
2014年3月11日15:00

@MikePennington是的,它不是立即可用的解决方案。实际上,我是在回答你的最后一句话:如果有人想出了一个脚本化的excel替代方案,那么我无所不能。

–分形
2014年11月11日15:05



我看到那句话含糊不清;但是,我的目的是寻求解决方案,而不是构建解决方案的语言。

–迈克·彭宁顿
2014年3月11日15:07

好的,这就是为什么您没有直接在VBA Excel中构建它的原因?

–分形
2014年3月11日在16:08

“ AutoIt”是开源的吗?

–怀特先生
2014年3月12日在1:02

#4 楼

我使用的是Ditto,这是一个开源剪贴板管理器。

Ditto允许您将内容复制并粘贴到任何Windows应用程序中。让我选择Ditto的原因-


可搜索的剪贴板历史记录
将热键分配给前10个剪贴板副本,让您轻松粘贴
无需触摸即可使用鼠标
粘贴的全局热键
剪贴板操作包含/排除的应用程序的单独列表
将文本粘贴到组中,以便于组织
数字的可配置设置日期和要保留的剪贴板条目的数量

Ditto可作为GPLv3许可程序使用。

评论


谢谢您的回答,在问这个问题之前,我尝试过使用Ditto,但是没有比“手动方法”更多的按键操作,无法找到将文本文件放入Ditto的方法。您能否详细说明如何解决该问题?

–迈克·彭宁顿
2014年3月12日在12:15

@Mike,您提到了Python脚本-该脚本可以打开文本文件,并将内容复制到剪贴板。内容将在Ditto中可用,并且您可以使用全局热键将复制的文本粘贴到Excel中。同上仅支持最近10个剪贴板条目的热键,因此这可能是一个问题

– Sathyajith Bhat
2014年3月12日12:21



好的,Ditto的UI似乎对我正在处理的大量文件不友好,但这是一个有用的主意...

–迈克·彭宁顿
2014年3月12日在12:22

#5 楼

Windows附带了一个名为“ clip.exe”的实用程序,我认为它确实可以满足您的需求。 (除非您对从资源管理器中驾驶东西感到无所适从。)

用法:


C:>剪辑/?

CLIP

描述:
将命令行工具的输出重定向到Windows剪贴板。
然后可以将该文本输出粘贴到其他程序中。

参数列表:
/?显示此帮助消息。明智的做法是将其包装在脚本中,该脚本对要进入电子表格的所有文件进行迭代,并有一个步骤等待每个用户之间的用户输入。

#6 楼

您可以使用我的剪贴板管理器程序Clipjump来执行此操作。它具有内置功能,可以将所选文件的内容复制到其多个剪贴板中。

您所要做的就是在Windows资源管理器(或任何其他文件管理器)中选择一个文件,然后按快捷方式。文件内容将被其多个剪贴板捕获。将所有文本文件复制到clipjump后,请按住Ctrl并使用键V(入门)浏览所有复制的数据,然后释放Ctrl逐个粘贴它们。当前活动的剪辑将被记住。

未定义Copy File Path的默认系统级快捷方式。您将在“设置”中进行设置。