Excel · Power Query · API de IBAN-Test
Validar IBAN en Excel con Power Query
Envíe una lista IBAN desde Excel a la API IBAN-Test y obtenga el resultado de la verificación, el nombre del banco y el BIC como una tabla, sin macros VBA.
Esta guía utiliza Excel para Microsoft 365 en Windows. Configura una consulta Power Query una vez y luego actualiza sus resultados usando el menú Datos. Se requiere una cuenta IBAN-Test con tokens API y cuota suficiente.
Descargar el paquete inicial de Excel
El ZIP incluye una plantilla XLSX con tablas de entrada y configuración, el código completo de Power Query y una guía rápida. La consulta aún no está integrada en el libro: pegue el código una vez en el Editor avanzado durante la configuración.
Descargar paquete inicial (ZIP)Estado de las pruebas: Se verifican la estructura XLSX y la sintaxis M y la llamada API está alineada con la descripción de la interfaz publicada. Aún está pendiente una prueba completa con Microsoft Excel y consultas API autenticadas. Primero verifique el proceso con algunos datos de prueba.
Que necesitas preparar
- Excel para Microsoft 365 en Windows con Power Query. Este proceso no está garantizado aquí para Excel en el navegador y Excel para Mac.
- Un token API: Inicie sesión en IBAN-Test. La información sobre el acceso se puede encontrar en la Documentación API; la cuota apropiada bajo Precios.
- Liberación para procesamiento: Los IBAN se transfieren a IBAN-Test. Utilice únicamente datos que tenga permiso para procesar de esta manera.
1. Prepare el libro de trabajo y la lista IBAN
Descomprime el ZIP y abre iban-test-excel-en.xlsx. En la hoja Input, reemplace los datos de muestra con su lista. La columna Reference es para su propia tarea; sólo el IBAN se envía a la API.
Deje los nombres de columna Reference y IBAN y el nombre de tabla IBAN_Input sin cambios. Las nuevas líneas deben estar dentro de esta tabla de Excel. Guarde los IBAN como texto. La consulta elimina espacios y convierte letras a mayúsculas.
En la hoja Settings, reemplace YOUR_API_TOKEN con su token. El nombre de la tabla es IBAN_Settings y la columna es ApiToken. El token se guarda en el archivo. No comparta este libro con su token.
2. Añadir el código de Power Query
- En Excel, abra Datos → Obtener datos → De otras fuentes → Consulta vacía.
- En el editor de Power Query, abra Inicio → Editor avanzado.
- Abra
iban-validation.pqdesde el ZIP en un editor de texto. Copie todo el contenido y utilícelo para reemplazar el código existente en el editor avanzado. - Confirme con Listo y asigne a la consulta el nombre
IBAN_Results.
Incluso la vista previa puede desencadenar solicitudes de API. Por lo tanto, la plantilla se limita inicialmente a 10 IBAN diferentes, no vacíos por evaluación. Esto no es una promesa sobre la cantidad de solicitudes HTTP por clic: Power Query puede evaluar consultas varias veces.
3. Establecer acceso API y protección de datos
Cuando Excel solicite credenciales para https://www.iban-test.eu, seleccione Anónimo. El token API aún se envía: el código mismo lo ingresa en el encabezado HTTP como Authorization: Bearer …. El tipo de inicio de sesión de API web no se utiliza para esta plantilla.
El código envía una llamada POST a /api/v2/iban/validate. Según Documentación de Microsoft en Web.Contents, la POST en este flujo solo es posible con el tipo de inicio de sesión de fuente de datos Anónimo.
Establezca los niveles de protección de datos del libro de trabajo y de la fuente web para adaptarlos a sus requisitos operativos. Un mensaje Formula.Firewall se refiere a la combinación de fuentes de datos. Verifique el Niveles de privacidad de Power Query; No desactive la protección de datos en todos los ámbitos.
4. Cargue los resultados y actualícelos más tarde
Seleccione Cerrar y cargar en... → Tabla → Nueva hoja de trabajo. No sobrescriba la tabla de entrada ni la configuración. Luego, modifique su lista en la hoja Input y seleccione Datos → Actualizar todo.
| columna | Significado |
|---|---|
| Reference / IBAN | Su tarea y aportes originales. |
| IBAN_Normalized | IBAN en mayúsculas sin los espacios ajustados. |
| Status |
|
| Code / Message | Código API y descripción para clasificar el resultado. |
| Bank / BIC | Nombre del banco y BIC, si la API proporciona esta información. |
| CheckedAtUTC | Hora UTC de evaluación de la consulta. Si las entradas están vacías, el campo permanece vacío. |
Los IBAN limpios idénticos se combinan dentro de una evaluación y luego los resultados se asignan a todas las filas asociadas. Su orden de entrada se conserva.
Manejar los errores correctamente
- Token o inicio de sesión: Verifique el token y los permisos guardados en Datos → Recuperar datos → Configuración de fuente de datos. El tipo de inicio de sesión Anónimo debe aplicarse a la dirección API.
- Cuota, acceso deshabilitado o error del servidor: La consulta se cancela. Estos problemas no deberían producir un resultado
INVALID. - Resultados antiguos después de un error: Excel puede mantener el último estado exitoso de la tabla. Verifique el estado de la actualización y
CheckedAtUTCantes de reutilizar los resultados. - Más de diez IBAN diferentes: Primero, verifique la cuota de API disponible. Sólo entonces incrementas
MaxUniqueIbansen el código. Considere solicitudes adicionales de vista previa y reproducción.
Lo que no prueba un IBAN válido
La validación comprueba el IBAN y proporciona los datos bancarios disponibles. No confirma la existencia de una cuenta específica, su propietario, saldo o la ejecución exitosa de un pago. Incluso un dígito de control válido no reemplaza la verificación del titular de la cuenta.
Preguntas frecuentes
¿Puedo consultar también el IBAN mediante una fórmula de Excel?
Las verificaciones de formato y dígitos de control generalmente se pueden implementar como una fórmula. Una simple comprobación de la longitud no es suficiente. Estas instrucciones utilizan la API para leer adicionalmente la información bancaria y los códigos de error diferenciados disponibles allí.
¿La plantilla de Excel es gratuita?
La descarga es gratuita. El uso de API depende de su plan y de la cuota disponible. Cada actualización e incluso una vista previa pueden consumir cuota.
¿Cómo comparto los resultados de forma segura?
Copie únicamente los valores de resultados requeridos en un archivo nuevo. Elimina tokens, consultas e IBAN innecesarios. Simplemente ocultar la hoja Settings no protege el token.
Ver el código completo de Power Query
let
// Read only the two named tables supplied with the starter workbook.
Settings = Excel.CurrentWorkbook(){[Name="IBAN_Settings"]}[Content],
RawToken = Text.Trim(Text.From(Settings{0}[ApiToken])),
ApiToken = if RawToken = "" or RawToken = "YOUR_API_TOKEN" then
error Error.Record("Configuration", "Enter your API token in IBAN_Settings before refreshing.", null)
else RawToken,
Input = Excel.CurrentWorkbook(){[Name="IBAN_Input"]}[Content],
AsText = Table.TransformColumnTypes(Input, {{"Reference", type text}, {"IBAN", type text}}),
Normalized = Table.AddColumn(AsText, "IBAN_Normalized", each
if [IBAN] = null then "" else Text.Upper(Text.Remove([IBAN], {" ", "#(tab)", "#(cr)", "#(lf)", Character.FromNumber(160)})), type text),
UniqueIbans = List.Distinct(List.Select(Normalized[IBAN_Normalized], each _ <> "")),
// Explicit cap for the starter example. Increase only after checking your quota.
MaxUniqueIbans = 10,
ToCheck = if List.Count(UniqueIbans) > MaxUniqueIbans then
error Error.Record("Quota protection", "This example checks at most 10 distinct IBANs per refresh. Check your API quota before increasing MaxUniqueIbans.", null)
else UniqueIbans,
CheckIban = (iban as text) as record =>
let
Response = Web.Contents("https://www.iban-test.eu", [
RelativePath = "api/v2/iban/validate",
Headers = [Authorization = "Bearer " & ApiToken, #"Content-Type" = "application/json", Accept = "application/json"],
Content = Json.FromValue([iban = iban]),
Timeout = #duration(0, 0, 0, 30),
ManualStatusHandling = {400, 404, 408, 422, 429, 500, 502, 503, 504, 509}
]),
HttpStatus = Record.FieldOrDefault(Value.Metadata(Response), "Response.Status", 200),
Body = if HttpStatus <> 200 then
error Error.Record("API request failed", "HTTP " & Text.From(HttpStatus) & ": check authentication, quota or service availability. Refresh was stopped.", null)
else Json.Document(Response),
CheckedBody = if not Value.Is(Body, type record) then
error Error.Record("Unexpected API response", "The response was not a JSON object.", null)
else Body,
Code = try Number.From(Record.FieldOrDefault(CheckedBody, "code", null)) otherwise null,
IsValid = Code = 2100 and Record.FieldOrDefault(CheckedBody, "error", true) = false,
IsInvalid = List.Contains({3100, 3101, 3102}, Code),
Status = if IsValid then "VALID" else if IsInvalid then "INVALID" else
error Error.Record("Validation unavailable", "API code " & (if Code = null then "missing" else Text.From(Code)) & ". Check your token, quota and API documentation. This is not an invalid-IBAN result.", null),
RawDetails = Record.FieldOrDefault(CheckedBody, "details", []),
Details = if Value.Is(RawDetails, type record) then RawDetails else [],
// Force status evaluation before returning metadata.
Result = if Status = "VALID" or Status = "INVALID" then [
Status = Status,
Code = Code,
Message = Record.FieldOrDefault(CheckedBody, "message", ""),
Bank = Record.FieldOrDefault(Details, "bankName", null),
BIC = Record.FieldOrDefault(Details, "bic", null)
] else error "Unexpected validation status"
in
Result,
// Evaluate distinct IBANs in sequence. An operational error aborts the refresh.
CheckedRecords = List.Accumulate(ToCheck, {}, (state, iban) =>
let
PreviousReady = List.Count(state) = 0 or List.Last(state)[Status] <> "",
Current = if PreviousReady then CheckIban(iban) else error "Previous check failed",
Ready = Current[Status]
in
if Ready = "VALID" or Ready = "INVALID" then
state & {Record.Combine({[IBAN_Normalized = iban], Current})}
else error "Check failed"),
Checked = Table.Buffer(Table.FromRecords(CheckedRecords,
type table [IBAN_Normalized = text, Status = text, Code = nullable number, Message = nullable text, Bank = nullable text, BIC = nullable text])),
Joined = Table.NestedJoin(Normalized, {"IBAN_Normalized"}, Checked, {"IBAN_Normalized"}, "Check", JoinKind.LeftOuter),
Expanded = Table.ExpandTableColumn(Joined, "Check", {"Status", "Code", "Message", "Bank", "BIC"}),
MissingMarked = Table.ReplaceValue(Expanded, null, "MISSING", Replacer.ReplaceValue, {"Status"}),
CheckedAt = Table.AddColumn(MissingMarked, "CheckedAtUTC", each
if [Status] = "MISSING" then null else DateTimeZone.RemoveZone(DateTimeZone.FixedUtcNow()), type nullable datetime)
in
CheckedAt
Conecta IBAN-Test a tu lista
Elija una cuota que se adapte a su lista y a la frecuencia de actualización planificada. El contrato técnico de la interfaz se puede encontrar en la documentación de la API.
Configurar el acceso APILeer la documentación de la API