xbrl使用谷歌脚本进入谷歌电子表格

时间:2013-07-21 05:38:59

标签: xml google-apps-script google-sheets xbrl

有人能告诉我如何使用谷歌脚本将XBRL数据导入谷歌电子表格吗?

http://www.fossil.com/attachments/en_US/financials/2013/fosl-20130330.xml

这是链接。

function XBRLexplore() {
  var target = "http://www.fossil.com/attachments/en_US/financials/2013/fosl-20130330.xml";
  var pageTxt = UrlFetchApp.fetch(target).getContentText();
  var pageDoc = Xml.parse(pageTxt,true);

//var temp=getDivById( pageDoc.getElement(), 'Tag204' );
//var temp=getElementById('Tag204')
}

我似乎无法将“tag204”作为第一个元素。不确定如何正确使用get by id函数。

1 个答案:

答案 0 :(得分:1)

关于解析XML文档,请查看previous questions,因为XBRL是使用标准化业务术语分类的XML应用程序。 (请记住 - HTML文档是带有标记或元素的XML,特定于网页设计的类型。)

例如,this answer显示了xml元素的一些非常基本的导航。你应该回忆一下this one更详细地解释它。

相同的技术适用,但使用AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount等元素类型(包含id="Tag204"的元素就是其中之一。)

<us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount id="Tag204" decimals="0" contextRef="D2013Q1" unitRef="Shares">201000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>

XML元素名称由两部分组成,前缀为可选命名空间的必需名称。在这种情况下,名称空间为us-gaap,它告诉我们词汇来源。

以下是使用this answer中介绍的getElementByVal()实用程序获取该元素的方法,并将其写入电子表格:

function xbrl() {
  var target = "http://www.fossil.com/attachments/en_US/financials/2013/fosl-20130330.xml";
  var pageTxt = UrlFetchApp.fetch(target).getContentText();
  var xbrl = Xml.parse(pageTxt,true).getElement();

  var Tag204 =
      getElementByVal( xbrl,
                      'AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount',
                      'id',
                      'Tag204' );

  var data = [];
  var row = [];
  var name = Tag204.getName().getLocalName();
  row.push(name);
  var attributes = Tag204.getAttributes();
  for (var j=0; j<attributes.length; j++) {
    row.push(attributes[j].toXmlString())
  }
  data.push(row);

  var sheetId = '---Sheet-Id---';
  var sheet = SpreadsheetApp.openById(sheetId).getSheetByName("XBRL");
  sheet.getRange(1,1,data.length,data[0].length).setValues(data);
}