ReoGridControl的简单使用记录

一、安装

VS版本:2022

ReoGridControl版本:3.0

文档地址:https://reogrid.net/document/getting-started

安装流程:

        VS菜单栏选择 "工具"--->"Nuget包管理器"--->"程序包管理器控制台"

弹出的控制台中输入以下命令:

PM> Install-Package unvell.ReoGrid.dll

或者打开 Nuget解决方案管理器,输入ReoGrid,安装。

使用方法和其它控件一样,拖动就行。

二、Workbook (工作薄)

1.Workbook的一些属性

(1).SheetTabNewButtonVisible属性

就是TAB栏里那个新建sheet的按钮.

SheetTabNewButtonVisible默认为true.如果不想要这个新建sheet按钮。可以在控件属性中,把它设置为false。

代码设置

reogridControl1.SheetTabNewButtonVisible=false;

(2)SheetTabVisible属性

如上图中红色方框里面的那一堆。

 SheetTabVisible默认为true,为false时,如下图

代码设置

reogridcontrol1.SheetTabVisible=false;

2.使用工作表的属性获取父工作薄

var workbook=reoGridControl1.Workbook;

 3.重置工作薄

清除工作薄所有内容,恢复默认状态

reoGridControl1.Reset();

 4.不依赖GUI控件的内存工作薄

(1).创建内存工作薄

var workbook=reogridcontrol1.CreateMemoryWorkbook();

 (2).工作簿保存为Excel文件到下载流

workbook.Save(Response.OutputStream, unvell.ReoGrid.IO.FileFormat.Excel2007);

 参数1,为保存的目标路径。可以是本地路径,也可以是Stream流

参数2,FileFormat枚举。

参数3,Encoding 可选,设置编码格式。

 public enum FileFormat : ushort
 {
     //
     // 摘要:
     //     ReoGrid Format (RGF)
     ReoGridFormat = 1,
     //
     // 摘要:
     //     CSV Plain-text format
     CSV = 10,
     //
     // 摘要:
     //     Excel 2007 (Office OpenXML-based format)
     Excel2007 = 30,
     //
     // 摘要:
     //     Decide file format by extension automatically
     _Auto = 0,
     //
     // 摘要:
     //     User-defined file format provider (Reserved)
     _Custom = 100
 }

(3).EXCEL文件加载到内存

workbook.Load(@"C:\MyTemplate.xlsx", FileFormat.Excel2007);

三、WorSheet (工作表)

1.获取当前激活状态的工作表

var sheet = reoGridControl1.CurrentWorksheet;

2.从索引获取工作表

//numbers of index
var sheet2=reoGridControl1.Worsheets[0];
//strings of index
var sheet2=reoGridControl1.Worksheets["Sheet2"];

 3.创建工作表

var newsheet=reoGridControl1.CreateWorksheet();
var newsheet=reoGridControl1.CreateWorksheet('newsheets');

4.指定位置添加插入工作表

(1).Worksheets插入

reoGridControl1.Worksheets.Add(sheet);
reoGridControl1.Worksheets.Insert(1,sheet);

 (2).reogridcontrol插入

reoGridControl1.AddWorksheet(sheet);
reoGridControl1.InsertWorksheet(1,sheet);

参数解释:

sheet参数,WorkSheet类

InsertWorksheet中的第一个参数为索引。需要插入的位置。

5.复制工作表到另一个工作表

(1) CopyWorksheet复制

   在同一个工作薄之间的多个工作表之间复制

public Worksheet CopyWorksheet(int index, int newIndex, string newName = null);

 参数1,被复制的工作表的索引

参数2,目标的工作表的索引

参数3,可选。不填写时为null.可填写,生成新表的名称。

返回一个新的工作表实例

示例:

var newsheet=reoGridControl1.CopyWorksheet(0,1,"mysheet");
var newsheet=reoGridControl1.CopyWorksheet("sheet1",3);

(2).不同工作薄之间的工作表数据复制

