CSV_tools.xla

CSV_tools.xla

¿Cómo puedo exportar una hoja, tabla o selección a otro formato de archivo?sin cambiar el documento actualmente activo?

Nuestro principal entorno de operación de datos es Excel, donde se utiliza ampliamente formato y fórmulas para obtener los resultados deseados. Luego, los resultados se guardan .CSVpara la interoperabilidad con otros programas.

Cuando "Archivo >>Guardar como>> Guardar como tipo >> Se utiliza CSV" y se crea el archivo .csvyel documento activo se cambia a saved_file.csv. Hay algunas advertencias sobre la pérdida de funcionalidad y formato con este nuevo formato, pero por lo demás, la interfaz de usuario no cambia. Hay negrita y cursiva, diferentes fuentes y tamaños, rellenos de celda de fondo, rangos de tabla definidos, etc. Todas las fórmulas de las celdas permanecen intactas.

Este es un desastre esperando a suceder. El usuario vuelve al trabajo, se adormece pensando que todo es normal, pronto olvida que el formato actual no admite ninguna magia y continúa haciendo Importante Cosas (tm). Llega la hora del almuerzo, cierran Excel, presionan Sí dos veces a los molestos cuadros de diálogo que no se leen porque los ven todo el tiempo y salen por la puerta. ...Después del almuerzo, el usuario regresa y se da cuenta de que todo el trabajo entre Guardar como inicial y Salir ha desaparecido.

"Archivo >>Exportar", desafortunadamente, es solo otra ruta de navegación hacia "Guardar como", cambiando también el documento activo a "algún_archivo.csv".

Lo que necesitamos es exportar algunos datos a otro tipo de archivo y mantener el documento activo "nuestros-datos-real.xlsx".

¿Cómo se puede hacer esto? ¿Y agregado al menú o cinta para ejecución con un solo clic?

¿Cómo se puede compartir con todos en la organización? (sin pedir a los usuarios individuales que abran un editor VBA, etc.)

Respuesta1

Lo que necesitamos es exportar algunos datos a otro tipo de archivo y mantener el documento activo "nuestros-datos-real.xlsx".

CSV_tools.xla

He creado un complemento VBA rápido que exporta como CSV desde que lo mencionaste. Intenté utilizar la menor cantidad de código posible para que los nuevos usuarios pudieran entenderlo más fácilmente.

Lo que lo hace

  • El complemento pregunta dónde guardar el CSV. La carpeta predeterminada es la carpeta donde se guarda el XLS.
  • El complemento detecta automáticamente si se debe utilizar una coma o un punto y coma como separador con respecto a la configuración regional del sistema
  • Todos los valores de la hoja de Excel actualmente activa se exportan a un nuevo archivo CSV que lleva el nombre del archivo XLS.
  • El XLS existente no se modifica de ninguna manera.

Instalación

  1. Descargar elComplementoy guardarlo debajoC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Abra Excel y actívelo en
    • Excel 2003: barra de menú → Herramientas → Complementos
    • Excel 2007: Opciones de Excel → Complementos → Ir a
    • Excel 2010-13: pestaña Archivo → Opciones → Complementos → Ir a
  3. Reinicie Excel y mire su barra de menú.

    ingrese la descripción de la imagen aquí

código VBA

Function ExportCSV()

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next
    ChDrive (ActiveWorkbook.Path)
    ChDir (ActiveWorkbook.Path)
    strName = fso.GetBaseName(ActiveWorkbook.Name)
    On Error GoTo 0

    strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
    delimiter = Application.International(xlListSeparator)
    If Not strFilename = False Then

        Open strFilename For Append As #1

        For Each rngRow In ActiveSheet.UsedRange.Rows
            arr2D = rngRow
            arr1D = Application.Index(arr2D, 1, 0)
            strRow = Join(arr1D, delimiter)
            Print #1, strRow
        Next

        Close #1
    End If

End Function

Actualizaciones automáticas para diferentes usuarios.

Una vez que cada usuario haya habilitado el complemento en su Excel (no se puede automatizar), podrá copiar una nueva .xlaversión del archivo a través de un recurso compartido de red, Robocopy o herramientas similares. Pero esta debería ser una cuestión aparte, ya que hay demasiadas formas diferentes de resolver el problema.


Para los fanáticos de VBA, la parte más interesante es

arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)

que convierte un rango (una sola fila en nuestro caso) en una matriz 2D, luego en una matriz 1D y finalmente en una sola cadena usando la función Join()

Respuesta2

Enseñe al usuario a abrir una copia de esos datos.

Al seleccionar un documento de Office, puede hacer clic derecho en el icono y hacer clic en Nuevo. Esto crea un nuevo documento/hoja/presentación, basado en el original. Los usuarios pueden exportar desde allí, simplemente haciendo Guardar como.

Espero que también tengas buenas copias de seguridad si estás tan preocupado...

información relacionada