Skip to content

Instantly share code, notes, and snippets.

@IvanildoBarauna
Last active June 5, 2024 14:56
Show Gist options
  • Save IvanildoBarauna/4cb062167160f50d4564b1de07700a5d to your computer and use it in GitHub Desktop.
Save IvanildoBarauna/4cb062167160f50d4564b1de07700a5d to your computer and use it in GitHub Desktop.
from oletools.olevba import VBA_Parser
import os
import datetime
# Script para Extração de Código VBA
#
# Este script utiliza a biblioteca oletools para extrair código VBA de arquivos
# e salvá-lo em arquivos separados. A função principal `extract_full_code` percorre
# uma lista de arquivos .XLSM na pasta 'source_files/' e verifica se eles contêm macros VBA.
# Caso contenham, todas as macros são extraídas e salvas em uma pasta chamada 'new_files/'
# com o mesmo nome do arquivo original.
#
# Detalhes da Função:
# - A função itera sobre os arquivos listados na variável 'files'.
# - Se um arquivo contiver macros VBA, as macros são extraídas e salvas em arquivos
# separados dentro da pasta 'new_files/'.
# - A função cria um diretório correspondente ao nome do arquivo original para armazenar
# os códigos VBA extraídos.
#
# Observação:
# - Este script assume que a variável 'files' contém uma lista de nomes de arquivos .XLSM presentes
# no diretório 'source_files/'.
# - Os arquivos extraídos são salvos na pasta 'new_files/'.
files = os.listdir("source_files/")
def extract_full_code():
"""
Extracts VBA code from files and saves them in separate files.
This function iterates over a list of files and checks if they contain VBA macros.
If a file contains VBA macros, it extracts all the macros and saves them in separate files.
The extracted VBA code is saved in a directory named 'new_files' with the same name as the original file.
Note: This function assumes that the 'files' variable is defined and contains a list of file names.
Returns:
None
"""
for file in files:
vba_parser = VBA_Parser("source_files/" + file)
if vba_parser.detect_vba_macros():
for (
filename,
stream_path,
vba_filename,
vba_code,
) in vba_parser.extract_all_macros():
print(f"VBA Code Founded: {vba_filename}")
os.makedirs(f"new_files/{file.split('.')[0]}", exist_ok=True)
with open(f"new_files/{file.split('.')[0]}/{vba_filename}", "w") as f:
f.write(vba_code)
else:
print("Nenhum código VBA encontrado.")
extract_full_code()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment