2012-11-19 57 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方法在最新版本中已经是多线程的,所以尝试多线程的东西已经没有意义了。

相关问题