gpt4 book ai didi

node.js - 从 Node js中的二维数组生成docx表

转载 作者:搜寻专家 更新时间:2023-11-01 00:07:39 25 4
gpt4 key购买 nike

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

我找到了一些用于生成 docx 的库,例如:https://github.com/Ziv-Barber/officegenhttps://github.com/open-xml-templating/docxtemplater .但第一个不支持表格,第二个(据我了解)仅适用于对象。

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

最佳答案

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

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

如果你想生成一个可以有 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>
'
}

关于node.js - 从 Node js中的二维数组生成docx表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29315231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com