WPF SpreadSheetGear电子表单

2016-11-22 19:06:45来源:cnblogs.com作者:WinterFish人点击

 我们经常会碰到生成Excel 界面并在其上操作的功能开发。

比如如下界面,我们需要在菜单里添加一个菜单按钮“Columns To Rows Transform" 功能是对多列批量转成多行.

我们可以通过Interop组件,在其中添加菜单附加功能,这个在之后的随笔中我会写个Demo,供大家查看。但是这个有点麻烦,每次启动Excel都需要手动重新注册Excel环境。

 而我们可以通过第三方控件,提供解决方案:

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控件还是比较方便的。

 

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台