0
点赞
收藏
分享

微信扫一扫

WPF SpreadSheetGear电子表单

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

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

WPF SpreadSheetGear电子表单_官网

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

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

SpreadSheetGear电子表单,官网下载地址:https://www.spreadsheetgear.com/support/samples/asp.net.aspx。

 官网的SpreadSheetGear样式不怎么好看。所以推荐使用Telerik第三方控件~

1、安装Telerik控件

   如果方便的话,建议下个Demo。

WPF SpreadSheetGear电子表单_第三方控件_02

 

2、通过VS中的Telerik新建一个Telerik项目。新建会有模板选项,还是比较方便的

WPF SpreadSheetGear电子表单_SpreadSheetGear_03

3、添加菜单按钮

WPF SpreadSheetGear电子表单_第三方控件_04

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

 

​作者:唐宋元明清2188

本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。




举报

相关推荐

0 条评论