Đây là cách tôi đã tìm kiếm làm thế nào để làm điều này:
Cách để thêm một bảng trong Docx là sử dụng thẻ <w:tbl>
. Vì vậy, tôi đã tìm kiếm cho điều này trong kho github, và thấy nó in this file (gọi tắt là Nhà văn/Docx.hs, vì vậy nó không phải là một bất ngờ lớn)
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'
Tôi không quen thuộc ở tất cả với Haskell, nhưng tôi có thể nhìn thấy rằng kiểu đường viền được mã hóa cứng vì không có biến nào trong đó:
let borderProps = mknode "w:tcPr" []
[ mknode "w:tcBorders" []
$ mknode "w:bottom" [("w:val","single")]()
, mknode "w:vAlign" [("w:val","bottom")]() ]
Điều đó có nghĩa là gì?
Điều đó có nghĩa là bạn không thể thay đổi kiểu của bảng docx bằng phiên bản hiện tại của PanDoc. Howewer, có một cách để có được phong cách của riêng bạn.
Cách lấy phong cách của riêng bạn?
- Tạo một tài liệu Docx với phong cách mà bạn muốn trên bảng của bạn (bằng cách tạo ra bảng đó)
- Thay đổi phần mở rộng của tập tin đó và giải nén nó
- mở
word/document.xml
và tìm kiếm các <w:tbl>
- Hãy thử để tìm hiểu cách phong cách của bạn dịch sang XML và thay đổi borderProps theo những gì bạn thấy.
Dưới đây là một thử nghiệm với một border-style Tôi tạo ra:
Và đây là XML tương ứng:
<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>
gì về odt?
Tôi chưa xem xét, hãy hỏi xem bạn có không tự tìm thấy bằng phương pháp tương tự hay không.
Hope this helps và đừng ngần ngại hỏi một cái gì đó hơn
Tôi sẽ chấp nhận điều này vì đây là lần đầu tiên. Tôi thậm chí không nghĩ đơn giản là kiểm tra mã (hoặc có lẽ tôi quá lười biếng và thích cho phép người khác làm điều đó;))! Cảm ơn! –
Không phải lúc nào cũng dễ dàng kiểm tra mã khi bạn không quen với những gì đang xảy ra phía sau, ví dụ như cách tài liệu được cấu trúc, cách bảng được trình bày trong docx. Vì vậy, nó là bình thường. – edi9999
Đây là một câu trả lời tuyệt vời. Tất cả các upvotes cho bạn @ edi9999. – Archonic