博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF SpreadSheetGear电子表单
阅读量:5011 次
发布时间:2019-06-12

本文共 3207 字,大约阅读时间需要 10 分钟。

 我们经常会碰到生成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);            }        }
View Code

这个Telerik控件还是比较方便的。

 

转载于:https://www.cnblogs.com/kybs0/p/6090660.html

你可能感兴趣的文章
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>
.net 常用正则表达式
查看>>
Java泛型中的标记符含义:
查看>>
初遇GitHub
查看>>
[C# 网络编程系列]专题八:P2P编程
查看>>
Jsの练习-数组常用方法 -forEach()
查看>>
动态绑定treeview的方法
查看>>
jvm参数
查看>>
3-1 案例环境初始化
查看>>
读《构建之法》第四章和十七章有感
查看>>
01背包
查看>>
开发一个12306网站要多少钱?技术分析12306合格还是不合格
查看>>
Selenium 入门到精通系列:六
查看>>
HTTP与TCP的区别和联系
查看>>
android 实现2张图片层叠效果
查看>>