只复制数据,不包含columnHeaders和RowHeaders的复制

//工作薄1表实例
var sheet1=reoGridControl1.WorkSheets[0];
//工作薄2表实例
var sheet2=reoGridControl2.WorkSheets[0];

//选择整个cell范围
 sheet1.SelectAll();

//执行复制
 sheet1.Copy();

//工作薄2的工作表执行粘贴
 sheet2.Paste();

//SelectAll之后,两个表的Select状态都是整个表范围,可以恢复到默认位置(A1)

//sheet1.SelectionRange = new RangePosition(0,0,1,1);
sheet1.SelectionRange = new RangePosition("A1:A1");//同上效果

//sheet2.SelectionRange = new RangePosition(0,0,1,1);
sheet2.SelectionRange = new RangePosition("A1:A1");//同上效果


6.移动工作表

reoGridControl1。MoveWorksheet(0,3);

参数1,移动的起始索引位置

参数2,移动的最终索引位置

索引从0开始,第一个即为0。

如上示例代码,从第一个位置移动到第四个位置。

7.获取工作表索引位置

int index=reoGridControl1.GetWorksheetIndex("sheet2");

8.重置工作表

sheet.Reset();

9.工作表异常 Index was out of range

下图是一个触发了 Index was out of range.Must be non-negative and less

这个时候,就算点继续,加载多少次新数据进去都没有,红叉还是那个红叉。

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
   at unvell.ReoGrid.Views.CellsViewport.GetScaledAndClippedRangeRect(IViewport view, CellPosition startPos, CellPosition endPos, Single borderWidth)
   at unvell.ReoGrid.Views.CellsViewport.DrawSelection(CellDrawingContext dc)
   at unvell.ReoGrid.Views.Viewport.Draw(CellDrawingContext dc)
   at unvell.ReoGrid.Views.View.DrawChildren(CellDrawingContext dc)
   at unvell.ReoGrid.Views.Viewport.Draw(CellDrawingContext dc)
   at unvell.ReoGrid.Views.View.DrawChildren(CellDrawingContext dc)
   at unvell.ReoGrid.Views.ViewportController.Draw(CellDrawingContext dc)
   at unvell.ReoGrid.Views.NormalViewportController.Draw(CellDrawingContext dc)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
   at System.Windows.Forms.Control.WmPaint(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at unvell.ReoGrid.ReoGridControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
省略一堆加载的程序......

************** JIT 调试 **************


 这是在重复加载工作表时,上一个表的FocusPos的位置还留在上一次选中的CellPosition.即使sheet.Reset(),但FocusPos并不会恢复默认状态(默认值为"A1")。

如:

A表的行列为[20,13],习惯性的手动去点了一个单元格,它位置"B20"。

A表此时FocusPos=“B20”

使用Reset()后,再加载B表,行列为[15,10],FocusPos就不在有效范围。

对这个控件没研究到位,文档看得眼花撩乱,目前自己想到的就是在Reset()工作表后,手动恢复FocusPos到默认状态。

reoGridControl.Worksheets[0].FocusPos=new CellPosition("A1");

 10.SetRangeStyle

public void SetRangeStyles(RangePosition range, WorksheetRangeStyle style);

参数1,RangePsition。控件中用得最多的类。用于确定范围。

参数2,WorksheetRangeStyle类。

示例:

sheet.SetRangeStyles(new RangePosition(0, 0, sheet.RowCount, 1), new WorksheetRangeStyle {
    Flag = PlainStyleFlag.BackAll,
    BackColor = Color.CornflowerBlue,
});

四、RowHeader和ColumnHeader

1.RowHeader

(1).获取行标头实例

var rowheader=reogridcontrol.Worksheets[0].RowHeaders[1];

RowHeaders索引从0开始

(2).设置文本

默义是行标号。可以修改成需要的文本

RowHeader.Text="simple";

(3).设置宽度

//width
sheet.RowHeaderWidth=100;

 (4).设置高

SetRowsHeight()实现

public void SetRowsHeight(int row, int count, ushort height);
//row:起始位置,索引从0开始
//count:即表的行数
//height:需要设置的高度

sheet.SetRowsHeight(0,20,(ushort)100);
//参数1为0,表示从第一行开始
//参数2为表行数。参数3为ushort类型

IsAutoHeight自动适应高

sheet.RowHeaders[1].IsAutoHeight=true;

AutoFitRowHeight 

sheet.AutoFitRowHeight(0, false);

参数2,false表示不执行DoAction.

(5).隐藏指定索引行

var rowheader=sheet.RowHeaders[2];
rowheader.IsVisible=false;

 文档中属性为IsHide.在这个3.0版本中为IsVisible.为false时隐藏该行.

(6).隐藏行标头

sheet.SetSetting(WorksheetSettings.View_ShowRowHeader,false);

 参数二为false时隐藏,true显示

2.ColumnHeader

(1).获取列标头实例

var colheader=sheet.ColumnHeader[1];

(2).设置列标头名称

colheader.Text="Numbers";

(3).列标头宽

colheader.Width=(ushort)150;

(4).IsAutoWidth自适应宽

colheader.IsVisible=true;

 (5).FitWidthToCell

colheader.FitWidthToCell(false);

 参数false为不使用DoAction。              

(6).获取索引位置

int index=colheader.Index;

(7).隐藏指定列

colheader.IsVisible=false;

false时隐藏。

(8).隐藏列标头

sheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, false);

