When cells are merged, the rendered borders will be those of the first cell. If a column is made of three merged cells, the bottom border that will be seen will be the bottom border of the first cell in the column. From a user point of view, this is wrong, the bottom should be the one defined for cell 3. This function modify the border values to avoid that effect.
Examples
library(officer)
dat <- data.frame(a = 1:5, b = 6:10)
ft <- flextable(dat)
ft <- theme_box(ft)
ft <- merge_at(ft, i = 4:5, j = 1, part = "body")
ft <- hline(ft,
i = 5, part = "body",
border = fp_border(color = "red", width = 5)
)
print(ft)
#> <style></style>
#> <div class="tabwid"><style>.cl-a6536a96{}.cl-a64bb620{font-family:'DejaVu Sans';font-size:11pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-a64bb62a{font-family:'DejaVu Sans';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-a64f1310{margin:0;text-align:right;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-a64f29b8{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 0.75pt solid rgba(102, 102, 102, 1.00);border-top: 0.75pt solid rgba(102, 102, 102, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a64f29cc{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 0.75pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a64f29cd{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 5pt solid rgba(255, 0, 0, 1.00);border-top: 0.75pt solid rgba(102, 102, 102, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table data-quarto-disable-processing='true' class='cl-a6536a96'><thead><tr style="overflow-wrap:break-word;"><th class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb620">a</span></p></th><th class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb620">b</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-a64f29cc"><p class="cl-a64f1310"><span class="cl-a64bb62a">1</span></p></td><td class="cl-a64f29cc"><p class="cl-a64f1310"><span class="cl-a64bb62a">6</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">2</span></p></td><td class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">7</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">3</span></p></td><td class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">8</span></p></td></tr><tr style="overflow-wrap:break-word;"><td rowspan="2"class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">4</span></p></td><td class="cl-a64f29b8"><p class="cl-a64f1310"><span class="cl-a64bb62a">9</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a64f29cd"><p class="cl-a64f1310"><span class="cl-a64bb62a">10</span></p></td></tr></tbody></table></div>
ft <- fix_border_issues(ft)
print(ft)
#> <style></style>
#> <div class="tabwid"><style>.cl-a65f2cfa{}.cl-a6575ea8{font-family:'DejaVu Sans';font-size:11pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-a6575eb2{font-family:'DejaVu Sans';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-a65ac566{margin:0;text-align:right;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-a65adc36{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 0.75pt solid rgba(102, 102, 102, 1.00);border-top: 0.75pt solid rgba(102, 102, 102, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a65adc4a{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 0.75pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-a65adc4b{width:0.75in;background-color:transparent;vertical-align: middle;border-bottom: 5pt solid rgba(255, 0, 0, 1.00);border-top: 0.75pt solid rgba(102, 102, 102, 1.00);border-left: 0.75pt solid rgba(102, 102, 102, 1.00);border-right: 0.75pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table data-quarto-disable-processing='true' class='cl-a65f2cfa'><thead><tr style="overflow-wrap:break-word;"><th class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575ea8">a</span></p></th><th class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575ea8">b</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-a65adc4a"><p class="cl-a65ac566"><span class="cl-a6575eb2">1</span></p></td><td class="cl-a65adc4a"><p class="cl-a65ac566"><span class="cl-a6575eb2">6</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575eb2">2</span></p></td><td class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575eb2">7</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575eb2">3</span></p></td><td class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575eb2">8</span></p></td></tr><tr style="overflow-wrap:break-word;"><td rowspan="2"class="cl-a65adc4b"><p class="cl-a65ac566"><span class="cl-a6575eb2">4</span></p></td><td class="cl-a65adc36"><p class="cl-a65ac566"><span class="cl-a6575eb2">9</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-a65adc4b"><p class="cl-a65ac566"><span class="cl-a6575eb2">10</span></p></td></tr></tbody></table></div>