Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Combinar diferentes Excel y hojas de sharepointFolder

Hola, estoy tratando de combinar datos de diferentes archivos de Excel y hojas de una carpeta de SharePoint.

Estoy tratando de lograr esto usando una sola consulta, pero estoy encontrando dificultades.

Aquí hay un ejemplo de lo que estoy tratando de lograr:

  • Si el nombre del archivo de Excel comienza con "A", quiero extraer datos de la hoja "B".
  • Si el nombre del archivo de Excel comienza con "D", quiero extraer datos de la hoja "C".
  • Además, para el primer archivo de Excel, quiero usar la primera fila como encabezados y, para los archivos posteriores, quiero eliminar la primera fila.
  • Por último, quiero combinar todos los datos en una tabla.

Estos son los pasos iniciales que están funcionando:

Source = SharePoint.Files("sharepoint.", [ApiVersion = 15]), FilteredFiles = Table.SelectRows(Source, cada Text.StartsWith([Nombre], "A") o Text.StartsWith([Nombre], "D"))

Antes de continuar con estos pasos, necesito implementar las condiciones que he descrito. He probado varios enfoques, pero no he tenido éxito.

Agradecería cualquier ayuda con este asunto.

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Este @बीएमएम27 ,

A continuación se muestra mi tabla:

vxiandatmsft_0-1713420300664.png

El siguiente código M te ayudará:

let
    Source = Excel.Workbook(File.Contents("C:\Users\Administrator\Desktop\Project Files\" & [Project]&".xlsx"), null, true),
    #"SheetData" = if Text.StartsWith(Source, "A") then
                        FileContent{[Item="B",Kind="Sheet"]}[Data]
                    else if Text.StartsWith(Source, "D") then
                        FileContent{[Item="C",Kind="Sheet"]}[Data]
                    else
                        null,
    #"AdjustedData" = if Source = List.First(FilteredFiles[Name]) then
                        Table.PromoteHeaders(SheetData, [PromoteAllScalars=true])
                    else
                        Table.Skip(SheetData,1)
in
     #"AdjustedData"

Saludos

Xianda Tang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola, gracias por la respuesta, pero ¿cómo va a cambiar [proyecto] o este código significa que toma todos los proyectos? Más tarde estás usando FilteredFiles, lo siento, pero estoy un poco perdido.
El siguiente código puede ayudar, va debajo de FilteredFiles, pero no funciona.
FilteredFiles es una tabla en cada fila es un excel con tipo de contenido Binario.

LoadData = (archivo) =>
dejar
ExcelContent = SharePoint.Files(FolderUrl & file){0}[Content],

ExcelWorkbook = Excel.Workbook (ExcelContent),

Hoja de datos =
if Text.StartsWith(archivo, "A") entonces
ExcelWorkbook{[Item="B", Kind="Hoja"]}[Datos]
else if Text.StartsWith(file, "D") then
ExcelWorkbook{[Item="C", Kind="Hoja"]}[Datos]
más
nulo

SkipFirstRow = if DataSheet <> null then Table.Skip(DataSheet, 1) else null,

AddSourceColumn = Table.AddColumn(SkipFirstRow, "FileSource", cada archivo, escriba texto)
en
AddSourceColumn,
CombinedData = Table.FromRecords(List.Transform(FilteredFiles[Name], cada LoadData(_)))
en
Datos combinados

¡Gracias!

¡Creo que lo tengo!
Para otras personas, este código:
Toma una carpeta de SharePoint

  • Filtrar sobresale por nombre
  • Dependiendo del nombre del archivo toma diferentes hojas
  • Por último, combine todos los datos en una tabla.

Aquí está el código:

let
FolderUrl = "sharepoint folder",

//Get the list of files from SharePoint
Source = SharePoint.Files("sharepoint", [ApiVersion = 15]),

//Filter the files to select only those starting with "A" or "B"
FilteredFiles = Table.SelectRows(Source, each Text.StartsWith([Name], "A") or Text.StartsWith([Name], "B")),

//Define a function to load data from each Excel file
LoadData = (file as text) =>
let
//Fetch the binary content of the Excel file
ExcelContent = Web.Contents(FolderUrl & file),

//Load the Excel workbook
ExcelWorkbook = Excel.Workbook(ExcelContent),

//Determine the sheet name based on the file name
DataSheetName =
if Text.StartsWith(file, "A") then "C"
else if Text.StartsWith(file, "B") then "D"
else null,

//Extract data from the specified sheet
DataSheet = if DataSheetName <> null then ExcelWorkbook{[Item=DataSheetName, Kind="Sheet"]}[Data] else null,

//Skip the first row if data exists
SkipFirstRow = if DataSheet <> null then Table.Skip(DataSheet, 1) else null,

//Add a column to identify the source file
AddSourceColumn = Table.AddColumn(SkipFirstRow, "FileSource", each file, type text)
in
//Return the resulting table
AddSourceColumn,

//Apply the LoadData function to each file and combine the results
CombinedData = Table.Combine(List.Transform(FilteredFiles[Name], each LoadData(_)))
in
CombinedData

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors