Ecco come ho cercato come fare questo:
Il modo per aggiungere una tabella in Docx è quello di utilizzare il tag <w:tbl>
. Così ho cercato per questo nel repository github, e l'ho trovato in this file (chiamati Scrittori/Docx.hs, quindi non è una grande sorpresa)
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'
io non sono a conoscenza a tutti con Haskell, ma posso vedere che lo stile del bordo è hardcoded, poiché non vi è alcuna variabile in esso:
let borderProps = mknode "w:tcPr" []
[ mknode "w:tcBorders" []
$ mknode "w:bottom" [("w:val","single")]()
, mknode "w:vAlign" [("w:val","bottom")]() ]
Che cosa significa?
Ciò significa che non è possibile modificare lo stile delle tabelle docx con la versione corrente di PanDoc. In ogni caso, c'è un modo per ottenere il proprio stile.
Come ottenere il proprio stile?
- Creare un documento docx con lo stile che si desidera sul vostro tavolo (con la creazione di quel tavolo)
- cambiare l'estensione del file e decomprimerlo
- Aprire
word/document.xml
e cercare il <w:tbl>
- Try per scoprire come il tuo stile si traduce in XML e cambiare il borderProps in base a ciò che vedi.
Ecco un test con un border-style che ho creato: 
E qui è il corrispondente 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>
Che dire odt?
Non ho ancora dato un'occhiata, chiedete se non lo trovate da soli usando un metodo simile.
Spero che questo aiuti e non esitate a chiedere qualcosa di più
Accetterò questo, poiché era il primo. Non ho nemmeno pensato di controllare semplicemente il codice (o forse sono troppo pigro e preferisco lasciare che siano gli altri a farlo;))! Grazie! –
Non è sempre facile controllare il codice quando non si ha familiarità con ciò che accade dietro, ad esempio come è strutturato un documento, come viene rappresentata la tabella in docx. Quindi è normale. – edi9999
Questa è una risposta meravigliosa. Tutti i voti positivi per te @ edi9999. – Archonic