Búsqueda de sitios web

¿Cómo convertir un archivo Excel (XLSX) a CSV usando PowerShell?


Los archivos CSV (valores separados por comas) ofrecen una forma sencilla y eficaz de almacenar e intercambiar datos tabulares, lo que los hace ampliamente compatibles con diversas aplicaciones y bases de datos. A veces es necesario convertir estos archivos de Excel al formato CSV (valores separados por comas). PowerShell, un potente lenguaje de programación y herramienta de automatización, proporciona una forma sencilla y eficaz de realizar esta tarea. En esta guía paso a paso, lo guiaré a través del proceso de conversión de Excel a CSV usando PowerShell, lo que le permitirá optimizar sus flujos de trabajo de manipulación de datos.

Comprender la diferencia entre los formatos de archivo XLSX y CSV

Antes de sumergirnos en el proceso de conversión, tomemos un momento para comprender la diferencia entre los formatos de archivo XLSX y CSV. XLSX es el formato de archivo predeterminado utilizado por Microsoft Excel para almacenar datos de hojas de cálculo. Es un formato de archivo binario que encapsula varios elementos como hojas de trabajo, fórmulas, formato y macros.

Por otro lado, CSV es un formato de archivo de texto sin formato que representa datos tabulares como una serie de valores separados por comas. A diferencia de XLSX, los archivos CSV no contienen ningún formato ni estructuras de datos complejas. Ofrecen una forma liviana y universalmente aceptada de almacenar datos, lo que los hace ideales para el intercambio e integración de datos.

¿Por qué utilizar PowerShell para convertir Excel a CSV?

PowerShell es un lenguaje de programación potente y extensible desarrollado por Microsoft. Proporciona un conjunto completo de herramientas y módulos para automatizar tareas administrativas, incluida la manipulación de datos. A continuación se presentan algunas razones por las que es beneficioso utilizar PowerShell para convertir Excel a CSV:

  1. Flexibilidad: PowerShell le permite personalizar el proceso de conversión según sus necesidades específicas. Puede manipular y transformar datos fácilmente antes de exportarlos al formato CSV.
  2. Automatización: Con PowerShell, puedes automatizar el proceso de conversión, ahorrando tiempo y esfuerzo. Puede crear scripts que conviertan varios archivos de Excel a CSV de una sola vez, eliminando la necesidad de intervención manual.
  3. Compatibilidad: PowerShell es compatible con varios sistemas operativos, incluidos Windows, macOS y Linux. Independientemente de la plataforma en la que esté trabajando, puede aprovechar PowerShell para convertir Excel a CSV sin problemas.

¿Cómo convertir el formato de archivo XLSX a CSV usando PowerShell?

Los archivos de Excel se utilizan ampliamente para el almacenamiento y análisis de datos, pero el formato CSV ofrece mejor compatibilidad y simplicidad, lo que lo convierte en una opción popular para el intercambio de datos y la importación de bases de datos. PowerShell, con sus amplias capacidades y bibliotecas, nos permite automatizar el proceso de conversión, ahorrando tiempo y esfuerzo.

Método 1: convertir archivos de Excel a CSV utilizando el módulo "ImportExcel"

En este enfoque, usaremos el módulo ImportExcel, que agrega los cmdlets Export-Excel e Import-Excel a PowerShell, que facilitan el trabajo con archivos de Excel.

Paso 1: instalar los módulos de PowerShell

Para convertir Excel a CSV usando PowerShell, necesitamos instalar e importar los módulos necesarios que brinden la funcionalidad requerida. Así es como puede instalar los módulos:

  1. Abra la consola de PowerShell como administrador.
  2. Escriba el siguiente comando para instalar el módulo ImportExcel: Install-Module ImportExcel

Una vez instalado el módulo, podemos continuar con el proceso de conversión. Al instalar los módulos, obtenemos acceso a los cmdlets y funciones necesarios para manejar archivos Excel y CSV en PowerShell.

Paso 2: convertir el archivo de Excel al formato CSV

Ahora que tenemos instalados los módulos necesarios, podemos proceder a convertir el archivo de Excel a CSV en PowerShell. Así es como puedes hacerlo:


Import-Excel -Path "C:\Scripts\Excel\Employees.xlsx" | Export-Csv -Path "C:\Scripts\Excel\Employees.csv" -NoTypeInformation

