Excel中,有一个很有用的小功能:查看打印A5纸张大小的虚线。 这样就方便用户在编辑大数据量的Excel文件时,知道那些内容是打印在一张A4纸张的,那些内容是打印到另外一张的,非常方便打印需求的用户。

Excel_Size

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:             }

源码下载: