두 데이터 테이블의 데이터를 두 개의 Excel 워크 시트에 수동으로 복사 한 다음 두 데이터 테이블의 데이터를 비교하는 코드가 있습니다.많은 셀과 행에 수동으로 서식을 적용하는 동안 자동화 성능이 우수합니다.
Excel에 데이터를 삽입하는 성능이 뛰어 났지만 누락 된 행을 선택하여 빨간색으로 강조 표시하고 다른 셀을 선택하고 강조 표시하는 병목이 있다고 생각합니다. 노랑.
나는 범위를 찾고 호출에 대해 궁금합니다 .Select()를 호출하고 Selection.Style을 설정하십시오.
저는 이미하고 있습니다 : oldInstance.Application.ScreenUpdating = false;
성능 향상을위한 다른 제안이 있는지 궁금하십니까?
아래 코드에는 루핑 등이 많이 있지만, 주요 성능 히트는 실제로 Excel에서 형식을 적용하는 것으로 보입니다. (내가 선택한 코드를 주석 처리하고 Selection.Style을 훨씬 빠르게 설정하면).
IEnumerable<DataRow> oldOnly = oldTable.Rows.OfType<DataRow>().Except(newTable.Rows.OfType<DataRow>(), lambdaComparer);
int oldOnlyRows = 0;
foreach (var dataRow in oldOnly)
{
int excelRowIndex = dataRow[ addedRowIndexColumnName ].ToString().ParseInt() + 2;
// Logger.Info("Row: {0} Old Only: {0}",excelRowIndex , dataRow[ keyColumnName ]);
(oldInstance.ActiveSheet.Rows[ excelRowIndex ] as Range).Select();
oldInstance.Selection.Style = "Bad";
oldOnlyRows++;
}
int newOnlyRows = 0;
IEnumerable<DataRow> newOnly = newTable.Rows.OfType<DataRow>().Except(oldTable.Rows.OfType<DataRow>(), lambdaComparer);
foreach (var dataRow in newOnly)
{
int excelRowIndex = dataRow[ addedRowIndexColumnName ].ToString().ParseInt() + 2;
// Logger.Info("Row: {0} New Only: {0}", excelRowIndex, dataRow[ keyColumnName ]);
(newInstance.ActiveSheet.Rows[ excelRowIndex ] as Range).Select();
newInstance.Selection.Style = "Bad";
newOnlyRows++;
}
int differentCells = 0;
var enumerable = ((from o in oldTable.Rows.OfType<DataRow>() join n in newTable.Rows.OfType<DataRow>() on o[ keyColumnName ] equals n[ keyColumnName ] select new { o, n }));
foreach (var x1 in enumerable)
{
for (int i = 0; i < newTable.Columns.Count -1; i++) // use Count - 1 so we ignore the last "RowIndex" column
{
if (x1.o[ i ].ToString() != x1.n[ i ].ToString())
{
int oldExcelRowIndex = x1.o[ addedRowIndexColumnName ].ToString().ParseInt() + 2;
var oldRange = oldInstance.GetCell(oldExcelRowIndex, i + 1);
oldRange.Select();
oldInstance.Selection.Style = "Neutral";
int newExcelRowIndex = x1.n[ addedRowIndexColumnName ].ToString().ParseInt() + 2;
var newRange = newInstance.GetCell(newExcelRowIndex, i + 1);
newRange.Select();
newInstance.Selection.Style = "Neutral";
differentCells ++;
}
}
}
왜 조건부 서식을 사용하지 않습니까? Excel의 조건부 서식 기능이 문제를 해결할 수 있습니까? – McKay
누락 된 행과 다른 데이터가있는 두 개의 다른 워크 시트를 비교할 때 조건부 서식을 사용할 수 있다고 생각하지 않습니다. – Derek
서식을 지정할 모든 셀을 Range 개체에 넣은 다음 끝에 Range에 서식을 적용합니다. – reggaeguitar