为什么我的底部边框不限制在 Excel 范围内?

Why is my bottom border not restricting itself to the border of the Excel range?

我有这段代码可以为范围添加底部边框:

var rowRngForHorBorder = _xlSheet.Range[_xlSheet.Cells[4, 1], _xlSheet.Cells[4, 17]];
Excel.Borders _borders = rowRngForHorBorder.Borders;
_borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
_borders.Weight = Excel.XlBorderWeight.xlMedium;

这就是我想要的样子,或多或少:

...这是 的样子:

为什么垂直线与水平底部一起乱七八糟地and/or散乱?谁告诉他们他们会破坏电子表格?

更新

它仍然不适合我;使用此更新代码:

var rng = _xlSheet.Range[_xlSheet.Cells[5, 1], _xlSheet.Cells[5, 17]];
Excel.Borders _borders = rng.Borders;
rng.Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
rng.Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
rng.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
rng.Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
rng.Borders[Excel.XlBordersIndex.xlEdgeBottom].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
_borders.Weight = Excel.XlBorderWeight.xlMedium;

...我明白了:

GrammatonCleric 建议的代码似乎很合理,它应该 有效...但它仍然无效。

我看过这个,下面的内容对我有用...应该对你有用:

    Excel.Range rng = workSheet.Range[workSheet.Cells[4, 1], workSheet.Cells[4, 17]];
    rng.Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
    rng.Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
    rng.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
    rng.Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;
    rng.Borders[Excel.XlBordersIndex.xlEdgeBottom].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
    rng.Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlMedium;

看来您必须单独设置每个元素的样式,否则 Excel API 认为它应该在您的范围周围应用完整的边框。

奇怪。

这是我的电子表格的样子:

此外,我正在使用以下 Excel.Interop 参考资料:

这个,再加上我之前发的Border代码作品:)

再来一个bash?

使用 SpreadsheetLight 和 OpenXML 非常简单:

首先,创建样式:

sl = new SLDocument();
. . .
SLStyle styleBottomBorder = sl.CreateStyle();
styleBottomBorder.Border.BottomBorder.BorderStyle = BorderStyleValues.Thick;
styleBottomBorder.Border.BottomBorder.Color = System.Drawing.Color.Black;

然后将其应用于一行:

sl.SetRowStyle(5, styleBottomBorder);

比 Excel Interop 方式更直观(后者甚至对我不起作用)。

很高兴你成功了。

我会建议使用 OpenXML。我过去曾尝试过几次使用它,但从未实现过使用 Excel.Interop 程序集可以实现的某些功能,因此我不推荐它并赌一下它是否可能或者可能不适合你。

不管怎样,很高兴它起作用了:)