es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de generar una consulta web a partir de varias URL sin codificar el valor en Excel?

Estoy intentando automatizar un proceso en el que descargo datos JSON del repositorio git de mi empresa y los muestro en Excel. Una de las cosas que debo hacer en el proceso es crear una nueva consulta desde una dirección web, y esto debe ser capaz de cambiar según el repositorio git que el usuario del script desee. Decidí grabar una macro y pegar la dirección web en el cuadro de texto de URL, lo cual funciona. El problema es que la macro no graba el proceso de pegar desde el portapapeles, solo reconoce que se ha añadido texto, pensando que quiero que UNA dirección web específica esté codificada en la macro en lugar del acto de pegar, que es lo que realmente quiero. ¿Hay una buena manera de evitar codificar una URL determinada en la pestaña Nuevo Query-> Desde Web en Excel, y tener la capacidad de mantener la macro mientras se ajusta el valor de la URL?

Aquí está mi código VBA con los valores de URL y Token eliminados:


Sub JSONtoEXCEL() ' ' JSONtoEXCEL Macro ' ' Keyboard Shortcut: Ctrl+Shift+J ' 'Range( _ ' "Table4[[#Headers],[http://URL]]" _ ' ).Select ActiveCell.FormulaR1C1 = _ "http://URL" Range("B1").Select ActiveWorkbook.Queries.Add Name:= _ "issues?state=open&access<em>token=token#", _ Formula:= _ "let" & Chr(13) & "" & Chr(10) & "Source = Json.Document(Web.Contents(""" & Sheets("Sheet1").Range("$B$1").Value & """))" & Chr(13) & "" & Chr(10) & " #""Converted to Table"" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error)," & Chr(13) & "" & Chr(10) & " #""Expanded Column1"" = Table.ExpandRecordColumn(#""Converte" & _ "d to Table"", ""Column1"", {""id"", ""url"", ""html</em>url"", ""number"", ""user"", ""original<em>author"", ""original</em>author<em>id"", ""title"", ""body"", ""ref"", ""labels"", ""milestone"", ""assignee"", ""assignees"", ""state"", ""is</em>locked"", ""comments"", ""created<em>at"", ""updated</em>at"", ""closed<em>at"", ""due</em>date"", ""pull<em>request"", ""repository""}, {""id"", ""url"", """ & _ "html</em>url"", ""number"", ""user"", ""original<em>author"", ""original</em>author<em>id"", ""title"", ""body"", ""ref"", ""labels"", ""milestone"", ""assignee"", ""assignees"", ""state"", ""is</em>locked"", ""comments"", ""created<em>at"", ""updated</em>at"", ""closed<em>at"", ""due</em>date"", ""pull<em>request"", ""repository""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Expanded Column1""" Sheets.Add After:=ActiveSheet With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _ "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""issues?state=open&access</em>token=token#" _ , "29f0ca0d90"";Extended Properties="""""), Destination:=Range("$A$1")). _ QueryTable .CommandType = xlCmdSql .CommandText = Array( _ "SELECT * FROM [issues?state=open&access<em>token=token#]" _ ) .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = False .ListObject.DisplayName = _ "issues</em>state<em>open</em>access<em>token</em>token#" If Index = ctr Then Else .Refresh BackgroundQuery:=False End If End With Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 'línea que causa problemas Range("issues_state_open_access_token_token#" _ ).Select Range("C6").Activate With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With End Sub

Este código fue generado grabando una macro y pasando por el proceso de cargar los datos JSON en Excel. Intenté reemplazar la cadena de URL con una referencia a una celda que contiene la URL. Recibo el error: “error de tiempo de ejecución: ‘1004’ El nombre ‘Source’ no fue reconocido. Asegúrate de escribirlo correctamente.”

Cuando reemplazo la referencia a la celda que contiene la URL con la URL literal, este error desaparece. También he intentado cambiar la forma en que referencia la celda (dirección absoluta, usando un “&” para pasar la coordenada como referencia, eliminando las comillas, etc.).

edición: Reemplacé el código con los cambios más actualizados e intenté solucionar los problemas de formato. El número de token se ha reemplazado con token# y la URL se ha reemplazado con URL

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar codificar una URL determinada en la pestaña ‘Nueva consulta->Desde Web’ de Excel, usa una variable para almacenar el valor de la URL en lugar de codificarlo en la macro. Luego puedes hacer referencia a la variable en el parámetro ‘Fórmula’ de la función ‘Queries.Add’.

    Aquí tienes un ejemplo de cómo hacerlo:

    Sub JSONtoExcel()
    
    Dim url As String
    url = Sheets("Sheet1").Range("B1").Value
    
    ' resto del código
    
    ActiveWorkbook.Queries.Add Name:= _
        "issues?state=open&access_token=_token#_", _
        Formula:= _
        "let" & Chr(13) & "" & Chr(10) & _
        """Source = Json.Document(Web.Contents(""" & url & """))," & Chr(13) & "" & Chr(10) & _
        "    #""Converted to Table"" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error)," & Chr(13) & "" & Chr(10) & _
        "    #""Expanded Column1"" = Table.ExpandRecordColumn(#""Converted to Table"", ""Column1"", {""id"", ""url"", ""html_url"", ""number"", ""user"", ""original_author"", ""original_author_id"", ""title"", ""body"", ""ref"", ""labels"", ""milestone"", ""assignee"", ""assignees"", ""state"", ""is_locked"", ""comments"", ""created_at"", ""updated_at"", ""closed_at"", ""due_date"", ""pull_request"", ""repository""}, {""id"", ""url"", ""html_url"", ""number"", ""user"", ""original_author"", ""original_author_id"", ""title"", ""body"", ""ref"", ""labels"", ""milestone"", ""assignee"", ""assignees"", ""state"", ""is_locked"", ""comments"", ""created_at"", ""updated_at"", ""closed_at"", ""due_date"", ""pull_request"", ""repository""})" & Chr(13) & "" & Chr(10) & _
        "in" & Chr(13) & "" & Chr(10) & _
        "    #""Expanded Column1"""
    
    ' resto del código
    
    End Sub
    

    En este código, la URL se almacena en la variable url, que se hace referencia en el parámetro ‘Fórmula’ de la función ‘Queries.Add’. De esta manera, el valor de la URL puede cambiar según lo que desee el usuario actualizando el valor de la celda B1 de Sheet1.

Comments are closed.