导出M(power query)查询结果到csv
Export M ( power query ) query result to csv
基本上我有大约 50 个 excel 工作表,其中包含要处理的信息。每个工作表内部都有一个强大的查询脚本来清理信息。我需要以任何可能的方式自动执行此过程。
我已经下载了 power query SDK,在 visual studio 我 运行 .pq 文件中,它可以工作,但我找不到将查询结果写入文件的方法(或插入它直接到 sql 服务器 table).
我已经尝试 this approach 并且它有效(在 power BI book 上使用 R 以使用 write.table 命令将其导出到文件)。问题是我不知道如何在不打开书的情况下触发刷新。 (所以我可以将它添加到工作列表中)。
Power BI 中的每隔 X 次刷新选项在这里没有用,我需要在部分 sql 作业完成后触发刷新。所以我需要通过某种类型的 API.
触发
欢迎任何类型的解决方案。
我有一个类似的任务,我正在使用 Powershell 脚本打开 excel 文件,刷新所有工作表,然后将每个工作表导出为 CSV。
然后根据需要简单地安排工作。
#Open XLSX Processor
$E = new-object -comobject excel.application
$E.Visible = $false
$E.DisplayAlerts = $true
$Workbook = $E.Workbooks.Open($File_XLSX)
#Refresh all Queries
foreach ($conn in $Workbook.Connections){
try{ $conn.OLEDBConnection.BackgroundQuery = $false } catch {}
try{$conn.ODBCConnection.BackgroundQuery = $false } catch {}
}
$Workbook.RefreshAll()
$E.CalculateUntilAsyncQueriesDone()
# Export XLSX to CSV
foreach ($Worksheet in $Workbook.Worksheets)
{
$n = $File_XLSX + "_" + $Worksheet.Name
$Worksheet.SaveAs($csvLoc + $n + ".csv", 6)
}
$Workbook.Close($false)
#Closing Excel
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Worksheet)|out-null
$Worksheet=$null
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Workbook)|out-null
$Workbook=$null
# Close Excel
$E.quit()
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($E)|out-null
$E=$null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
基本上我有大约 50 个 excel 工作表,其中包含要处理的信息。每个工作表内部都有一个强大的查询脚本来清理信息。我需要以任何可能的方式自动执行此过程。
我已经下载了 power query SDK,在 visual studio 我 运行 .pq 文件中,它可以工作,但我找不到将查询结果写入文件的方法(或插入它直接到 sql 服务器 table).
我已经尝试 this approach 并且它有效(在 power BI book 上使用 R 以使用 write.table 命令将其导出到文件)。问题是我不知道如何在不打开书的情况下触发刷新。 (所以我可以将它添加到工作列表中)。
Power BI 中的每隔 X 次刷新选项在这里没有用,我需要在部分 sql 作业完成后触发刷新。所以我需要通过某种类型的 API.
触发欢迎任何类型的解决方案。
我有一个类似的任务,我正在使用 Powershell 脚本打开 excel 文件,刷新所有工作表,然后将每个工作表导出为 CSV。 然后根据需要简单地安排工作。
#Open XLSX Processor
$E = new-object -comobject excel.application
$E.Visible = $false
$E.DisplayAlerts = $true
$Workbook = $E.Workbooks.Open($File_XLSX)
#Refresh all Queries
foreach ($conn in $Workbook.Connections){
try{ $conn.OLEDBConnection.BackgroundQuery = $false } catch {}
try{$conn.ODBCConnection.BackgroundQuery = $false } catch {}
}
$Workbook.RefreshAll()
$E.CalculateUntilAsyncQueriesDone()
# Export XLSX to CSV
foreach ($Worksheet in $Workbook.Worksheets)
{
$n = $File_XLSX + "_" + $Worksheet.Name
$Worksheet.SaveAs($csvLoc + $n + ".csv", 6)
}
$Workbook.Close($false)
#Closing Excel
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Worksheet)|out-null
$Worksheet=$null
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Workbook)|out-null
$Workbook=$null
# Close Excel
$E.quit()
Start-Sleep 1
# Cleanup COM
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($E)|out-null
$E=$null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()