从节点js中的二维数组生成docx table

Generate docx table from 2-dimensional array in node js

我正在使用 node.js 并尝试使用 table 基于二维数组生成一个 docx 文件,我不知道它的长度。

我发现了一些用于生成 docx 的库,例如:https://github.com/Ziv-Barber/officegen and https://github.com/open-xml-templating/docxtemplater。但第一个不支持 tables 而第二个(据我设法理解)仅适用于对象。

那么,有什么办法可以做到这一点吗?

免责声明:我正在维护 docxtemplater。

可以使用docxtemplater生成带有数据数组的tables,但据我所知,你不能使用二维数组来输出table : 例如,在 table 中循环的唯一方法是循环生成多行。

如果你想生成一个 table 可以有 c 列和 r 行,你仍然可以使用 docxtemplater :如果你使用 {@rawXml} 语法,文档将替换那个标签一些xml你把自己。

您可能应该以编程方式生成 "tableXml",使用循环或像 mustache

这样的简单模板引擎

您的模板可以是例如:

Customer {customer_name}

{@tableXml}

和您的数据:

{
  customer_name:"Franck",
  tableXml:'<w:tbl>
  <w:tblPr>
    <w:jc w:val="left"/>
    <w:tblInd w:type="dxa" w:w="12"/>
    <w:tblBorders>
      <w:top w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
      <w:left w:val="nil"/>
      <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
      <w:insideH w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
      <w:right w:val="nil"/>
      <w:insideV w:val="nil"/>
    </w:tblBorders>
    <w:tblCellMar>
      <w:top w:type="dxa" w:w="0"/>
      <w:left w:type="dxa" w:w="108"/>
      <w:bottom w:type="dxa" w:w="0"/>
      <w:right w:type="dxa" w:w="108"/>
    </w:tblCellMar>
  </w:tblPr>
  <w:tblGrid>
    <w:gridCol w:w="1797"/>
    <w:gridCol w:w="2444"/>
    <w:gridCol w:w="2458"/>
    <w:gridCol w:w="1790"/>
  </w:tblGrid>
  <w:tr>
    <w:trPr>
      <w:cantSplit w:val="false"/>
    </w:trPr>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1797"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="4472C4" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:tabs>
            <w:tab w:leader="none" w:pos="955" w:val="center"/>
          </w:tabs>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>COLUMN1</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2444"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="4472C4" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>COLUMN2</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2458"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="4472C4" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>COLUMN3</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1790"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="4472C4" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:bCs/>
            <w:color w:val="FFFFFF"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>COLUMN4</w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
  <w:tr>
    <w:trPr>
      <w:cantSplit w:val="false"/>
    </w:trPr>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1797"/>
        <w:tcBorders>
          <w:top w:val="nil"/>
          <w:left w:val="nil"/>
          <w:bottom w:val="nil"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> #table1  t1data1 </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2444"/>
        <w:tcBorders>
          <w:top w:val="nil"/>
          <w:left w:val="nil"/>
          <w:bottom w:val="nil"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> t1data2 </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2458"/>
        <w:tcBorders>
          <w:top w:val="nil"/>
          <w:left w:val="nil"/>
          <w:bottom w:val="nil"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> t1data3 </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1790"/>
        <w:tcBorders>
          <w:top w:val="nil"/>
          <w:left w:val="nil"/>
          <w:bottom w:val="nil"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> t1data4  /table1 </w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
  <w:tr>
    <w:trPr>
      <w:cantSplit w:val="false"/>
    </w:trPr>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1797"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="6" w:val="double"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style0"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>TOTAL</w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2444"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="6" w:val="double"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> t1total1 </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="2458"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="6" w:val="double"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> t1total2 </w:t>
        </w:r>
      </w:p>
    </w:tc>
    <w:tc>
      <w:tcPr>
        <w:tcW w:type="dxa" w:w="1790"/>
        <w:tcBorders>
          <w:top w:color="00000A" w:space="0" w:sz="6" w:val="double"/>
          <w:left w:val="nil"/>
          <w:bottom w:color="00000A" w:space="0" w:sz="18" w:val="single"/>
          <w:right w:val="nil"/>
        </w:tcBorders>
        <w:shd w:fill="FFFFFF" w:val="clear"/>
      </w:tcPr>
      <w:p>
        <w:pPr>
          <w:pStyle w:val="style32"/>
          <w:spacing w:after="0" w:before="0" w:line="100" w:lineRule="atLeast"/>
          <w:contextualSpacing w:val="false"/>
          <w:jc w:val="center"/>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
        </w:pPr>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t> </w:t>
        </w:r>
        <w:bookmarkStart w:id="0" w:name="_GoBack2"/>
        <w:bookmarkEnd w:id="0"/>
        <w:r>
          <w:rPr>
            <w:b/>
            <w:color w:val="00000A"/>
            <w:lang w:val="en-US"/>
          </w:rPr>
          <w:t>t1total3 </w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
</w:tbl>
'
}