В настоящее время я использую следующий сегмент кода, чтобы получить строку со значением int в третьем столбце.Excel Interop Efficiency получает номер строки со значением в столбце
private int getRowByRDS(int id)
{
int bestfit = -1;
Boolean foundOne = false;
for (int i = 2; i < oSheet.Rows.Count; i++)
{
string val = getValueOfCell(i, 3);
if (val == null)
continue;
int rds = int.Parse(val);
if (rds == id)
{
bestfit = i;
foundOne = true;
}
else
if (foundOne)
return bestfit;
}
return bestfit;
}
Проблемы заключаются в том, что это патетически проявляется при большом количестве строк.
Может кто-то предложить лучший способ поиска седловины 3 для междунар и возвращает последнюю строку #, что он находится в
Для Джо:.
public void inputRowData(string[] data, int rds)
{
int bestRow = getRowByRDS_a(rds);
string[] formatedData = formatOutput(bestRow, data);
string val = getValueOfCell(bestRow, 6);
if (val != null)
{
shiftRows(bestRow, data.Length);
bestRow++;
}
else
shiftRows(bestRow, data.Length - 1);
// transform formated data into string[,]
string[][] splitedData = formatedData.Select(s => s.Split('\t')).ToArray();
var colCount = splitedData.Max(r => r.Length);
var excelData = new string[splitedData.Length, colCount];
for (int i = 0; i < splitedData.Length; i++)
{
for (int j = 0; j < splitedData[i].Length; j++)
{
excelData[i, j] = splitedData[i][j];
}
}
oSheet.get_Range("A" + bestRow.ToString()).Resize[splitedData.Length, colCount].Value = excelData;
MainWindow.mainWindowDispacter.BeginInvoke(new System.Action(() => MainWindow.mainWindow.debugTextBox.AppendText("Done with " + rds + " input!" + Environment.NewLine)));
}
private void shiftRows(int from, int numberof)
{
from++;
Range r = oXL.get_Range("A" + from.ToString(), "A" + from.ToString()).EntireRow;
for (int i = 0; i < numberof; i++)
r.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown);
}
Итак, я получил это далеко ... Диапазон colRange = oSheet.Columns [3] as Range; это 1. Следующий диапазон используется = oSheet.UsedRange ;. Теперь я понятия не имею, что делать lol –
@YaWang - ты на правильном пути. Следующим шагом будет вызов метода Application.Intersect для пересечения двух диапазонов. Удачи. – Joe
Получил еще одну проблему с эффективностью. Вам нужно высказать мнение о том, как лучше сместить ячейки вниз. Я поставлю свой текущий код в редакции выше –