IMPORTDATA 未从 XML 获取实时数据
IMPORTDATA not grabbing live data from XML
我正在使用 Google Sheet 的 IMPORTDATA 函数从 XML 文件中获取信息,该文件是从 API 中提取的,但是我提取的信息sheet 不是最新的。
如何修改我的 sheet 以获取最新数据?
比较sheet:https://docs.google.com/spreadsheets/d/1W0Bt5z-Tky-tNhG_JtfE4FfjTRgQNRu_eQu2qVhQ-_E/edit?usp=sharing(实时比分sheet)
致XML:https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0
观察两组数据中的特许经营权 id="0015"
。
sheet 表示 <franchise id="0005" score="0.00" gameSecondsRemaining="21600" playersYetToPlay="6" playersCurrentlyPlaying="0" isHome="0">
XML 状态 <franchise id="0015" score="11.14" gameSecondsRemaining="20004" playersYetToPlay="4" playersCurrentlyPlaying="2">
(此数据是针对我正在撰写本文时正在播放的足球比赛,因此上述示例可能不准确,但不会例如,分数为 0.00。
任何帮助都会很棒,谢谢!
您尝试过使用 IMPORTXML 吗? Google Sheets IMPORTXML Page
在 IMPORTXML 中,您可以只使用检查元素功能来提取 xpath。
希望这对您有所帮助。让我知道是否可以进一步提供帮助。
编辑:导入数据时更改的说明
- 在工具栏中转到脚本编辑器
- 现在在脚本中,粘贴下面列出的代码
/**
* Go through all sheets in a spreadsheet, identify and remove all spreadsheet
* import functions, then replace them a while later. This causes a "refresh"
* of the "import" functions. For periodic refresh of these formulas, set this
* function up as a time-based trigger.
*
* Caution: Formula changes made to the spreadsheet by other scripts or users
* during the refresh period COULD BE OVERWRITTEN.
*
* From:
*/
function RefreshImports() {
var lock = LockService.getScriptLock();
if (!lock.tryLock(5000)) return; // Wait up to 5s for previous refresh to end.
// At this point, we are holding the lock.
var id = "YOUR-SHEET-ID";
var ss = SpreadsheetApp.openById(id);
var sheets = ss.getSheets();
for (var sheetNum=0; sheetNum<sheets.length; sheetNum++) {
var sheet = sheets[sheetNum];
var dataRange = sheet.getDataRange();
var formulas = dataRange.getFormulas();
var tempFormulas = [];
for (var row=0; row<formulas.length; row++) {
for (col=0; col<formulas[0].length; col++) {
// Blank all formulas containing any "import" function
// See https://regex101.com/r/bE7fJ6/2
var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
if (formulas[row][col].search(re) !== -1 ) {
tempFormulas.push({row:row+1,
col:col+1,
formula:formulas[row][col]});
sheet.getRange(row+1, col+1).setFormula("");
}
}
}
// After a pause, replace the import functions
Utilities.sleep(5000);
for (var i=0; i<tempFormulas.length; i++) {
var cell = tempFormulas[i];
sheet.getRange( cell.row, cell.col ).setFormula(cell.formula)
}
// Done refresh; release the lock.
lock.releaseLock();
}
}
这段代码来自
- 最后也是最不重要的,替换 "YOUR-SHEET-ID"
注意:我没有亲自测试过这段代码,我不能保证它。我建议先制作一个副本并在那里进行测试。
希望这能解决您的数据导入不频繁的问题。如果您想手动获取 "fresh" 数据,您可以 delete/cut 导入功能并将其粘贴回去。
尝试在 A2:
=ARRAYFORMULA(IFNA(VLOOKUP(C2:C, PlayerList!A:F, {2, 6}, 0)))
在C2中:
=ARRAYFORMULA(QUERY(REGEXEXTRACT(QUERY(IMPORTDATA(
"https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0?273"),
"where Col1 contains 'player id'", 0),
"(player id=""(\d+)).+?(score=""(\d+.\d+))"),
"select Col2,Col4"))
spreadsheet demo
我正在使用 Google Sheet 的 IMPORTDATA 函数从 XML 文件中获取信息,该文件是从 API 中提取的,但是我提取的信息sheet 不是最新的。
如何修改我的 sheet 以获取最新数据?
比较sheet:https://docs.google.com/spreadsheets/d/1W0Bt5z-Tky-tNhG_JtfE4FfjTRgQNRu_eQu2qVhQ-_E/edit?usp=sharing(实时比分sheet)
致XML:https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0
观察两组数据中的特许经营权 id="0015"
。
sheet 表示 <franchise id="0005" score="0.00" gameSecondsRemaining="21600" playersYetToPlay="6" playersCurrentlyPlaying="0" isHome="0">
XML 状态 <franchise id="0015" score="11.14" gameSecondsRemaining="20004" playersYetToPlay="4" playersCurrentlyPlaying="2">
(此数据是针对我正在撰写本文时正在播放的足球比赛,因此上述示例可能不准确,但不会例如,分数为 0.00。
任何帮助都会很棒,谢谢!
您尝试过使用 IMPORTXML 吗? Google Sheets IMPORTXML Page
在 IMPORTXML 中,您可以只使用检查元素功能来提取 xpath。
希望这对您有所帮助。让我知道是否可以进一步提供帮助。
编辑:导入数据时更改的说明
- 在工具栏中转到脚本编辑器
- 现在在脚本中,粘贴下面列出的代码
/**
* Go through all sheets in a spreadsheet, identify and remove all spreadsheet
* import functions, then replace them a while later. This causes a "refresh"
* of the "import" functions. For periodic refresh of these formulas, set this
* function up as a time-based trigger.
*
* Caution: Formula changes made to the spreadsheet by other scripts or users
* during the refresh period COULD BE OVERWRITTEN.
*
* From:
*/
function RefreshImports() {
var lock = LockService.getScriptLock();
if (!lock.tryLock(5000)) return; // Wait up to 5s for previous refresh to end.
// At this point, we are holding the lock.
var id = "YOUR-SHEET-ID";
var ss = SpreadsheetApp.openById(id);
var sheets = ss.getSheets();
for (var sheetNum=0; sheetNum<sheets.length; sheetNum++) {
var sheet = sheets[sheetNum];
var dataRange = sheet.getDataRange();
var formulas = dataRange.getFormulas();
var tempFormulas = [];
for (var row=0; row<formulas.length; row++) {
for (col=0; col<formulas[0].length; col++) {
// Blank all formulas containing any "import" function
// See https://regex101.com/r/bE7fJ6/2
var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
if (formulas[row][col].search(re) !== -1 ) {
tempFormulas.push({row:row+1,
col:col+1,
formula:formulas[row][col]});
sheet.getRange(row+1, col+1).setFormula("");
}
}
}
// After a pause, replace the import functions
Utilities.sleep(5000);
for (var i=0; i<tempFormulas.length; i++) {
var cell = tempFormulas[i];
sheet.getRange( cell.row, cell.col ).setFormula(cell.formula)
}
// Done refresh; release the lock.
lock.releaseLock();
}
}
这段代码来自
- 最后也是最不重要的,替换 "YOUR-SHEET-ID"
注意:我没有亲自测试过这段代码,我不能保证它。我建议先制作一个副本并在那里进行测试。
希望这能解决您的数据导入不频繁的问题。如果您想手动获取 "fresh" 数据,您可以 delete/cut 导入功能并将其粘贴回去。
尝试在 A2:
=ARRAYFORMULA(IFNA(VLOOKUP(C2:C, PlayerList!A:F, {2, 6}, 0)))
在C2中:
=ARRAYFORMULA(QUERY(REGEXEXTRACT(QUERY(IMPORTDATA(
"https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0?273"),
"where Col1 contains 'player id'", 0),
"(player id=""(\d+)).+?(score=""(\d+.\d+))"),
"select Col2,Col4"))