(9).获取ColumnsHeader的Text

var gt=sheet1.ColumnHeaders.GetEnumerator();


while(true)
{
    bool isok=gt.MoveNext();
    if(isok==false)
    {
        break;
    }
    //表sheet2设置为sheet1的ColumnHeaders
    sheet2.ColumnHeaders[gt.Current.Index].Text=gt.Current.Text;
}

 (10).ColumnHeaders的Text不是索引

        刚接触时这个组件时,就有这个想法,但事实上它没有实现。

        

       例如尝试去获取test1的A2位置的cell,下例代码为错误的示例。

//得到第一列的ColumnHeaders的Text为test1
var a1=sheet.ColumnHeaders[0].Text;

//获取第一列第二行的第一个cell,即A2
string strindex=a1+"2";
//尝试获取A2的Cell
var cell2=sheet[strindex];

这样就发发生一个错误的异常,报错如下: 

 unvell.ReoGrid.InvalidAddressException: unrecognized identifier to locate cell or range: test12

五、Rows和Columns

1.设置和获取行列数和获取

sheet.Resize(20,5);
//参数1 rows
//参数2 columns
sheet.SetRows(20);
sheet.SetCols(5);


int rows=sheet.Rows;
int cols=sheet.Columns;

rows=sheet.RowCount;
cols=sheet.ColumnCount;

记!

有一个问题,Rows,Columns和RowCount,ColumnCount的值是一样的。

刚获取一个worksheet实例时,因为没有载入任何数据。这时,就会想到这样做:

if(sheet.RowCount==0)
{
    //执行判断
}

但是会发现, 它不成立。因为RowCount默认值竟然不是0,而是200。没错。就是200。

2.设置行列width和height

sheet.SetColumnWidth(0,15,150);
//参数1,指定起始列的索引位置,0为第一列开始
//参数2,表示列的总数
//参数3,宽数值,ushort类型

sheet.SetRowsHeight(0,10,(ushort)80);
//参数1,指定起始行的索引位置,0为第一行开始
//参数2,表示行的总数
//参数3,宽数值,ushort类型


//指定索引列宽
sheet.ColumnHeaders[0].Width=(ushort)200;

//指定索引行高
sheet.RowHeaders[1].Height=(ushort)100;

3.插入行和列

//插入行列
InsertRows(int row,int count);
InsertColumns(int col,int count);