Este script importa el archivo XLSX, convierte la primera pestaña disponible a CSV y la guarda en la ruta indicada. El parámetro -NoTypeInformation le indica al cmdlet que no incluya el tipo de datos en la primera fila del archivo CSV. De manera similar, puede convertir por lotes todos los archivos de Excel en una carpeta y subcarpetas como:


$Files = Get-ChildItem -Path "C:\Scripts\Excel" -Include *.xlsx -Recurse
ForEach ($File in $Files)
{
    Import-Excel -Path $File.FullName | Export-Csv ($file.FullName -replace '\.xlsx$', '.csv') -NoTypeInformation
}

Este comando obtiene todos los archivos XLSX en la carpeta dada y sus subcarpetas, los importa, los convierte a CSV y los guarda con el mismo nombre y ubicación pero con una extensión .csv.

Guarde una hoja de cálculo de Excel específica en CSV

Si necesitamos convertir una pestaña específica de un archivo de Excel al formato CSV, podemos modificar nuestro script en consecuencia. El cmdlet Import-Excel admite la especificación del nombre de la pestaña mediante el parámetro WorksheetName.

Aquí hay un script de ejemplo que convierte una sola pestaña de un archivo de Excel a CSV:

  1. Importe el módulo ImportExcel mediante el cmdlet Import-Module. Especifique la ruta al archivo de Excel que desea convertir a CSV. Por ejemplo, usaría el siguiente comando: $ExcelFilePath="C:\Documents\data.xlsx"
  2. Utilice el cmdlet Import-Excel para cargar el archivo de Excel en PowerShell. El cmdlet toma la ruta al archivo de Excel como parámetro. Aquí hay un comando de ejemplo: $ExcelData=Import-Excel -Path $ExcelFilePath

# Import the ImportExcel module
Import-Module -Name ImportExcel

# Define the path to the Excel file
$ExcelFilePath = "C:\Documents\data.xlsx"

# Specify the tab name to convert
$worksheetName = "InactiveUsers" #or "Sheet1

# Import the specific tab from the Excel file
$data = Import-Excel -Path $ExcelFilePath -WorksheetName $worksheetName

# Export the data to a CSV file
$CsvFilePath = "C:\Documents\CsvData.csv"
$data | Export-Csv -Path $CsvFilePath -NoTypeInformation

Esta conversión nos permite trabajar con los datos en un formato más versátil y estandarizado. En este script, primero definimos la ruta al archivo de Excel y especificamos el nombre de la pestaña que queremos convertir usando la variable $worksheetName. Usando el cmdlet Import-Excel con el parámetro -WorksheetName, importamos solo los datos de la pestaña especificada. Finalmente, exportamos los datos a un archivo CSV usando el cmdlet Export-Csv.

Al ejecutar estos comandos, el contenido del archivo Excel se cargará en un objeto de PowerShell, permitiéndonos manipular los datos antes de convertirlos al formato CSV.

Conversión de varios archivos de Excel en una carpeta a CSV: todas las pestañas

En algunos casos, podemos tener varios archivos de Excel y nuestros archivos de Excel pueden contener varias pestañas, cada una de las cuales representa un conjunto de datos o categoría diferente. Para convertir todas las pestañas de un archivo Excel a formato CSV, podemos usar los cmdlets Import-Excel y Export-Csv en PowerShell.

Aquí hay un script de ejemplo que convierte por lotes todas las pestañas de todos los archivos de Excel en archivos CSV separados:


# Get all the Excel files in the specified directory
$ExcelFiles = Get-ChildItem -Path "C:\Scripts\Excel" -Filter "*.xlsx"

# Loop through each Excel file
ForEach ($File in $ExcelFiles) {
    # Import the Excel file
    $Tabs = Get-ExcelSheetInfo $File.FullName | Select -ExpandProperty Name

    # Export each tab as a separate CSV file
    foreach ($Tab in $Tabs) {
        $csvFileName = Join-Path -Path "C:\Scripts\Excel" -ChildPath ($tab + ".csv")
        $Data = Import-Excel -Path $File.FullName -WorksheetName $Tab
        $data | Export-Csv -Path $CSVFileName -NoTypeInformation
        Write-host -f Green "Exported to CSV:"$csvFileName
    }
}

