Я использую пакет служб SSIS для очистки и загрузки данных из файла .Xlsx в таблицу SQL Server.Я также должен выделить ячейки, содержащие неправильные данные в файле .Xlsx, для этого я должен получить обратно индексы столбцов и строк на основе имени столбца и идентификатора строки (что у меня есть в моей электронной таблице данных).Для этого я сравниваю имя каждого столбца из моей первой электронной таблицы (Error_Sheet
) со строками столбца, которые я добавил во второй электронной таблице, и делаю то же самое для строк, и если у меня одинаковое значение ячеек, я возвращаю столбец ииндексы строк в моей электронной таблице данных и выделение ячейки на основе этого столбца и индекса строки.Сценарий работал нормально, но после попытки запустить его с сервера я получил исключение памяти, а также на своей рабочей станции, где раньше он работал нормально.
Я пытался уменьшить диапазон, который я беруданные от: AC1:AC10000
до AC1:AC100
, он работал только после первой компиляции, но он снова генерирует исключение.
string strSQLErrorColumns = "Select * From [" + Error_Sheet + "AC1:AC100]";
OleDbConnection cn = new OleDbConnection(strCn);
OleDbDataAdapter objAdapterErrorColumns = new OleDbDataAdapter(strSQLErrorColumns, cn);
System.Data.DataSet dsErrorColumns = new DataSet();
objAdapterErrorColumns.Fill(dsErrorColumns, Error_Sheet);
System.Data.DataTable dtErrorColumns = dsErrorColumns.Tables[Error_Sheet];
dsErrorColumns.Dispose();
objAdapterErrorColumns.Dispose();
foreach (DataColumn ColumnData in dtDataColumns.Columns){
ColumnDataCellsValue = dtDataColumns.Columns[iCntD].ColumnName.ToString();
iCntE = 0;
foreach (DataRow ColumnError in dtErrorColumns.Rows){
ColumnErrorCellsValue = dtErrorColumns.Rows[iCntE].ItemArray[0].ToString();
if (ColumnDataCellsValue.Equals(ColumnErrorCellsValue)){
ColumnIndex = ColumnData.Table.Columns[ColumnDataCellsValue].Ordinal;
iCntE = iCntE + 1;
break;
}
}
iCntD = iCntD + 1;
}
ColumnIndexHCell = ColumnIndex + 1;
RowIndexHCell = RowIndex + 2;
Range rng = xlSheets.Cells[RowIndexHCell, ColumnIndexHCell] as Excel.Range;
rng.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow);
Существует любой другой способ загрузки данных в DataTable для получения столбца ииндекс строки без использования большого количества памяти или с помощью Excel.Range.Cell
вместо набора данных и DataTable для получения значения ячейки, индекса столбца и строки из файла xlsx, пожалуйста?
Я не показывал весь код, потому что он длинный,Пожалуйста, держите меня в курсе, если потребуется дополнительная информация.