一、安装
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一次性的导入所有数据。速度会非常快,特别是大数据导入。