Analicemos el guión:

  • Usamos el cmdlet Get-ChildItem para recuperar todos los archivos de Excel en el directorio especificado.
  • Luego recorremos cada archivo de Excel e importamos sus datos usando el cmdlet Import-Excel.
  • Dentro del bucle, iteramos sobre cada pestaña del archivo Excel usando la propiedad Get-ExcelSheetInfo.
  • Para cada pestaña, construimos el nombre del archivo CSV y exportamos los datos a un archivo CSV separado usando el cmdlet Export-Csv.

Este script convierte cada pestaña del archivo Excel en un archivo CSV independiente, lo que permite un fácil análisis y manipulación de los datos.

Filtrado de columnas y filas específicas desde archivos de Excel y exportación

En algunos casos, nuestros archivos de Excel pueden contener datos o atributos específicos del usuario que queremos excluir durante el proceso de conversión. Para lograr esto, podemos modificar nuestro script de conversión para filtrar columnas o filas específicas que contienen datos o atributos del usuario.

Aquí hay una versión modificada del script anterior que excluye columnas y filas específicas:


# Import the ImportExcel module
Import-Module -Name ImportExcel

# Define the path to the Excel file
$ExcelFile = "C:\Scripts\Excel\Employees.xlsx"

# Specify the tab name to convert
$worksheetName = "Sheet1"

# Import the specific tab from the Excel file
$Data = Import-Excel -Path $ExcelFile -WorksheetName $WorksheetName

# Exclude specific columns containing user data or attributes
$data = $data | Select-Object -Property * -ExcludeProperty "Mail", "UserEmail"

# Exclude specific rows containing user data or attributes
$data = $data | Where-Object { $_."Designation" -ne "Web Developer" }

# Export the modified data to a CSV file
$CSVFile = "C:\Scripts\Excel\FilteredEmployees.csv"
$Data | Export-Csv -Path $csvFile -NoTypeInformation

En este script, primero importamos el módulo ImportExcel y definimos la ruta al archivo de Excel y el nombre de la pestaña a convertir. Luego importamos la pestaña específica del archivo Excel usando el cmdlet Import-Excel.

Para excluir columnas específicas que contienen datos o atributos de usuario, utilizamos el cmdlet Select-Object con el parámetro -ExcludeProperty, especificando los nombres de las columnas que se excluirán. De manera similar, para excluir filas específicas, utilizamos el cmdlet Where-Object con la condición adecuada.

Finalmente, exportamos los datos modificados a un archivo CSV usando el cmdlet Export-Csv. Este enfoque le permite interactuar con Excel mediante programación sin tener Excel instalado en su sistema.

Método 2: convertir Excel a CSV usando el objeto COM Excel.Application

Otro método para convertir archivos de Excel a formato CSV es utilizar el objeto COM Excel.Application. Así es como puede realizar la conversión:

¿Cómo convertir un archivo XLSX a CSV?

Estos son los pasos para convertir archivos de Excel a CSV utilizando el método de objeto COM Excel.Application:

  • Paso 1: Comience creando una nueva instancia del objeto COM Excel.Application
  • Paso 2: Utilice el método Abrir para abrir el archivo de Excel que desea convertir.
  • Paso 3: Una vez que el archivo Excel esté abierto, puede guardarlo como un archivo CSV usando el método SaveAs.
  • Paso 4: Cerrar y salir de Excel: después de guardar el archivo, cierre el libro y salga de Excel.

# Step 1: Create an Excel.Application Object:
$Excel = New-Object -ComObject Excel.Application

# Step 2: Open method to open the Excel file you want to convert
$Workbook = $Excel.Workbooks.Open("C:\Scripts\Excel\Employees.xlsx")

# Step 3: save it as a CSV file using the SaveAs method.
$workbook.SaveAs("C:\Scripts\Excel\Employees.csv", 6)

# Step 4: Close the workbook and Quit Excel
$workbook.Close()
$Excel.Quit()

Este método brinda flexibilidad para convertir archivos de Excel a formato CSV y requiere que Excel esté instalado en su sistema.

Exporte cada libro de trabajo como CSV utilizando un objeto COM

Tenga en cuenta que Microsoft Excel debe estar instalado en su máquina para que funcione el siguiente método.


