我的腳本讀取Excel表並獲取一個範圍,該範圍包含不同媒體文件的名稱,我將其添加到一個大列表中。我使用列表中的名稱來搜索目錄,如果它們存在於給定的文件目錄中,那麼它們將被添加到「existsAlready」列表中。如果它們不存在於給定文件中,則位於copyFiles目錄中,然後將它們複製到給定目錄並添加到「existsAdded」列表中。如果在任一目錄中找不到它們,則將這些文件添加到「existsNegative」列表中。所有3個列表被打印到單獨的列表框。如何讓這個腳本讀取一個excel,然後找到並複製文件運行得更快?
這一切工作,但我發現它運行有點慢:
1)雖然Excel的應用程序是不可見的,但它仍然推出了一秒鐘,然後關閉,減速過程。
2)如果文件夾中存在所有文件或者文件需要複製,應用運行良好/快速,但是如果目錄中找不到許多文件且無法複製,則運行速度很慢,如何我可以做得更快嗎?我想這與它必須搜索整個目錄並且找不到任何東西有關。
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open("@Excelfile");
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)excelWorkbook.Sheets[1];
excelApp.Visible = false;
excelApp.ScreenUpdating = false;
excelApp.DisplayAlerts = false;
Excel.Range range = xlWorkSheet.get_Range(B1:G1);
List<string> listFBX = new List<string>();
foreach (Excel.Range s in range)
{
listFiles.Add(s.Text());
}
List<string> existsAlready = new List<string>();
List<string> existsAdded = new List<string>();
List<string> existsNegative = new List<string>();
foreach (var item in listFiles)
{
string curFile = "X:\\Private\\DATA\\PROJECT DATA\\Database\\" + item;
string copyFrom = "X:\\Private\\DATA\\PROJECT DATA\\FilesToSearch" + item;
if (File.Exists(curFile))
{
existsAlready.Add(item);
}
else if (!File.Exists(curFile) && File.Exists(copyFrom))
{
File.Copy(copyFrom, curFile, true);
existsAdded.Add(item);
}
else
{
existsNegative.Add(item);
}
}
for (int i = 0; i < existsAlready.Count; i++)
{
listBox1.Items.Add(existsAlready.ElementAt(i));
}
for (int i = 0; i < existsAdded.Count; i++)
{
listBox2.Items.Add(existsAdded.ElementAt(i));
}
for (int i = 0; i < existsNegative.Count; i++)
{
listBox3.Items.Add(existsNegative.ElementAt(i));
}
爲什麼你甚至需要Excel互操作呢?爲什麼不使用能夠本機讀取Excel文件的庫,如EPPlus,NPOI。 ClosedXML,Office XML SDK,Aspose等 – mason
如果Excel Interop佔用了大部分時間,並且您正在閱讀xlsx文件,那麼您幾乎可以肯定使用EPPlus或ClosedXml等庫(https:// github的.com/ClosedXML/ClosedXML) – CalC