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-671e7330{}.cl-67175c12{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-67175c26{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-671a69b6{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-671a7f64{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-671a7f6e{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-671a7f6f{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-671e7330'><thead><tr style="overflow-wrap:break-word;"><th class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c12">a</span></p></th><th class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c12">b</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-671a7f6e"><p class="cl-671a69b6"><span class="cl-67175c26">1</span></p></td><td class="cl-671a7f6e"><p class="cl-671a69b6"><span class="cl-67175c26">6</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">2</span></p></td><td class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">7</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">3</span></p></td><td class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">8</span></p></td></tr><tr style="overflow-wrap:break-word;"><td rowspan="2"class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">4</span></p></td><td class="cl-671a7f64"><p class="cl-671a69b6"><span class="cl-67175c26">9</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-671a7f6f"><p class="cl-671a69b6"><span class="cl-67175c26">10</span></p></td></tr></tbody></table></div>
ft <- fix_border_issues(ft)
print(ft)
#> <style></style>
#> <div class="tabwid"><style>.cl-67291416{}.cl-67220540{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-6722054a{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-672518de{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-67252dce{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-67252dd8{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-67252de2{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-67291416'><thead><tr style="overflow-wrap:break-word;"><th class="cl-67252dce"><p class="cl-672518de"><span class="cl-67220540">a</span></p></th><th class="cl-67252dce"><p class="cl-672518de"><span class="cl-67220540">b</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-67252dd8"><p class="cl-672518de"><span class="cl-6722054a">1</span></p></td><td class="cl-67252dd8"><p class="cl-672518de"><span class="cl-6722054a">6</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67252dce"><p class="cl-672518de"><span class="cl-6722054a">2</span></p></td><td class="cl-67252dce"><p class="cl-672518de"><span class="cl-6722054a">7</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67252dce"><p class="cl-672518de"><span class="cl-6722054a">3</span></p></td><td class="cl-67252dce"><p class="cl-672518de"><span class="cl-6722054a">8</span></p></td></tr><tr style="overflow-wrap:break-word;"><td rowspan="2"class="cl-67252de2"><p class="cl-672518de"><span class="cl-6722054a">4</span></p></td><td class="cl-67252dce"><p class="cl-672518de"><span class="cl-6722054a">9</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-67252de2"><p class="cl-672518de"><span class="cl-6722054a">10</span></p></td></tr></tbody></table></div>