Function Convert-ExcelToCsv ($FilePath) {
    Try {
        $Excel = New-Object -ComObject Excel.Application
        $wb = $Excel.Workbooks.Open($FilePath)
    
        $File = Get-Item -Path $FilePath
        $FileInfo = $File | Select-Object Directory, BaseName
        $FileName = [System.IO.Path]::Combine($FileInfo.Directory, $FileInfo.BaseName)

        $Excel.DisplayAlerts = $false
        foreach ($ws in $wb.Worksheets) {
            $CSVFileName = $FileName + " - " + $ws.Name +".csv"        
            $ws.SaveAs($CSVFileName, 6)
            Write-host -f Green "Exported CSV File:"$CSVFileName
        }
    }
    Catch {
        Write-Host -f Yellow "Error on line $($_.InvocationInfo.ScriptLineNumber): $($_.Exception.Message)"
    }
    Finally {
        $wb.close()
        $Excel.Quit()
    }
}

#Call the function to convert Excel to CSV
Convert-ExcelToCsv -FilePath "C:\Temp\Inactive-Users.xlsx"

Solución de problemas y errores comunes

Al convertir Excel a CSV usando PowerShell, puede encontrar algunos problemas y errores comunes. A continuación se ofrecen algunos consejos para solucionar problemas que le ayudarán a superarlos:

  1. Módulos faltantes: Asegúrese de haber importado el módulo necesario (ImportExcel) antes de intentar la conversión.
  2. Problemas con la ruta del archivo: Vuelva a verificar las rutas del archivo que proporciona a PowerShell. Asegúrese de que sean válidos y accesibles.
  3. Problemas de codificación: si encuentra problemas de codificación con el archivo CSV convertido, intente especificar una codificación diferente al guardar el archivo usando el cmdlet Out-File.
  4. Errores de manipulación de datos: si encuentra errores al manipular los datos de Excel cargados, revise sus comandos de PowerShell y asegúrese de que sean correctos.

Si sigue estos consejos para la solución de problemas, podrá superar los problemas y errores comunes que puedan surgir durante el proceso de conversión.

Consejos y trucos para convertir Excel a CSV usando PowerShell

Aquí hay algunos consejos y trucos adicionales para mejorar su experiencia al convertir Excel a CSV usando PowerShell:

  1. Conversión por lotes: si tiene varios archivos de Excel que deben convertirse a CSV, puede crear una secuencia de comandos que recorra los archivos y realice la conversión automáticamente. Esto le permite convertir varios archivos de una sola vez.
  2. Limpieza de datos: antes de convertir Excel a CSV, puede usar PowerShell para limpiar y normalizar los datos. Puede eliminar columnas y filas innecesarias y realizar otras operaciones de limpieza de datos para garantizar la integridad del archivo CSV exportado.
  3. Manejo de errores: al escribir scripts para convertir Excel a CSV, es importante incluir mecanismos de manejo de errores. PowerShell proporciona varias técnicas de manejo de errores, como bloques try-catch, para manejar los errores correctamente y garantizar la confiabilidad de sus scripts.

Al aprovechar estos consejos y trucos, puede optimizar su proceso de conversión de Excel a CSV y adaptarlo a sus necesidades específicas.

Terminando

Convertir archivos de Excel a formato CSV es un requisito común en las tareas de análisis y procesamiento de datos. Ya sea que elija utilizar el módulo ImportExcel o el objeto COM Excel.Application, PowerShell proporciona una solución sólida y eficiente para automatizar este proceso, permitiéndonos convertir archivos de Excel a CSV con facilidad. En esta guía, exploramos diferentes métodos para convertir archivos de Excel a CSV usando PowerShell. Aprendimos cómo convertir todas las pestañas de un archivo de Excel en archivos CSV separados, convertir una sola pestaña a CSV y manejar datos y atributos del usuario durante el proceso de conversión.

Ya sea que esté tratando con un solo archivo de Excel o un lote de archivos, las amplias capacidades de PowerShell le permiten automatizar el proceso de conversión, ahorrándole tiempo y esfuerzo. Si sigue la guía paso a paso descrita en este artículo, podrá convertir archivos de Excel al formato CSV con facilidad.

Artículos relacionados