Ejemplos para extraer datos cuando Excel no abre normalmente.
' Módulo VBA: Extrae todas las hojas a un nuevo libro
Sub ExtraerHojas()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim f$, wb As Workbook, ws As Worksheet
f = Application.GetOpenFilename("Archivos Excel (*.xlsx;*.xlsm;*.xlsb),*.xlsx;*.xlsm;*.xlsb")
If f = "False" Then Exit Sub
Set wb = Workbooks.Open(Filename:=f, UpdateLinks:=0, ReadOnly:=True)
Dim nuevo As Workbook: Set nuevo = Workbooks.Add
For Each ws In wb.Worksheets
ws.UsedRange.Copy
With nuevo.Sheets.Add(After:=nuevo.Sheets(nuevo.Sheets.Count))
.Name = Left(ws.Name, 30)
.Range("A1").PasteSpecial xlPasteValues
.Range("A1").PasteSpecial xlPasteFormats
End With
Next
nuevo.Sheets(1).Delete ' quita la hoja en blanco inicial
nuevo.SaveAs ThisWorkbook.Path & "\\Recuperado_" & Format(Now, "yyyymmdd_HHMM") & ".xlsx", 51
wb.Close False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Listo. Revisa el archivo 'Recuperado_*.xlsx'", vbInformation
End Sub# PowerShell: vuelca celdas de cada hoja a CSV
param([string]$Path)
if (-not (Test-Path $Path)) { Write-Host "Archivo no encontrado"; exit 1 }
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
try {
$wb = $excel.Workbooks.Open($Path,$false,$true)
foreach ($ws in $wb.Worksheets) {
$csv = Join-Path (Split-Path $Path) ("Recuperado_" + $ws.Name + ".csv")
$ws.SaveAs($csv,6)
Write-Host "Exportada:" $csv
}
$wb.Close($false)
} catch { Write-Error $_ } finally { $excel.Quit() }
# Python (offline): intenta leer con openpyxl/pandas
import sys, pandas as pd
from openpyxl import load_workbook
path = sys.argv[1]
wb = load_workbook(path, data_only=True, read_only=True)
for ws in wb.worksheets:
rows = ws.values
df = pd.DataFrame(rows)
out = f"Recuperado_{ws.title}.csv"
df.to_csv(out, index=False)
print("Exportado", out)