zoukankan      html  css  js  c++  java
  • 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 = 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控件还是比较方便的。

  • 相关阅读:
    mysql、mongodb、redis区别
    Redis面试题
    【开发提效】开发提效技巧
    【代码规范】16条军规
    mysql数据库连接字符串
    mysql数据库连接字符串
    好用的api接口
    node + express + vue
    跨源资源共享(CORS)
    fehelper
  • 原文地址:https://www.cnblogs.com/kybs0/p/6090660.html
Copyright © 2011-2022 走看看