我們經常會碰到生成Excel 界面并在其上操作的功能開發。
比如如下界面,我們需要在菜單裡添加一個菜單按鈕“Columns To Rows Transform" 功能是對多列批量轉成多行.

我們可以通過Interop元件,在其中添加菜單附加功能,這個在之後的随筆中我會寫個Demo,供大家檢視。但是這個有點麻煩,每次啟動Excel都需要手動重新注冊Excel環境。
而我們可以通過第三方控件,提供解決方案:
1、安裝Telerik控件
如果友善的話,建議下個Demo。
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出處:
http://www.cnblogs.com/kybs0/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。