Programa de código abierto para copiar el contenido de un archivo de texto de Windows al portapapeles

Fondo

Genero muchos archivos de texto en mi $DAYJOB, que luego se envían a una junta de revisión en un documento de Excel muy complicado. El contenido de cada archivo de texto debe pegarse en un cuadro de texto en pestañas individuales de Excel (nombradas apropiadamente). Cualquier hoja de Excel dada podría tener entre 30 y 220 pestañas diferentes para estos archivos de texto.

lo que solía funcionar

Originalmente, apunté un script de Python a una carpeta de Windows llena de archivos de texto y le pedí que creara un documento de Excel en blanco como tal; luego copié las pestañas en la plantilla de Excel con formato. Sin embargo, nuestras medidas de seguridad de escritorio corporativas cambiaron de una manera que ahora rompe ese guión. Todos los documentos de Excel están encriptados por DRM Security Middleware que rompe mis hojas de Excel con secuencias de comandos. Mis súplicas para detener la locura no han ido a ninguna parte.

El problema

Ahora mi solución es copiar y pegar manualmente (es cierto que soy más un programador de Unix que una persona de Windows). Hacer clic en cien archivos de texto y copiar los contenidos en Excel manualmente es abrumador, y se multiplica con cada evento de clic / pulsación de tecla requerido. Por cada archivo, parezco gastar más de la mitad de mi esfuerzo en:

  • Haga doble clic para abrir el archivo (Eventos 1 y 2 - Clics)
  • Seleccionar todo con Cntla(Evento 3 - Pulsación de tecla)
  • Copiar al portapapeles con Cntlc(Evento 4 - Pulsación de tecla)
  • Pegue en el cuadro de texto de Excel en espera con Cntlv(Evento 5 - Pulsación de tecla)
  • Cerrar archivo abierto, para que no se acumulen (Evento 6 - Clic)

Me encantaría encontrar una forma aceptable de solucionar este problema. Encontré algo llamado Copiar contenido de texto , que supuestamente hace una copia de contenido de archivo con dos clics en el portapapeles; sin embargo, el software es gratuito pero de código cerrado. No puedo instalar software gratuito de código cerrado en nuestros escritorios; sin embargo, las soluciones gratuitas de código abierto son aceptables.

Pregunta

Me gustaría una solución de código abierto para este problema; Estoy pidiendo una alternativa de código abierto para Copiar contenido de texto , pero si a alguien se le ocurre una solución de software alternativa que funcione con Excel, soy todo oídos.

Nota: se deben conservar los saltos de línea en los archivos de texto.

su solicitud sigue siendo semiautomática, en caso de que prefiera Unix (y probablemente también las secuencias de comandos PHP), le sugiero esta biblioteca phpexcel.codeplex.com para manejar formatos de archivo de OpenOffice, como XLSX. lo que estoy tratando de decir es que uno podría copiarlo directamente en la hoja de cálculo en lugar del portapapeles (por supuesto, solo tiene sentido, mientras que no se requiere inteligencia para pegarlo en la celda adecuada).

Respuestas (6)

Aquí, creé una aplicación de código abierto para ti que debería hacer lo que quieras.

https://bitbucket.org/mrexodia/copyfile

Acepto pull-requests si quieres mejorar la cosa.

EDITAR:

Descripción general: CopyFile es un pequeño programa que registra una entrada 'CopyFile' en el menú contextual del Explorador de Windows. Copia el contenido de un archivo ASCII (no se admiten archivos UNICODE).

¡Agradable! Sería aún mejor si le vinculara un combo de teclas rápidas (para copiar el contenido del archivo desde el teclado, pero esto es genial). También es deprimentemente pequeño... Tendré que ver si puedo entender lo que hiciste aquí.
¿Podría agregar más detalles específicamente para informar a otros usuarios sobre las funciones de esta aplicación?
@ aman207: claro, hay un archivo Léame en el repositorio. Mike Pennington: no es posible vincular directamente una tecla de acceso directo a un elemento del menú contextual. Eso requeriría algunos enlaces desagradables, pero la fuente es toda tuya para hacer lo que quieras, así que adelante y agrégalo: P

Ah, ya veo, quieres hacerlo xsel -bi data.txt; xdotool search --class Excel key ctrl+v, solo en Windows.

Este es un trabajo para un script, no para una aplicación ad hoc.

AutoHotkey es un entorno de secuencias de comandos de automatización de escritorio de propósito general para Windows. Es de código abierto. El lenguaje de secuencias de comandos combina la elegancia de la sintaxis básica con la intuición del análisis de shell de Unix y la regularidad de la expansión de TeX, pero hace el trabajo.

Aquí hay un script que hace lo que describí anteriormente.

#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%

Desde la línea de comando, ejecute

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

Puede agregar el comando \path\to\autohotkey \path\to\copy-to-excel.ahkal menú contextual en el Explorador; consulte ¿Cómo puedo agregar un programa al menú contextual de todos los archivos? , Cambiar qué programas usa Windows de forma predeterminada o Cómo configurar las asociaciones de archivos en Windows 7 (no 'abrir', pero otros) o Personalizar el menú Enviar a de Windows 7 o Vista dependiendo exactamente de dónde y cuándo desea que aparezca el comando El menú.

