3 votos

¿Cómo se limpia el ~de 500.000 registros en Excel 2010, sin que se caiga mi PC?

Tengo que quitar de grandes trozos de información a partir de tablas .archivos xlsx de Excel 2010. Cada método que he probado hasta ahora no ha producido los resultados, se estrelló o he matado después de esperar por un día.

Alguien creó las hojas de cálculo utilizando un servidor SQL server. Tengo que analizar los datos, pero para hacer eso tengo que quitar todos los malos datos y, a continuación, visualizar. He pedido el servidor de tipo filtro en su final, pero él dice que sólo una persona en la empresa es competente para hacerlo y están demasiado ocupados. Yo no puedo comentar sobre eso, porque yo no sé nada acerca de las bases de datos.

Hay aproximadamente aproximadamente 500.000 registros en la típica hoja de cálculo. He intentado eliminar todos los malos valores de forma manual utilizando un filtro, pero mi PC se cuelga cuando voy a borrar de la mala registros.

He convertido el .archivos xlsx .los archivos csv porque creo que estas son más simples, y a pesar de que parecen más rápido, todavía accidente.

He escrito una secuencia de comandos VBA, que he tratado de dejar de correr durante varios días fue en vano:

Sub delete_bad_records()
Dim not_good() As Variant
Dim cell As Excel.range
Dim none As Boolean

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

not_good = Array("example_value", "another one")
none = False
Columns("C:C").Select

For Each element In not_good
    none = False
    Do While Not none
        Set cell = Selection.Find(element, ActiveCell)
        If cell Is Nothing Then
            none = True
        Else
            cell.Rows().Delete
        End If
    Loop
Next element

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Y también he escrito una .archivo bat utilizando findstr como una especie de filtro, sin embargo, algunos registros misteriosamente desaparecen y no estoy seguro de por qué. El formato general es:

findstr /v "keywords" "original.csv" > "filtered1.csv"
findstr /v /l "specific phrase1" "filtered1.csv" > "filtered2.csv"
findstr /v /l "specific phrase2" "filtered2.csv" > "filtered1.csv"

2voto

scc268 Puntos 11

Gracias a @EBGreen por lo que sugiere PowerShell y me muestra cómo utilizar; aunque parece sencillo ahora, nunca habría sabido/pensamiento acerca del uso de PowerShell en mi propia!

Esto es lo que hice:

  1. Crear la .csv archivo
  2. Agregar un filtro en Excel, y eliminar todas las entradas con el tipo que me hacen querer
  3. Copia de la lista filtrada de entradas con tipos que no desea y, a continuación, eliminar duplicados
  4. Guardar este en not_good.txt
  5. Ejecutar esta secuencia de comandos de PowerShell:

    $not_good = Get-Content .\not_good.txt
    Import-CSV ".\results.csv"  | ?{$not_good -notContains $_.Type} | Export-CSV ".\results filtered.csv" -NoTypeInformation
    

El script en cuestión de segundos, y luego se pueden utilizar para todas las otras hojas de cálculo que tengo.

1voto

visu-l Puntos 86

Si desea cargar una gran cantidad de datos en Excel, uso de Microsoft Obtener Y Transformar las herramientas de poder. (Para Excel para el período 2010-2013, el uso de MS agregar-en Power Query para Excel.)

Con esta herramienta tienes la posibilidad de acceder a muchas fuentes diferentes (CSV, archivos de Excel, base de datos, web, ...) sin necesidad de escribir código. También, la transformación de los datos o en combinación con otras fuentes es bastante fácil.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: