如何使用Google Apps脚本在Google表中使用XML响应导入TXT文件



我有一个带有此结构的记录的log.txt文件:

20190509 131952 CON  Parametros: [abc....]
20190509 131952 CON  Changing Endpoint to https:.....
20190509 131952 INF  SQL: select .....
20190509 131952 CON  Outbound with header: 
<S:Envelope xmlns:S="http://schemas.........</S:Envelope>

我只想用XML响应提取线条 <S:Envelope xmlns:S="http://schemas.........</S:Envelope> 并在相应列中使用数据导入Google表格。

我不是应用程序脚本的专家,我看不到如何使用XMLService获得结果。我认为,理想是导入文件,对于每行验证,如果将其导入到Google表格中,它是否是XML响应。谢谢您,如果有人可以给我一些有关如何获得想要的东西的指示。我研究了但找不到这种类型的例子。

function Importa() {
  var PastaAMonitorizar = DriveApp.getFolderById('abc_xyz'); // id da pasta onde txt está quardado
  var ss = SpreadsheetApp.openById('abc_xyz'); //id da folha para onde são importados os dados
  var files = PastaAMonitorizar.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var fileName = file.getName();
    var targetRng = ss.getSheetByName("INFO"),
        fileTextObj = file.getAs('text/plain'),
        fileText = fileTextObj.getDataAsString('ISO-8859-1'),
        lines = fileText.split('n'),
...

我知道导入一个TXT文件,但是我无法弄清楚如何仅提取XML响应

从log.txt

提取所需的数据

您需要提供文件ID。

这是我的文件URL:https://anyfile-notepad.semaan.ca/app#edit/GoogleDrive/1KTusR1iiQQHB1lXQfYDh2MEjDHEOsdNm

ID是最后一个前向斜线之后的字符串。

function extractData() {
  var file=DriveApp.getFileById('fileId');
  var content=file.getBlob().getDataAsString();
  var a1=content.split('n');
  var a2=a1.filter(function(elem){return (elem.slice(0,1)=='<')});
  return a2;//and array of your desired strings
}

array.filter

array.slice

这将在简单的对话框中显示您的结果:

function extractData() {
  var file=DriveApp.getFileById('fileId');
  var content=file.getBlob().getDataAsString();
  var a1=content.split('n');
  var a2=a1.filter(function(elem){return (elem.slice(0,1)=='<')});
  var html='';
  for(var i=0;i<a2.length;i++) {
    html+='<br />' + a2[i].replace(/[u00A0-u9999<>&]/gim, function(j) {return '&#'+j.charCodeAt(0)+';';})
  }
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Desired Strings')
}

此代码:@chris Baker提供的replace(/[u00A0-u9999<>&]/gim, function(i) {return '&#'+i.charCodeAt(0)+';';})

基于 @库珀的回应,我想到了这个解决方案:

function extractD() {
  var file = DriveApp.getFileById('xyz_abc');
  var content = file.getBlob().getDataAsString();
  var a1 = content.split('n').filter(function(elem){return (elem.slice(0,1)=='<')}),
      a11 = [];
  a1 = a1.map(function(x){ return x.replace(/u003cu002f/g,"u003e")});
  a1.forEach(function(y) { a11.push(y.split('u003e'));}); 
  var a2 = a11.map(function(e){return [e[2].replace('<',''),//A
                                       e[6].slice(0,19).replace('T',' '),//B
                                       e[30],e[31]]});
  Logger.log(a2)
  SpreadsheetApp.openById("abc_xyz").getSheetByName("1").getRange(1, 1,a2.length, a2[0].length)
  .setValues(a2);
}

可能不是最好的方法,但它可以正常工作,并且由于我没有找到其他解决方案,因此它留给那些正在寻找类似物品的人。

最新更新