Я хотел бы ускорить процесс удаления столбцов в Excel. У меня есть 2 файла Excel. Допустим, файл данных, где все данные существуют, и имена удаляемых столбцов в другом файле. В файле данных содержится много рабочих таблиц, некоторые из которых содержат более 15000 столбцов и около 2500 строк при удалении файла столбцов. Удаление занимает больше времени. Мой вопрос, как я мог ускорить код ниже?
private void workerdelete_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
try
{
totalRow = xlWorksheetdelvariable.UsedRange.Rows.Count;
Excel.Range startCell = xlWorksheetdelvariable.Cells[2, 1];
Excel.Range endCell = xlWorksheetdelvariable.Cells[totalRow, 1];
Excel.Range currentRange = xlWorksheetdelvariable.get_Range(startCell, endCell).Cells;
object[,] matrixReaddelvariable = (object[,])currentRange.Value;
foreach (Excel.Worksheet sheet in xlWorkbookDelete.Sheets)
{
xlWorksheetdelete = xlWorkbookDelete.Sheets[sheet.Index];
columnCount = xlWorksheetdelete.UsedRange.Columns.Count;
int rowCount = xlWorksheetdelete.UsedRange.Rows.Count;
Excel.Range startCelldelete = xlWorksheetdelete.Cells[1, 1];
Excel.Range endCelldelete = xlWorksheetdelete.Cells[1, columnCount];
Excel.Range currentRangedelete = xlWorksheetdelete.get_Range(startCelldelete, endCelldelete).Cells;
object[,] matrixReaddelete = (object[,])currentRangedelete.Value;
List<int> delCols = new List<int>();
for (int c = 1; c <= columnCount; c++)
{
for (int r = 1; r < totalRow; r++)
{
if (dellabel == true)
{
if (matrixReaddelete[1, c].ToString() == matrixReaddelvariable[r, 1].ToString()||matrixReaddelete[1, c].ToString().Contains("_label"))
{
delCols.Insert(0, c);
break;
}
}
else if(matrixReaddelete[1, c].ToString() == matrixReaddelvariable[r, 1].ToString())
{
delCols.Insert(0, c);
break;
}
}
int percentage = (c + 1) * 50 / columnCount;
workerdelete.ReportProgress(percentage);
}
foreach (int colIndex in delCols)
{
xlWorksheetdelete.Columns[colIndex].Delete();
int percentage = 50 + ( delCols.IndexOf(colIndex) + 1 ) * 50 / delCols.Count;
workerdelete.ReportProgress(percentage);
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}