你的位置:首页 > ASP.net教程

[ASP.net教程]WPF SpreadSheetGear电子表单


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

View Code

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