我试图从 Qliksnese 上的驱动器中的文件夹中获取所有文件(谷歌表格),但出现以下错误 noFileSize。是语法问题吗?
这里有以下脚本:
LIB CONNECT TO 'GDR_1V_WORKLOAD_MANAGEMENT';
SELECT title,
id,
mimeType
FROM ListFiles
WITH PROPERTIES (
driveId='driveId',
query='"folderId" in parents and mimeType = "application/vnd.google-apps.spreadsheet"'
);
for Each file_name in FieldValueList('title');
Qualify *; // making sure field names are unique to aviod synthetic keys
LOAD
*
FROM [lib://GDR_1V_WORKLOAD_MANAGEMENT/folderId/$(file_name)];
next
脚本中driveId和folderId是真实的Id,不是变量。
看起来您正确执行了第一步,即从驱动器和所需文件夹中获取 Google 表格文件列表。但是,为了实际从这些文件内的工作表中提取任何数据,您需要执行更多步骤。
这里有一些您可以用来实现的脚本:
Lib Connect To 'Google_Drive_&_Spreadsheets';
[Google Sheets]:
Select
title,
id,
driveId,
mimeType,
parents_id
From ListFiles
With Properties (
driveId='',
query='"folderId" in parents and mimeType = "application/vnd.google-apps.spreadsheet"'
)
;
For vFileNum = 0 to NoOfRows('Google Sheets') - 1
Let vCurrentFileId = Peek('id', vFileNum, 'Google Sheets');
Let vCurrentFileName = Peek('title', vFileNum, 'Google Sheets');
[Google Sheets - $(vCurrentFileName)]:
NoConcatenate Select
worksheetKey,
sheetId,
index,
title,
rowCount,
colCount
From ListWorksheets
With Properties (
spreadsheetKey='$(vCurrentFileId)'
)
;
For vWorksheetNum = 0 to NoOfRows('Google Sheets - $(vCurrentFileName)') - 1
Let vCurrentWorksheetName = Peek('title', vWorksheetNum, 'Google Sheets - $(vCurrentFileName)');
Qualify *;
[Google Sheets - $(vCurrentFileName) - $(vCurrentWorksheetName)]:
NoConcatenate Select *
From GetSheetValues
With Properties (
spreadsheetKey='$(vCurrentFileId)',
range='''$(vCurrentWorksheetName)''',
valueRenderOption='FORMATTED_VALUE',
dateTimeRenderOption='FORMATTED_STRING',
generatedNumberedColumns='false',
skipRows=''
)
;
Unqualify *;
Next vWorksheetNum
Drop Table [Google Sheets - $(vCurrentFileName)];
Next vFileNum
以下是有关此脚本功能的一些注释:
[Google Sheets]
表正在收集Google表格文件列表,与您的操作方式相同。For vFileNum = 0 to NoOfRows('Google Sheets') - 1
循环浏览上面拉入的 Google 表格文件列表。vCurrentFileId
和 vCurrentFileName
)。ListWorksheets
端点来拉取循环中当前文件的工作表列表。For vWorksheetNum = 0 to NoOfRows('Google Sheets - $(vCurrentFileName)') - 1
。vCurrentWorksheetName
设置为当前工作表名称。Qualify *;
语句在这里开始表限定。GetSheetValues
端点从循环中的当前工作表中提取所有数据。我们使用 vCurrentWorksheetName
变量来指定要加载哪个工作表。