WPF SpreadSheetGear电子表单
我们经常会碰到生成Excel 界面并在其上操作的功能开发。
比如如下界面,我们需要在菜单里添加一个菜单按钮“Columns To Rows Transform" 功能是对多列批量转成多行.
我们可以通过Interop组件,在其中添加菜单附加功能,这个在之后的随笔中我会写个Demo,供大家查看。但是这个有点麻烦,每次启动Excel都需要手动重新注册Excel环境。
而我们可以通过第三方控件,提供解决方案:
SpreadSheetGear电子表单,官网下载地址:https://www.spreadsheetgear.com/support/samples/asp.net.aspx。
官网的SpreadSheetGear样式不怎么好看。所以推荐使用Telerik第三方控件~
1、安装Telerik控件
如果方便的话,建议下个Demo。
2、通过VS中的Telerik新建一个Telerik项目。新建会有模板选项,还是比较方便的
3、添加菜单按钮
4、在后台添加事件处理即可。

private void ColumnsAndRowsTransformButton_OnClick(object sender, RoutedEventArgs e) { try { var workbook = viewModel.Workbook; var sheet = workbook.ActiveWorksheet; var ranges = sheet.ViewState.SelectionState.SelectedRanges; int insertRowsCount = 0; foreach (var range in ranges) { if (range.IsSingleCell) { continue; } var firstRange=range.FromIndex; //Foreach Rows for (int i = 0; i < range.RowCount; i++) { int rowIndex = firstRange.RowIndex+i+ insertRowsCount; int columnIndex = firstRange.ColumnIndex; int currentRowAddRows = 0; //赋值 for (int j = 1; j < range.ColumnCount; j++) { var cellValue =sheet.Cells[rowIndex, columnIndex + j].GetValue().Value; if (string.IsNullOrEmpty(cellValue.RawValue)) { continue; } sheet.Rows.Insert(rowIndex + 1+currentRowAddRows, 1); currentRowAddRows++; sheet.Cells[rowIndex + j, columnIndex].SetValue(cellValue.RawValue); sheet.Cells[rowIndex, columnIndex + j].SetValue(""); } //本行单元格复制上行内容 int index = 0; do { var upValue = sheet.Cells[rowIndex, index].GetValue().Value; if (string.IsNullOrEmpty(upValue.RawValue) && index > 50) { break; } if (index != columnIndex) { for (int j = 0; j < currentRowAddRows; j++) { sheet.Cells[rowIndex +1 + j, index].SetValue(upValue); } } index++; } while (true); insertRowsCount += currentRowAddRows; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
这个Telerik控件还是比较方便的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)