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++可 ...
随机推荐
- javascript中的浮点数运算
解释一下下面代码的输出 console.log(0.1 + 0.2); //0.30000000000000004 console.log(0.1 + 0.2 == 0.3); //false Jav ...
- Java发展历史
1991年1月 Sun公司成立了Green项目小组,专攻智能家电的嵌入式控制系统 1991年2月 放弃C++,开发新语言,命名为"Oak" 1991年6月 JamesGosling ...
- Hadoop Shell命令大全
hadoop支持命令行操作HDFS文件系统,并且支持shell-like命令与HDFS文件系统交互,对于大多数程序猿/媛来说,shell-like命令行操作都是比较熟悉的,其实这也是Hadoop的极大 ...
- React中使用Ant Table组件
一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启 ...
- 自动绘图AI:程序如何画出动漫美少女
序 全新的图形引擎与AI算法,高效流畅地绘出任何一副美丽的图像. IDE:VisualStudio 2015 Language:VB.NET/C# Graphics:EDGameEngine 第一节 ...
- 基于HTML5 Canvas 实现矢量工控风机叶轮旋转
之前在拓扑上的应用都是些静态的图元,今天我们将在拓扑上设计一个会动的图元--叶轮旋转. 先看看最后我们实现的效果:http://www.hightopo.com/demo/fan/index.html ...
- Spark 入门
Spark 入门 目录 一. 1. 2. 3. 二. 三. 1. 2. 3. (1) (2) (3) 4. 5. 四. 1. 2. 3. 4. 5. 五. Spark Shell使用 ...
- Centos下搭建 tomcat https服务器详解(原创)
一 .安装java jdk配置环境变量 1. 卸载原有openjdk yum -y remove java-1.7.0-openjdk* yum -y remove tzdata-java.noarc ...
- 解决phalcon model在插入或更新时会自动验证非空字段
在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存 ...
- 多线程并发同一个表问题(li)
现有数据库开发过程中对事务的控制.事务锁.行锁.表锁的发现缺乏必要的方法和手段,通过以下手段可以丰富我们处理开发过程中处理锁问题的方法.For Update和For Update of使用户能够锁定指 ...