2012-11-19 53 views
1

我的如下代碼:可以在多線程中對Excel表進行排序嗎?

Parallel.ForEach(listSheets, (xlWorkSheet1) => 
{ 
    // Excel.Worksheet xlWorkSheet1 = (Excel.Worksheet)excelbk.Worksheets["Sheet1"]; 
    xlRange = (Excel.Range)xlWorkSheet1.Cells[xlWorkSheet1.Rows.Count, 1]; 
    lock (xlRange) 
    { 
    // nRows = (long)xlRange.get_End(Excel.XlDirection.xlUp).Row; 
    nRows = xlWorkSheet1.UsedRange.Cells.Rows.Count; 
    xlRange = (Excel.Range)xlWorkSheet1.Rows["5:" + nRows, Type.Missing]; 
    xlRange.Sort(xlRange.Columns[clnum1, Type.Missing], 
        Excel.XlSortOrder.xlAscending, 
        xlRange.Columns[clnum2, Type.Missing], 
        Type.Missing, 
        Excel.XlSortOrder.xlAscending, 
        Type.Missing, 
        Excel.XlSortOrder.xlAscending, 
        Excel.XlYesNoGuess.xlNo, 
        Type.Missing, 
        Type.Missing, 
        Excel.XlSortOrientation.xlSortColumns, 
        Excel.XlSortMethod.xlStroke, 
        Excel.XlSortDataOption.xlSortTextAsNumbers, 
        Excel.XlSortDataOption.xlSortNormal, 
        Excel.XlSortDataOption.xlSortNormal); 

    Console.WriteLine("Sheet{0} have been sorted", xlWorkSheet1.Name); 
    } 
} 

listSheets被定義爲一個列表,當我調試它,它表明了COM異常問題一直沒有運行錯誤。

System.Runtime.InteropServices.COMException應用程序是忙(RPC_E_CALL_REJECTED 0x80010001)呼叫是由被叫(RPC_E_SERVERCALL_RETRYLATER 0x8001010A)拒絕

+2

錯誤的詳細信息是什麼? –

+0

你能更詳細地瞭解錯誤信息嗎?排序是否獨立運行(沒有並行部分)? – Mikeb

+0

嘗試使用解決方案提示http://stackoverflow.com/questions/11908397/c-sharp-excel-beforesave-thread – Nagg

回答

0

Excel不支持多線程的互操作的調用。在內部,它是多線程的。例如,您可以在選項頁面中啓用多線程重新計算,以顯着提高性能。但是,恐怕不能執行多線程互操作。

0

正如code4life所說:Excel不支持多線程互操作調用。 由於Excel的Sort方法在最新版本中已經是多線程的,所以嘗試多線程的東西已經沒有意義了。

相關問題