//参数1,行的起始索引行或列的起始索引列
//参数2,需要插入的行数或列数

示例
//在第一行处插入一行
sheet.InsertRows(0,1);

//在第一列处插入一列
sheet.Insertolumns(0,1);

文档建议不用上面的代码。

而是建议使用DoAction来插入行列,原因是性能比上面的代码要优势

var insertColAction = new unvell.ReoGrid.Actions.InsertColumnsAction(0, 1);  
reogridcontrol1.DoAction(insertColAction);


var insertrowAction=new unvell.ReoGrid.Actions.InsertRowsAction(0,1);
reogridcontrol1.DoAction(insertrowAction);

六、Cell和数据加载

1.CellPosition实例

//行列索引创建cellpostion实例
var cellA1=new CellPosition(0,0);
//获取该单元格地址
string AddressName=cellA1.ToAddress();


//地址索引创建cellpostion实例
var cellA1=new CellPosition("A5");

//检查地址是否有效
CellPosition.IsValidAddress("D3");
CellPosition.IsValidAddress("D3:d5");
CellPosition.IsValidAddress("MYRANGE");

2.单元格数据设置

sheet["A1"]=10;
sheet[0,0]=10;
sheet[new CellPosition("A1")]=10;
sheet[new cellPostion(0,0)]=10;

//通过范围名称添加单元格数据
sheet.DefineNamedRange("mycell",new RangePosition("A1"));
sheet["mycell"]=10;


//自定义数据类型的数据
public class MYDATA
{
    public override string ToString()
    {
        return "mydata";
    }
}

sheet["D1"]=new MYDATA();

3.SetRangeData添加数据

(1).SetRangeData方法

public void SetRangeData(RangePosition range, DataTable table);

public void SetRangeData(RangePosition range, Object data);

参数1,设置需要接收数据的范围

参数2,datatable表,或者object数组

(2).Datatable或数组直接导入

Datatable newdata=DataBase.GetData();
sheet.SetRangeData(new RangePosition(0, 0, rowscounts, columncounts), newdata);


Object[] objdatas=new object[]{"A","B","C"};
sheet.SetRangeData(new RangePosition(0, 0, 1, 3), objdatas);

Object[,] objdata=new Object[,]{{"A","B","C"},{2,3,4},{'d','e','f'}};
sheet.SetRangeData(new RangePosition(0, 0, 3, 3), objdata);


List<Object> list=objdatas.ToList();
sheet.SetRangeData(new RangePosition(0, 0, 1, 3), list);

(3).RangePostion

设置接收数据或获取籹据的范围

public RangePosition(int row, int col, int rows, int cols);

参数1,起始行

参数2,起始列

参数3,行数

参数4,列数

返回RangePosition

RangePostion pos=new RangePostion(0,0,10,5);

4.GetRangeData获取数据

var objectarray=sheet.GetRangeData(new RangePosition(0, 0, rowscounts, columncounts));

SetRangeData和GetRangeData混合使用

shee2.Worksheets[0].SetRangeData(new RangePosition(0, 0, rowscounts, columncounts), sheet.GetRangeData(new RangePosition(0, 0, rowscounts, columncounts)));

5.Ranges实例和数据

(1).Ranges实例获取指定范围的单元格数据集合

 var sheet = reoGridControl1.CurrentWorksheet;
//获取Range的引用实例
var tt=sheet.Ranges["B2:D3"];

//获取B2:D3的所有数据,并转换为List<Cell>
var ll=tt.Cells.ToList();

//遍历示例
 tt.ForEach(cell =>
 {
    //cell.DisplayText即单元格的实例数据。
     textBox1.AppendText(cell.DisplayText + "\r\n");
 });

 如上面代码结果为:

12
13
14
22
23
24

(2).Ranges和RangePosition更方便

像sheet.Ranges["B2:D3"]; 并不怎么好使用,特别在代码实现中,要先取得B2和D3很不方便.

