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 = ;
foreach (var range in ranges)
{
if (range.IsSingleCell)
{
continue;
}
var firstRange=range.FromIndex;
//Foreach Rows
for (int i = ; i < range.RowCount; i++)
{
int rowIndex = firstRange.RowIndex+i+ insertRowsCount;
int columnIndex = firstRange.ColumnIndex; int currentRowAddRows = ;
//赋值
for (int j = ; j < range.ColumnCount; j++)
{
var cellValue =sheet.Cells[rowIndex, columnIndex + j].GetValue().Value;
if (string.IsNullOrEmpty(cellValue.RawValue))
{
continue;
}
sheet.Rows.Insert(rowIndex + +currentRowAddRows, ); currentRowAddRows++; sheet.Cells[rowIndex + j, columnIndex].SetValue(cellValue.RawValue);
sheet.Cells[rowIndex, columnIndex + j].SetValue("");
}
//本行单元格复制上行内容 int index = ;
do
{
var upValue = sheet.Cells[rowIndex, index].GetValue().Value;
if (string.IsNullOrEmpty(upValue.RawValue) && index > )
{
break;
} if (index != columnIndex)
{
for (int j = ; j < currentRowAddRows; j++)
{
sheet.Cells[rowIndex + + j, index].SetValue(upValue);
}
}
index++;
} while (true); insertRowsCount += currentRowAddRows;
} }
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这个Telerik控件还是比较方便的。
WPF SpreadSheetGear电子表单的更多相关文章
- OA电子表单设计-年假申请单-数据验证
OA从年初上线到现在已经过去半年了,时光飞逝. 上月底,行政文员找到我,说最近有新来的部门文员填<年假申请单>时,有乱填的情况,让我想办法处理. 我一查还真是,这文员是个男的,同一天给同一 ...
- WPF常规表单验证
1:ViewModel 实现验证接口 IDataErrorInfo 2:实现接口的相关验证逻辑,并把错误信息反馈给 Error public string this[string columnName ...
- Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- 快速创建InfoPath表单
快速创建InfoPath表单 2010年已经过去了一半了,这时候再说初识InfoPath可能会被很多人笑话,但是又有多少人真正认识InfoPath呢?无论你是刚刚 听说这个东西还是它的老相好都请同我一 ...
- python 各种开源库
测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...
- Python 资源大全中文版
Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...
- Sharepoint + Office Infopart + Quick Apps for Sharepoint搭建无纸化工作平台
项目背景: 某大型外企各分部通过互联网专线统一域环境,Exchange邮件系统,Sharepoint平台及依赖环境已经购买并搭建起来,Dell Quick app for Sharepoint已购卖并 ...
- iStylePDF安全电子文档解决方案之电子合同在线订立
交易是商业世界不可或缺的一部分,而签名是交易的凭证.可是,尽管互联网和IT技术已经很发达,但每逢遇到签名,还是得用最原始的方法——握笔写字.与如今走到哪都能听到“互联网+”相比有点不合潮流,通过电子签 ...
- UCanCode发布升级E-Form++可视化源码组件库2015全新版 (V23.01)!
2015年4月. 成都 UCanCode发布升级E-Form++可视化源码组件库2015全新版 (V23.01)! --- 全面性能提升,UCanCode有史以来最强大的版本发布! E-Form++可 ...
随机推荐
- 快速查找sql server中的存储过程和视图
select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped ...
- javascript关于立即函数
以前的知识总是忘,遇到代码又看不懂.要再复习一下,顺便记录一下. 关于立即执行函数: 函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名 ...
- select,epoll,poll比较
介绍和比较 http://www.cnblogs.com/maociping/p/5132583.html 比较 http://www.dataguru.cn/thread-336032-1-1.ht ...
- 【WPF】闲着没事,写了个支持数据列表分页的帮助类
支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实 ...
- Java学习之LinkedHashMap学习总结
前言: 在学习LRU算法的时候,看到LruCache源码实现是基于LinkedHashMap,今天学习一下LinkedHashMap的好处以及如何实现lru缓存机制的. 需求背景: LRU这个算法就是 ...
- 如何修复VUM在客户端启用之后报数据库连接失败的问题
在上一篇随笔中介绍了关于重新注册VMware Update Manager(VUM)至vCenter Server中的方法,最近有朋友反应,原本切换过去好好的更新服务为什么某次使用一下就不灵了? 当时 ...
- OpenNLP:驾驭文本,分词那些事
OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...
- nodejs、npm、grunt——名词解释
最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...
- 匹夫细说C#:从园友留言到动手实现C#虚函数机制
前言 上一篇文章匹夫通过CIL代码简析了一下C#函数调用的话题.虽然点击进来的童鞋并不如匹夫预料的那么多,但也还是有一些挺有质量的来自园友的回复.这不,就有一个园友提出了这样一个代码,这段代码如果被编 ...