以下是我寻找如何做到这一点:
添加表的方式DOCX是使用<w:tbl>
标签。所以,我搜索了这个在GitHub的仓库,并发现它in this file(称为作家/ Docx.hs,所以它不是一个巨大的惊喜)
blockToOpenXML opts (Table caption aligns widths headers rows) = do
let captionStr = stringify caption
caption' <- if null caption
then return []
else withParaProp (pStyle "TableCaption")
$ blockToOpenXML opts (Para caption)
let alignmentFor al = mknode "w:jc" [("w:val",alignmentToString al)]()
let cellToOpenXML (al, cell) = withParaProp (alignmentFor al)
$ blocksToOpenXML opts cell
headers' <- mapM cellToOpenXML $ zip aligns headers
rows' <- mapM (\cells -> mapM cellToOpenXML $ zip aligns cells)
$ rows
let borderProps = mknode "w:tcPr" []
[ mknode "w:tcBorders" []
$ mknode "w:bottom" [("w:val","single")]()
, mknode "w:vAlign" [("w:val","bottom")]() ]
let mkcell border contents = mknode "w:tc" []
$ [ borderProps | border ] ++
if null contents
then [mknode "w:p" []()]
else contents
let mkrow border cells = mknode "w:tr" [] $ map (mkcell border) cells
let textwidth = 7920 -- 5.5 in in twips, 1/20 pt
let mkgridcol w = mknode "w:gridCol"
[("w:w", show $ (floor (textwidth * w) :: Integer))]()
return $
[ mknode "w:tbl" []
(mknode "w:tblPr" []
([ mknode "w:tblStyle" [("w:val","TableNormal")]() ] ++
[ mknode "w:tblCaption" [("w:val", captionStr)]()
| not (null caption) ])
: mknode "w:tblGrid" []
(if all (==0) widths
then []
else map mkgridcol widths)
: [ mkrow True headers' | not (all null headers) ] ++
map (mkrow False) rows'
)
] ++ caption'
我不熟悉的所有哈斯克尔,但我可以看到边框样式是硬编码的,因为它没有变量:
let borderProps = mknode "w:tcPr" []
[ mknode "w:tcBorders" []
$ mknode "w:bottom" [("w:val","single")]()
, mknode "w:vAlign" [("w:val","bottom")]() ]
这是什么意思?
这意味着您无法使用当前版本的PanDoc更改docx表的样式。但是,有一种方法可以获得自己的风格。
如何获得自己的风格?
- (通过创建表)
- 更改创建您是否想在表中的样式的docx文件该文件的扩展名并解压,
- 打开
word/document.xml
和搜索<w:tbl>
- 尝试了解您的样式如何在XML中转换并根据您所看到的更改borderProps。
下面是一个带有边框风格我创建了一个测试:
这里是相应的XML:
<w:tblBorders>
<w:top w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
<w:left w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
<w:bottom w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
<w:right w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
<w:insideH w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
<w:insideV w:val="dotted" w:sz="18" w:space="0" w:color="C0504D" w:themeColor="accent2"/>
</w:tblBorders>
什么ODT?
我还没有看过它,问你是否自己找不到使用类似的方法。
希望这有助于不要犹豫,要求更多的东西
我会接受这个,因为它是第一个。我甚至没有想过简单地检查代码(或者我可能太懒惰了,宁愿让别人去做);)!谢谢! –
当您不熟悉背后发生的事情时,检查代码并不总是那么容易,例如文档是如何构造的,以及如何在docx中表示表格。所以这很正常。 – edi9999
这是一个很好的答案。所有赞扬你@ edi9999。 – Archonic