不如RangePosition来设置范围索引更效率和方便。因此上面的代码可以改一改。

  var sheet = reoGridControl1.CurrentWorksheet;
  var tt=sheet.Ranges[new RangePosition(1,1,2,3)].Cells.ToList();
  tt.ForEach(cell =>
  {
      textBox1.AppendText(cell.DisplayText + "\r\n");
  });

上面的sheet.Ranges[new RangePosition(1,1,2,3)].Cells。将返回一个Cells集合。Cell的DisplayText可以取得想要的数值。

除了Cells,还有Data,但Data返回的是Object[ , ] 

这和Cells返回的类型不一样,但是同样可以取得想要的数值。

 var sheet = reoGridControl1.CurrentWorksheet;
 object[,] tt = (object[,]) sheet.Ranges[new RangePosition(1, 1, 2, 3)].Data;

foreach (object o in tt) 
 {
     textBox1.AppendText(o.ToString() + "\r\n");
 }

 (3).Ranges取得地址

 var sheet = reoGridControl1.CurrentWorksheet;
 var tt = sheet.Ranges[new RangePosition(1, 1, 2, 3)].Position.ToAddress();
//结果为:
//B2:D3

 花里胡哨的操作

var tt = sheet.Ranges[new RangePosition(0,1,1,1)].Position.ToAddress();
//取第一行第二列的单元格的地址
//结果为:
//B1:B1

(3).Ranges实例的一些属性 

  • StartPos:单元格起始位置
var tt = sheet1.Ranges[new RangePosition(0,1,sheet1.RowCount,1)];

var ss = tt.StartPos;
//"B1"

tt.StartPos=new CellPosition(1,1);
//设置为B2

  • EndPos:单元格结束位置。同上。
  •  Row和Col: 以0为基础的行数或列数,用于定位或设置此范围的起始位置。
  • EndRow和EndCol:获取或设置最后一行或最后一列.
  • Rows和Cols:获取或设置行数或列数
var sheet1 = reoGridControl1.Worksheets[0];
var tt = sheet1.Ranges[new RangePosition(1, 1, sheet1.RowCount, 1)];
var st=tt.StartPos;
var et=tt.EndPos;
var rt = tt.Row;
var ct = tt.Col;
var rts = tt.Rows;
var cts = tt.Cols;
var er = tt.EndRow;
var cr=tt.EndCol;

(4).Ranges的一些方法

  • GroupColumns() :对指定的列进行分组。
  • UnGroupColumns():取消分组
var sheet1 = reoGridControl1.Worksheets[0];
var tt = sheet1.Ranges[new RangePosition(1, 1, sheet1.RowCount, 1)];
tt.GroupColumns();

 

  •  GroupRows():范围内所有行分组
  • UngroupRows() :取消分组
var sheet1 = reoGridControl1.Worksheets[0];
var tt = sheet1.Ranges[new RangePosition(1, 0, 2, 2)];
tt.GroupRows();

 

  • IntersectWith(RangePosition) : 判断指定范围是否与Ranges实例的范围相交。如果相交,返回true。
 var sheet1 = reoGridControl1.Worksheets[0];
 var tt = sheet1.Ranges[new RangePosition(1, 0, 2, 2)];

 var iscontain=tt.IntersectWith(new RangePosition(1,1,3,3));
//结果为true
  • Merge();指定范围内的单元格进行合并 
  • Unmerge();取消合并
var sheet2 = reoGridControl2.Worksheets[0];
var tt = sheet2.Ranges[new RangePosition(1, 0, 2, 2)];
tt.Merge();

 (5)UsedRange取有效范围

一些UsedRange的相关操作

var range1=sheet.UsedRange;
//[10,10]的表中,可以得到有效范围为:
// A1:J10

string ss=range1.ToAddress();
// 取得地址:"A1:J10"

//起始索引位置
int startrow=sheet.UsedRange.Row;
int startcol=sheet.UsedRange.Col;


