我們經常會碰到生成Excel 界面併在其上操作的功能開發。 比如如下界面,我們需要在菜單里添加一個菜單按鈕“Columns To Rows Transform" 功能是對多列批量轉成多行. 我們可以通過Interop組件,在其中添加菜單附加功能,這個在之後的隨筆中我會寫個Demo,供大家查看。但是這 ...
我們經常會碰到生成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控制項還是比較方便的。