Excel中,有一个很有用的小功能:查看打印A5纸张大小的虚线。 这样就方便用户在编辑大数据量的Excel文件时,知道那些内容是打印在一张A4纸张的,那些内容是打印到另外一张的,非常方便打印需求的用户。
Spread也可以实现这个功能。
首先,换算像素单位:
A4纸张的大小为:21cm × 29.7cm, 我们选择72PPI,则换算为595 Pixels × 842 Pixels的单位。
Spread中的Row、Columns的单位是Pixel像素,这个是计算机显示系统的度量标配,而A4纸张打印用的是厘米cm,故需要有一个转化。 非常巧的是,有一个专门的网站用来参考:http://www.a4papersize.org/
其次, 查找Row\Column Index虚线列表
1: int rowCount = this.fpSpread1.ActiveSheet.RowCount;
2: int colCount = this.fpSpread1.ActiveSheet.ColumnCount;
3:
4: //Row Scan
5: float tempPixels = 0;
6: List<int> rowBorderList = new List<int>();
7: for (int i = 0; i < rowCount; i++)
8: {
9: float pixels = this.fpSpread1.ActiveSheet.GetPreferredRowHeight(i);
10: tempPixels += pixels;
11: if (tempPixels >= height_pixels)
12: {
13: rowBorderList.Add(i);
14: tempPixels = 0;
15: }
16: }
在一个Spread.Sheet页面中,可能会存在n个A4纸张,故用了一个List来进行保存需要划线的个数。
最后,画虚线边框
1: //Border
2: FarPoint.Win.ComplexBorderSide bottomborder = new FarPoint.Win.ComplexBorderSide(Color.Black, 1, DashStyle.Dash);
3:
4: foreach (int item in rowBorderList)
5: {
6: fpSpread1.Sheets[0].Cells[item, 0, item, colCount - 1].Border =
7: new FarPoint.Win.ComplexBorder(null, null, null, bottomborder);
8:
9: }
Row、Column都画完线后,整个工作就99%结束了,但是还存在一个缺陷:Row、Column划线交接的地方,需要补齐虚线,因为先Row再Column的方式把上面的冲掉了。
我们通过如下代码即可实现:
1: foreach (int row in rowBorderList)
2: {
3: foreach (int col in colBorderList)
4: {
5: fpSpread1.Sheets[0].Cells[row, col].Border =
6: new FarPoint.Win.ComplexBorder(null, null, bottomborder, bottomborder);
7: }
8: }
源码下载: