3

Я должен удалить большие порции информации из таблиц в файлах .xlsx с помощью Excel 2010. Каждый метод, который я пробовал до сих пор, не дал результатов, либо он потерпел крах, либо я убил его после ожидания в течение дня.

Кто-то еще создал электронные таблицы, используя сервер SQL. Я должен проанализировать данные, но для этого я должен удалить все плохие данные и затем визуализировать их. Я попросил парня на сервере фильтровать свои данные, но он говорит, что только один человек в компании может это сделать, и они слишком заняты. Я не могу комментировать это, потому что я ничего не знаю о базах данных.

В типовой таблице примерно 500 000 записей. Я попытался удалить все плохие значения вручную, используя фильтр, но мой компьютер зависает, когда я удаляю плохие записи.

Я превратил файлы .xlsx в файлы .csv, потому что я думаю, что они проще, и, хотя они кажутся быстрее, они все равно дают сбой.

Я написал сценарий VBA, который я пытался оставить запущенным в течение нескольких дней безрезультатно:

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

И я также написал файл .bat, используя findstr как своего рода фильтр, однако некоторые записи таинственным образом исчезают, и я не уверен почему. Общий формат:

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"

2 ответа2

2

Спасибо @EBGreen за то, что он предложил PowerShell и показал мне, как его использовать; хотя сейчас это кажется простым, я бы никогда не знал / не думал об использовании PowerShell самостоятельно!

Вот что я сделал:

  1. Создайте файл .csv
  2. Добавить фильтр в Excel, и удалить все записи с типом я хочу
  3. Скопируйте отфильтрованный список записей с типами, которые я не хочу, а затем удалите дубликаты
  4. Сохраните это в not_good.txt
  5. Запустите этот скрипт PowerShell:

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

Сценарий занимает несколько секунд, и я могу затем использовать его для всех других электронных таблиц, которые у меня есть.

1

Если вы хотите загрузить много данных в Excel, используйте инструменты Microsoft Get & Transform. (Для Excel 2010-2013 используйте бесплатную надстройку MS Power Query for Excel.)

С помощью этого инструмента у вас есть возможность доступа ко многим различным источникам (CSV, файлы Excel, база данных, Интернет, ...) без необходимости писать код. Кроме того, преобразовать ваши данные или объединить их с другими источниками довольно легко.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .