Google 脚本不是用于创建 XML 的 Web 应用程序

问题描述 投票:0回答:1

有人能够帮助我使@Mike Steelson 在回答问题时制作的脚本而不是第一列显示为XML子元素名称成为子元素中的标签加上创建根元素名称并我选择的子元素名称?否则它工作得很好,但我需要对 XML 输出的结构进行控制。它还需要迭代 1200 多行。我也不知道如何让它吐出文件,以便我可以获得它的副本。它需要以这种格式吐出 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<student-details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <studentRecord>
         <column header name>cell content</column header name>
         <column header name>cell content</column header name>
         <column header name>cell content</column header name>
         <column header name>cell content</column header name>        
     </studentRecord>
</student-details>

我不确定它是否应该是一个网络应用程序,或者如果需要的话如何制作一个网络应用程序,因此任何有用的指示都会有所帮助。

这是我的Google表格

google-sheets google-apps-script
1个回答
0
投票

虽然我不确定是否能正确理解你的预期结果,但是下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  const [headers, ...rows] = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues();
  const root = XmlService.createDocument();
  const n = XmlService.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
  const studentDetails = XmlService.createElement("student-details").setNamespace(n);
  rows.forEach(r => {
    const studentRecord = XmlService.createElement("studentRecord");
    headers.forEach((h, j) => {
      studentRecord.addContent(XmlService.createElement(h).setText(r[j]));
    });
    studentDetails.addContent(studentRecord);
  });
  root.addContent(studentDetails);
  const res = XmlService.getRawFormat().format(root).replace(/<\?xml version="1.0" encoding="UTF-8"\?>/, `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`);
  console.log(res);
}

测试:

当使用您提供的电子表格运行此脚本时,将获得以下结果。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsi:student-details
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <studentRecord>
        <FirstName>Person 1</FirstName>
        <MI>E</MI>
        <LastName>Morning</LastName>
        <GradTerm></GradTerm>
        <InstHonrCode></InstHonrCode>
        <DegcCode>Gr. Cert.,</DegcCode>
        <MajrCode1>Teach Cred-Sec Ed</MajrCode1>
        <MajrCodeConc1>Initial Teacher Certificate Program</MajrCodeConc1>
        <MajrCode2></MajrCode2>
        <MajrCodeConc12></MajrCodeConc12>
        <Major3></Major3>
        <Major4></Major4>
        <DeptHonrCode></DeptHonrCode>
        <CollCode1>EU</CollCode1>
        <ConfidInd>N</ConfidInd>
        <GrstCode>Second Audit</GrstCode>
        <GradDate></GradDate>
        <AcyrCode>2024</AcyrCode>
    </studentRecord>
    <studentRecord>
        <FirstName>Person 2</FirstName>
        <MI>D</MI>
        <LastName>Sun</LastName>
        <GradTerm></GradTerm>
        <InstHonrCode></InstHonrCode>
        <DegcCode>Gr. Cert.,</DegcCode>
        <MajrCode1>K-12 Art</MajrCode1>
        <MajrCodeConc1>Initial Teacher Certificate Program</MajrCodeConc1>
        <MajrCode2></MajrCode2>
        <MajrCodeConc12></MajrCodeConc12>
        <Major3></Major3>
        <Major4></Major4>
        <DeptHonrCode></DeptHonrCode>
        <CollCode1>EU</CollCode1>
        <ConfidInd>N</ConfidInd>
        <GrstCode>Second Audit</GrstCode>
        <GradDate></GradDate>
        <AcyrCode>2024</AcyrCode>
    </studentRecord>
    <studentRecord>
        <FirstName>Person 3</FirstName>
        <MI></MI>
        <LastName>Junction</LastName>
        <GradTerm></GradTerm>
        <InstHonrCode></InstHonrCode>
        <DegcCode>Gr. Cert.,</DegcCode>
        <MajrCode1>Teach Cred-Sec Ed</MajrCode1>
        <MajrCodeConc1>Initial Teacher Certificate Program</MajrCodeConc1>
        <MajrCode2></MajrCode2>
        <MajrCodeConc12></MajrCodeConc12>
        <Major3></Major3>
        <Major4></Major4>
        <DeptHonrCode></DeptHonrCode>
        <CollCode1>EU</CollCode1>
        <ConfidInd></ConfidInd>
        <GrstCode>Second Audit</GrstCode>
        <GradDate></GradDate>
        <AcyrCode>2024</AcyrCode>
    </studentRecord>
    <studentRecord>
        <FirstName>Person 4</FirstName>
        <MI></MI>
        <LastName>Moon</LastName>
        <GradTerm></GradTerm>
        <InstHonrCode></InstHonrCode>
        <DegcCode>Gr. Cert.,</DegcCode>
        <MajrCode1>Teach Cred-Sec Ed</MajrCode1>
        <MajrCodeConc1>Initial Teacher Certificate Program</MajrCodeConc1>
        <MajrCode2></MajrCode2>
        <MajrCodeConc12></MajrCodeConc12>
        <Major3></Major3>
        <Major4></Major4>
        <DeptHonrCode></DeptHonrCode>
        <CollCode1>EU</CollCode1>
        <ConfidInd></ConfidInd>
        <GrstCode>Second Audit</GrstCode>
        <GradDate></GradDate>
        <AcyrCode>2024</AcyrCode>
    </studentRecord>
</xsi:student-details>

注:

  • 对于

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    命名空间,会像
    xsi
    一样自动添加前缀
    xsi:student-details
    。但是,如果您想删除它,请按如下方式修改。

    • 来自

        const res = XmlService.getRawFormat().format(root).replace(/<\?xml version="1.0" encoding="UTF-8"\?>/, `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`);
      
    •   const res = XmlService.getRawFormat().format(root).replace(/<\?xml version="1.0" encoding="UTF-8"\?>/, `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`).replace(/xsi:student-details/g, "student-details");
      

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.