我有一個擁有數萬行的excel。我需要在這個excel中隨機插入數據。下面我有我正在使用的功能,現在主要關心的是移位和插入數據。我需要一個更好的主意或一種可以和我的一樣但速度更快的方法。有效插入行+數據
一個好的答案將有希望顯示一種方法和評論來解釋它是如何工作的。那麼如果有人需要它,它可以被重用。
這裏是我的:
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);
}
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)));
}
也許值得一試:從Excel中讀取所有數據,在您的應用程序中使用它,然後將它全部寫回去。 – Raidri
我對Interop沒有太多經驗,但背後糟糕表現的主要原因通常是使用多個範圍。你應該努力獲得一個相對較大的範圍(如果可能的話,代表整個工作表),然後執行所有必需的操作,然後用其他大範圍重複。 –
@Raidri我得到了用於我的表格的usedRange虐待編輯我的代碼中的範圍現在是什麼方法來替換sheetRange與我的新方法? –