Gil, gracias por la respuesta. Está logrando demasiado cuando agregó la pieza para pegarla en Excel (quiero cosas en un lugar específico dentro de la hoja de trabajo, y hay varios cuadros de texto por hoja); sin embargo, esto ciertamente ilustra muy bien el concepto. Gracias

Respondo a esta parte de tu pregunta:

si a alguien se le ocurre una alternativa de Excel con guión, soy todo oídos.

AutoIt es un lenguaje de script que le permite automatizar la interfaz de usuario de Windows y luego eludir su restricción de seguridad.

Para cubrir sus necesidades, AutoIt proporciona una función básica de acceso a archivos (como lo hizo en Python, creo) para leer el contenido de sus archivos .txt . Luego, con la automatización de su interfaz gráfica de usuario de Windows, puede escribir el contenido en su archivo Excell (recomiendo usar el disparador de tecla en lugar del mouse) como lo haría un humano.

Es un lenguaje de script de programación, por lo que es muy potente, pero podría ser complicado para un público no iniciado, pero pareces estar cómodo con la programación. Actualmente se proporciona un grabador de macros , muy útil para aprenderlo.

AutoIt es bien conocido por la gran cantidad de bots de juegos creados con él. Personalmente lo usé para automatizar copiar/pegar texto y enviarlo a través de la red.

Gracias por su respuesta; sin embargo, solicito una solución de copia de contenido de archivo en lugar de un lenguaje de programación para construir la solución. Sin embargo, si publicó el script de AutoIT para hacerlo, eso responde a mi pregunta.
@MikePennington sí, no es una solución lista para usar. En realidad, te estaba respondiendo la última oración: si a alguien se le ocurre una alternativa de Excel con guión, soy todo oídos.
Puedo ver la ambigüedad en esa oración; sin embargo, mi intención es pedir soluciones, no lenguajes para construir la solución.
Bien, ¿entonces es por eso que no lo creaste directamente en VBA Excel?
¿Es "AutoIt" ​​de código abierto?
@w3d una parte de las fuentes están disponibles , pero no es totalmente de código abierto.
Autohotkey es una bifurcación de código abierto de Autoit y, de hecho, es el camino correcto aquí.

Uso Ditto, que es un administrador de portapapeles de código abierto.

Ditto le permite copiar y pegar contenidos en cualquier aplicación de Windows. Las cosas que me hicieron seleccionar Ditto -

  • Historial del portapapeles que se puede buscar
  • Asigne teclas de acceso rápido a las 10 mejores copias del portapapeles, lo que le permite pegar fácilmente
  • Se puede usar sin tener que tocar el mouse.
  • Teclas de acceso rápido globales para pegar
  • Lista separada para aplicaciones que están incluidas/excluidas de las operaciones del portapapeles
  • Organice el texto para pegarlo en grupos, lo que permite una fácil organización
  • Configuraciones configurables para la cantidad de días y la cantidad de entradas del portapapeles que se conservarán

Ditto está disponible como un programa con licencia GPLv3 .

Gracias por responder, intenté usar Ditto antes de hacer esta pregunta, pero no pude encontrar una manera de obtener los archivos de texto en Ditto sin más pulsaciones de teclas que "el método manual". ¿Podría explicarme cómo podría resolver mi problema con él?
@Mike, mencionas la secuencia de comandos de Python: la secuencia de comandos puede abrir los archivos de texto y copiar el contenido en el portapapeles. El contenido estará disponible en Ditto y puede usar las teclas de acceso rápido globales para pegar el texto copiado en Excel. Sin embargo, Ditto admite teclas de acceso rápido solo para 10 entradas recientes del portapapeles, por lo que esto podría ser un problema
Ok, la interfaz de usuario de Ditto no parece ser amigable con la gran cantidad de archivos con los que estoy tratando, pero esta es una idea útil...

Windows viene con una utilidad llamada "clip.exe" que creo que hace exactamente lo que quieres. (A menos que esté decidido a conducir cosas desde el explorador).

Uso:

C:>clip /?

ACORTAR

Descripción: redirige la salida de las herramientas de línea de comandos al portapapeles de Windows. Esta salida de texto se puede pegar en otros programas.

Lista de parámetros: /? Muestra este mensaje de ayuda.

Ejemplos:

DIR | CLIP          Places a copy of the current directory
                    listing into the Windows clipboard.

CLIP < README.TXT   Places a copy of the text from readme.txt
                    on to the Windows clipboard.

Aunque no estoy completamente familiarizado con su flujo de trabajo, parece sensato envolver esto en una secuencia de comandos que repita todos los archivos que desea incluir en la hoja de cálculo con un paso para esperar la entrada del usuario entre cada uno.

Puede usar mi programa de administrador de portapapeles Clipjump para hacerlo. Tiene una función incorporada para copiar el contenido del archivo seleccionado a sus múltiples portapapeles.

Todo lo que tiene que hacer es seleccionar un archivo en el Explorador de Windows (o cualquier otro administrador de archivos) y presionar el acceso directo. El contenido del archivo será capturado por sus múltiples portapapeles. Cuando haya copiado todos los archivos de texto en clipjump, mantenga presionada la tecla Ctrl y use la tecla V ( Primeros pasos ) para navegar a través de todos los datos copiados y péguelos uno por uno soltando Ctrl. Se recordará el clip actual que está activo.

El acceso directo a nivel de sistema predeterminado para Copy File Pathno está definido. Tendrá que configurarlo en la Configuración.