//结束索引位置
int endrow=sheet.UsedRange.EndRow;
int endcol=sheet.UsedRange.EndCol;

//判断这个表是否只有一个单元格,即rows=1,columns=1
var yy = sheet.UsedRange.IsSingleCell;

//判断此范围是否完整的行和列
var yy = sheet.UsedRange.IsEntire;

//检查指定的列是否在这个有效范围里面
var yy = sheet.UsedRange.ContainsColumn(11);

//检查指定的行是否在这个有效范围里面
var yy = sheet.UsedRange.ContainsRow(11);

6.合并单元格

方法有:

MergeRange

UnmergeRange

MergeRangeAction

UnmergeRangeAction

var sheet = reoGridControl1.CurrentWorksheet;

//参数地址索引
sheet.MergeRange("A1:D3");

//参数为RangePostion
sheet.MergeRange(new RangePosition(0,0,3,3));

//使用Ranges实例的Merge方法
sheet.Ranges["A1:D3"].Merge();


//UnMergeRange使用方法同上



//使用DoAction
sheet.DoAction(new MergeRangeAction("A1:D3"));
sheet.DoAction(new UnmergeRangeAction("A1:D3"));

检查合并后的单元格是否为有效单元格,合并后只有左上角那一个单元格是有效的,其它全无效。

sheet.IsMergedCell(2, 2);

七、样式

1.边框样式

(1).SetRangeBorders

public void SetRangeBorders(RangePosition range, BorderPositions pos, RangeBorderStyle style);

参数

  • range:RangePostion类型,选择的区域范围.
  • pos:  BorderPostions枚举类型,范围内单元格的边框位置。
  • style: unvell.ReoGrid.RangeBorderStyle 。struct类型,指边框样式;两个私有成员BorderLineStyle和SolidColor,可用来设置样式。

 (2).参数2:BorderPostions成员

public enum BorderPositions : short
{
    //
    // 摘要:
    //     No border
		//无边框
    None = 0,
    //
    // 摘要:
    //     Top border inside range or cell
		//顶部边框
    Top = 1,
    //
    // 摘要:
    //     Bottom border inside range or cell
		//底部边框
    Bottom = 2,
    //
    // 摘要:
    //     Left side border inside range or cell
		//左侧边框
    Left = 4,
    //
    // 摘要:
    //     Right side border inside range or cell
		//右部边框
    Right = 8,
    //
    // 摘要:
    //     Horizontal borders inside range or cell
		//水平边框
    InsideHorizontal = 0x10,
    //
    // 摘要:
    //     Vertical borders inside range or cell
		//垂直边框
    InsideVertical = 0x20,
    //
    // 摘要:
    //     Slash lines inside cell (Reserved)
		//单元格内的斜线(保留)
    Slash = 0x100,
    //
    // 摘要:
    //     Backslash lines inside cell (Reserved)
		//单元格内的反斜线(保留)
    Backslash = 0x200,
    //
    // 摘要:
    //     Borders in left and right side in range or cell
		//区域或单元格的左右边框
    LeftRight = 12,
    //
    // 摘要:
    //     Borders in top and bottom in range or cell
		//区域或单元格中顶部和底部的边框
    TopBottom = 3,
    //
    // 摘要:
    //     Borders around range or cell
		//范围或单元格周围的边界
    Outside = 0xF,
    //
    // 摘要:
    //     Horizontal and vertical borders inside range or cell
		//区域或单元格内的水平和垂直边框
    InsideAll = 48,
    //
    // 摘要:
    //     All borders belong to range or cell
		// 所有的边界都属于范围或单元格
    All = 0x3F,
    //
    // 摘要:
    //     Cross line in single cell (Both Slash and Backslash, Reserved)
		//单个单元格中的横线(斜线和反斜线,保留)
    X = 768
}

(3).unvell.ReoGrid.RangeBorderStyle介绍

private BorderLineStyle style;

private SolidColor color;

(4).RangeBorderStyle成员BorderLineStyle介绍

