视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
.NET读写Excel工具Spire.Xls使用 对数据操作与控制(4)
2020-11-27 22:35:12 责编:小采
文档


Spire.Office for .NET是E-iceblue开发的一种企业级.NET Office编辑的软件集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等等。.NET平台的开发人员可以使用Spire.Office for .NET轻松的操作含有文档编辑功能的应用程序,还可以导出为MS Word/Excel/RTF/Acces、PDF、XPS、HTML、XML等格式,使用Spire.Office,不需要安装Microsoft Office。虽然Spire.Office for .NET是商业产品,但它的每一个基础功能组件都提供了免费版本。可以去官网看看:http://www.e-iceblue.com/。虽然有一些,但简单的东西还是可以试一试。本文介绍的Spire.XLS只是Spire.Office下面的一个操作Excel的组件。

  前一篇文章:“.NET读写Excel工具Spire.Xls使用(3)单元格控制 ”给大家介绍了Spire.XLS的中单元格的格式等控制功能,这篇文章将重点介绍C#操作Excel文件时,对数据的控制。单元格和数据是Excel文件的核心,很难将两者单独分开讲解或者学习,有时候都是交叉的。所以这篇文章的内容有一部分在前一篇文章中其实已经说过了,例如单元格数据的编辑修改,这里就不再重复讲解。

1.Excel行分组显示

  在数据很多的时候,有时候需要进行分组显示,可以隐藏很多细节。在需要的时候再点击看详细的内容,相当于明细表吧。当然可能也不一定是这样。总之就是Excel表的分组功能,就像下面这个样子,注意看 行号 的变化,中间行号的行分组隐藏起来的:

下面看看如何使用Spire.XLS来在程序中设置分组操作,其实也非常简单,这就是商业组件的好处,把功能做到细致,1个函数就实现想要的功能,使用的是sheet对象的GroupByRows方法,如下面例子:

static void ExcelTest6()
{
 Workbook workbook = new Workbook();
 //获取第一个sheet,进行操作,下标是从0开始
 Worksheet sheet = workbook.Worksheets[0];
 sheet.GroupByRows(2, 9, true);//最后1个bool参数是默认是否折叠
 workbook.SaveToFile("Sample.xls", ExcelVersion.Version97to2003);
 System.Diagnostics.Process.Start("Sample.xls");
}

效果如下,把第2-9行分组,默认是折叠的:

2.向单元格快速填充数组

   在前一篇文章中,我们都是直接向单元格写入数据,这个想起来也很繁琐,所以我也会想能不能直接一次性将数组全部写入,这些岂不是更快更方便,代码也更少。在查看Spire.XLS的官方案例的时候,还真发现了这么个功能,非常强大,对于导入数据非常管用:直接在指定位置插入二维数组,批量操作,省去了逐个单元格操作的烦恼。看看下面代码:

static void ExcelTest7()
{
 Workbook workbook = new Workbook();
 workbook.CreateEmptySheets(1);
 Worksheet sheet = workbook.Worksheets[0];

 int maxRow = 10;
 int maxCol = 5;
 //生成测试数据数组
 object[,] myarray = new object[maxRow + 1, maxCol + 1];
 bool[,] isred = new bool[maxRow + 1, maxCol + 1];
 for (int i = 0; i <= maxRow; i++)
 {
 for (int j = 0; j <= maxCol; j++)
 {
 myarray[i, j] = i + j;
 if ((int)myarray[i, j] > 8)
 isred[i, j] = true;
 }
 }
 //将数组插入到sheet中,后面参数是起始的行和列号
 sheet.InsertArray(myarray, 1, 1);

 workbook.SaveToFile("test.xls");
 System.Diagnostics.Process.Start("test.xls");
}

效果如下图所示,截图不完整。。反正就是这个意思,当然你还可以写入其他格式的数据:

3.查找与替换数据

   在处理大量的数据的时候,Excel中sheet的查找与替换是很常见的,平时虽然手动操作比较多,程序操作是怎么样的呢?其实也很简单,对sheet对象进行搜索,使用FindAllXXX方法找到相应的单元格即可,注意XXX代表不同的数据类型,如FindAllBool,FindAllDateTime,FindAllNumber,FindAllString等等。看一个例子演示如何直接进行查找和替换,并修改对应单元格颜色的例子:

CellRange[] ranges = sheet.FindAllString("test", false, false);
//循环找到的单元格
foreach (CellRange range in ranges)
{
 range.Text = "修改后";
 range.Style.Color = Color.Yellow;
}

4.数据过滤器创建与取消

  过滤器是啥玩意,可能一般人不会注意,当然经常使用Excel的人,过滤器是必不可少的。就是将列进行筛选,自动列出选项,然后操作者根据需要选择选项,显示指定条件的数据,相当于一个动态查询的过程吧。Excel的速度很快,很方便,就是下面这种效果:

实际的代码也很简单,如下面的代码,看方法的原型就知道啥意思了。选择表和范围,设置样式就可以了。

Workbook workbook = new Workbook();
workbook.LoadFromFile("test.xlsx");
Worksheet sheet = workbook.Worksheets[0];
//创建过滤器
sheet.ListObjects.Create("Table", sheet.Range[1, 1, sheet.LastRow, sheet.LastColumn]);

sheet.ListObjects[0].BuiltInTableStyle = TableBuiltInStyles.TableStyleLight9;

workbook.SaveToFile("Filter.xlsx", ExcelVersion.Version2010);

当然,有时候也需要取消过滤器,需要过滤器只需要一个下面一个清空操作即可:

sheet.AutoFilters.Clear();

下载本文
显示全文
专题