//
 // 摘要:
 //     Line style of border.
//线条样式的边框。
 public enum BorderLineStyle : byte
 {
     //
     // 摘要:
     //     None border
		//没有边框
     None,
     //
     // 摘要:
     //     Solid border
		//固体边界
     Solid,
     //
     // 摘要:
     //     Dotted border
		//虚线边框
     Dotted,
     //
     // 摘要:
     //     Dashed border
     Dashed,
     //
     // 摘要:
     //     Double line border (not supported in WPF version)
		//双线边框(WPF版本不支持)
     DoubleLine,
     //
     // 摘要:
     //     Dashed (style 2) border (not supported in WPF version)
		//虚线(样式2)边框(在WPF版本中不支持)
     Dashed2,
     //
     // 摘要:
     //     Dashed (style 3) border
		//虚线(样式3)边框
     DashDot,
     //
     // 摘要:
     //     Dashed (style 4) border
		//虚线(样式4)边框
     DashDotDot,
     //
     // 摘要:
     //     Bold dashed (style 2) border
		//粗体虚线(样式2)边界
     BoldDashDot,
     //
     // 摘要:
     //     Bold dashed (style 3) border
		//粗体虚线(样式3)边界
     BoldDashDotDot,
     //
     // 摘要:
     //     Bold dashed border
		//粗体虚线边框
     BoldDashed,
     //
     // 摘要:
     //     Bold dotted border
		//粗体虚线边框
     BoldDotted,
     //
     // 摘要:
     //     Bold solid border
		//粗体实边
     BoldSolid,
     //
     // 摘要:
     //     Strong solid border (Bold x2)
		//强实心边框(粗体x2)
     BoldSolidStrong
 }

(5)示例:

var sheet1 = reoGridControl1.Worksheets[0];
//第一列所有行数,水平边框,设置为双条线,颜色为蓝色
sheet1.SetRangeBorders(new RangePosition(0,0,sheet1.RowCount,1), BorderPositions.InsideHorizontal, new unvell.ReoGrid.RangeBorderStyle
{
    
    Style=BorderLineStyle.DoubleLine,
    Color =Color.Blue,
});

注意,第三个参数中,style和color为unvell.ReoGrid.RangeBorderStyle的私有成员。

效果图如下

 注:发现垂直边框没生效。

var sheet1 = reoGridControl1.Worksheets[0];
//第一列所有行数,垂直边框,设置为双线边框,颜色蓝色
sheet1.SetRangeBorders(new RangePosition(0,0,sheet1.RowCount,1), BorderPositions.InsideVertical, new unvell.ReoGrid.RangeBorderStyle
           {
               
               Style=BorderLineStyle.DoubleLine,
               Color =Color.Blue,
           });

如图

 把边框位置参数改成LeftRight,它就生效了。

var sheet1 = reoGridControl1.Worksheets[0];
//第一列所有行数,左右边框位置,设置为双线边框,颜色蓝色
sheet1.SetRangeBorders(new RangePosition(0,0,sheet1.RowCount,1), BorderPositions.LeftRight, new unvell.ReoGrid.RangeBorderStyle
           {
               
               Style=BorderLineStyle.DoubleLine,
               Color =Color.Blue,
           });

 

(6).Ranges实例设置边框样式

  • Border.Outside
var sheet2 = reoGridControl2.Worksheets[0];
var tt = sheet2.Ranges[new RangePosition(1, 0, 2, 2)];
tt.Border.Outside=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

  • Boder.Inside

BorderInsideAll 同上

var sheet2 = reoGridControl2.Worksheets[0];
var tt = sheet2.Ranges[new RangePosition(1, 0, 2, 2)];
tt.Border.Inside=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

 

  • BorderInsideHorizontal
var tt = sheet2.Ranges[new RangePosition(1, 1, 3, 3)];
tt.BorderInsideHorizontal=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

  •  BorderInsideVertical
var tt = sheet2.Ranges[new RangePosition(1, 1, 3, 3)];
tt.BorderInsideVertical=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

 

  • Border.Right

BorderRight同上

var tt = sheet2.Ranges[new RangePosition(1, 0, 2, 2)];
tt.Border.Right=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

  •  Border.Left

BorderLeft 同上

var tt = sheet2.Ranges[new RangePosition(1, 1, 2, 2)];
tt.Border.Left=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

 

  • Border.Top

BorderTop同上

var tt = sheet2.Ranges[new RangePosition(1, 1, 2, 2)];
tt.Border.Top=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

 

  • Border.Bottom 

BorderBottom同上 

var tt = sheet2.Ranges[new RangePosition(1, 1, 2, 2)];
tt.Border.Bottom=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

  • Border.All

BorderAll同上

var tt = sheet2.Ranges[new RangePosition(1, 1, 2, 2)];
tt.Border.All=new RangeBorderStyle { Style = BorderLineStyle.DoubleLine, Color = Color.Blue };

 

2.单元格样式

(1).SetRangeStyle

public void SetRangeStyles(string addressOrName, WorksheetRangeStyle style)
public void SetRangeStyles(RangePosition range, WorksheetRangeStyle style)

也可以用DoAction中的SetRangeStyleAction方法,方便撤消或者重做该操作

sheet.DoAction(new SetRangeStyleAction(RangePosition range, WorksheetRangeStyle styleSet));

 

参数

string addressOrName: 地址名称,或者范围地址

 WorksheetRangeStyle style: 样式类,单元格字体,颜色,以及背景颜色等样式设置

(2).WorksheetRangeStyle类的属性

<1>.获取或设置样式标志,该标志指示此样式中包含哪些样式
PlainStyleFlag Flag

 

<2>.获取或设置背景颜色
SolidColor BackColor
<3>.获取或设置背景图案颜色。在设置图案颜色或图案样式时,还应设置背景色。
SolidColor FillPatternColor
<4>.获取或设置背景图案样式。在设置图案颜色或图案样式时,还应设置背景色。
HatchStyles FillPatternStyle
<5>.获取或设置文本颜色
SolidColor TextColor
 <6>.获取或设置文本名称
string FontName
 <7>.获取或设置文本尺寸
float FontSize
<8>.获取或者设置粗体样式
bool Bold
<9>.获取或设置斜体样式
bool Italic
<10>.获取或设置划线样式
bool Strikethrough
<11>.获取或者设置下划线样式
bool Underline
<12>.获取或者设置水平对齐
ReoGridHorAlign HAlign
 <13>.获取或者设置垂直对齐
ReoGridVerAlign VAlign
<14>.获取或设置文本换行模式
TextWrapMode TextWrapMode
<15>.获取或设置文本缩进(0-65535)
ushort Indent
 <16>.获取或设置单元格的填充。
PaddingValue Padding
<17>.获取或设置旋转角度。
float RotationAngle

 (3)示例

 

sheet1.SetRangeStyles(new RangePosition(0,0,10,1), new WorksheetRangeStyle()
{
    Flag = PlainStyleFlag.BackColor|PlainStyleFlag.TextColor,
    TextColor=Color.Yellow,
    BackColor = Color.Chocolate,
    HAlign=ReoGridHorAlign.Right,
});

 

(4).Range设置文本样式

Ramges实例的Style样式

var tt = sheet1.Ranges[new RangePosition(1, 1, 3, 3)];
tt.Style.TextColor = Color.White;
tt.Style.BackColor = Color.Chocolate;

 (5).Cell实例的Style样式

var ss = sheet1.Cells["B2"];
ss.Style.TextColor= Color.Chocolate;
ss.Style.BackColor= Color.Red;

后记

ReoGridControl表导入数据是很快的。添加数据不要在循环中一个一个添加,这样会导致效率很差。应该使用SetRangeData一次性的导入所有数据。速度会非常快,特别是大数据导入。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值